- 注册时间
- 2011-3-2
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 836
- 在线时间
- 小时
|
发表于 2015-1-13 10:55:33
|
显示全部楼层
本帖最后由 dianyancao 于 2015-1-13 11:45 编辑
最小二乘法拟合直线
直线的一般方程可表示为\(ax+by+c=0\),考虑直线上的一个点\(\textbf{z}_k\),采用齐次坐标,
将点\(\textbf{z}_k\)表示为行向量\(\textbf{A}_k=(x_k,y_k,1)\),直线表示为列向量\(\textbf{z}=(a,b,c)^T\),则:
\[\textbf{A}_k\textbf{z}=0\]
并限定\(a^2+b^2+c^2=1\),防止\(a,b,c\)同时为\(0\),写成矩阵形式为:
\[\textbf{A}\textbf{z}=\textbf{0},||\textbf{A}||_2=1\]
当需要用上式拟合\(n\geq3\)个点时,可用最小二乘法拟合,即是让每个点到该直线的误差的平方和\(\epsilon(\textbf{z})\)最小化
\(\epsilon(\textbf{z})\)可表示为\(\epsilon(\textbf{z})=\sum_{k=1}^{n}(\textbf{A}_k\textbf{z})^2\)
对\(\epsilon(\textbf{z})\)求对于列向量\(\textbf{z}\)中每个分量\(\textbf{z}_i\)的偏导数,并令其等于\(0\),可求得\(\epsilon(\textbf{z})\)的最小值,各偏导数为:
\[\frac{\partial \epsilon(\textbf{z})}{\partial \textbf{z}_{i}}=\sum_{k=1}^{n}2(\textbf{A}_k\textbf{z})(\textbf{A}_k)_i=0\]
将上式写成矩阵形式为:
\[\textbf{A}^T\textbf{A}\textbf{z}=\textbf{0}\]
可直接用高斯消元法求得该线性齐次方程组的非\(\textbf{0}\)解\(\textbf{z}\),\(\textbf{z}\)在\(\textbf{A}^T\textbf{A}\)的秩为\(2\)时是唯一的,
求得\(\textbf{z}\)后将其归一化为\(\textbf{z}/||\textbf{z}||_2^2\)即解出直线的参数\((a,b,c)^T\)
为将该直线参数化,设\(\textbf{z}(t)=\textbf{M}(t,1,0)^T\),其中\(\textbf{M}\)是\(3*3\)矩阵,\(\textbf{M}\)排除左上角\(2*2\)子矩阵外的部分为\(0\),那么
\[\textbf{A}\textbf{z}(t)=\textbf{A}\textbf{M}(t,1,0)^T=\textbf{0}\]
上式的取值不依赖于\(t\),因此
\[\textbf{A}\textbf{M}=\textbf{0}\]
限定\(\textbf{M}\)的左上角\(2*2\)子矩阵\(||\textbf{M}_{2*2}||_2=1\),用高斯消元法求得\(\textbf{M}_{2*2}\)的一个非\(\textbf{0}\)解并将其归一化后为\(\textbf{L}=\textbf{M}_{2*2}/{||\textbf{M}_{2*2}||_2^2}\),
即得到拟合出的直线为\(\textbf{z}(t)=\textbf{L}(t,1)\),写成参数方程形式为:
\[x(t)=\textbf{L}_{11}t+\textbf{L}_{12} \\
y(t)=\textbf{L}_{21}t+\textbf{L}_{22}\]
下面考虑拟合二次曲线,二次曲线的一般方程可表示为
\[a_{00}+a_{01}y+a_{02}y^2+a_{10}x+a_{11}xy+a_{20}x^2=0\]
有相应的二次型矩阵和上式对应,为:
\[\textbf{z}^T\textbf{A}\textbf{z}=\textbf{0} \\
||\textbf{A}||_2=1\]
其中\(\textbf{z}\)的第\(k\)列\(\textbf{z}_k=(x_k,y_k,1)^T\),\(\textbf{A}\)为对称矩阵,和二次曲线参数对应
用最小二乘法拟合该曲线,使得误差的平方和\(\epsilon(\textbf{A})\)最小化
\[\epsilon(\textbf{A})=\sum_{k=1}^{n}({\textbf{z}_k}^T\textbf{A}\textbf{z}_k)^2\]
令偏导数\(\frac{\partial \epsilon(\textbf{A})}{\partial \textbf{A}_{ij}}=0\),其中\(i\leq j\),得:
\[\frac{\partial \epsilon(\textbf{A})}{\partial \textbf{A}_{ij}}=\sum_{k=1}^{n}({\textbf{z}_k}^T\textbf{A}\textbf{z}_k)^2=\sum_{k=1}^{n}2({\textbf{z}_k}^T\textbf{A}\textbf{z}_k)(\textbf{z}_k)_i(\textbf{z}_k)_j=0\]
一共有\(6\)个偏导数构成线性齐次方程组,可求得其非\(\textbf{0}\)解\(\textbf{A}\),那么拟合出的二次曲线一般方程为:
\[\textbf{z}^T\textbf{A}\textbf{z}=\textbf{0}\]
将对称矩阵\(\textbf{A}\)对角化,使得\(\textbf{A}=\textbf{Q}^T\varLambda \textbf{Q}\),其中\(\textbf{Q}\)为正交矩阵,\(\varLambda\)为对角阵,\(\varLambda\)的对角元素是\(\textbf{A}\)的实特征值
令\(\textbf{A}=\textbf{Q}^T\varLambda^{\frac{1}{2}}\varLambda^{\frac{1}{2}}\textbf{Q}=\textbf{C}^T\textbf{C}\),那么
\[\textbf{z}^T\textbf{A}\textbf{z}=\textbf{z}^T\textbf{C}^T\textbf{C}\textbf{z}=(\textbf{C}\textbf{z})^T\textbf{C}\textbf{z}=\textbf{0}\]
因此,\(||\textbf{C}\textbf{z}||_2=0\),即
\[\textbf{C}\textbf{z}=\textbf{0}\]
为将该二次曲线参数化,设\(\textbf{z}(t)=\textbf{M}(t^2,t,1)^T\),其中\(\textbf{M}\)是\(3*3\)仿射矩阵,那么有:
\(\textbf{C}\textbf{M}(t^2,t,1)^T=\textbf{0}\),该式的取值和\(t\)无关,因此
\[\textbf{C}\textbf{M}=\textbf{0}\]
求得该方程关于\(\textbf{M}\)中仿射参数的非\(\textbf{0}\)解并归一化得到\(\textbf{L}_{2*3}=\textbf{M}_{2*3}/||\textbf{M}_{2*3}||_2^2\)
那么拟合出的二次曲线的参数方程为:
\[x(t)=\textbf{L}_{11}t^2+\textbf{L}_{12}t+\textbf{L}_{13} \\
y(t)=\textbf{L}_{21}t^2+\textbf{L}_{22}t+\textbf{L}_{23}\]
对于平面上的\(n\)次多项式曲线,其一般方程可表示为:
\[\sum_{p+q\leq n}c_{pq}x^py^q=0\]
提供了一组\((x_k,y_k,1)\)的值组成向量组\(\textbf{A}\)后,就给出了关于系数\(c_{pq}\)的线性方程组
可以通过高斯消元法求解系数\(c_{pq}\),当\(\textbf{A}^T\textbf{A}\)的秩为\(n-1\)时系数\(c_{pq}\)的非\(\textbf{0}\)解是唯一的
我刚系统的了解了下最小二乘法,来自这本书《计算机视觉中的数学方法 吴福朝》[189]页
关于\(n\)次曲线的参数化,是不是总是可以通过关于\(t\)的\(\lceil \frac{(n+2)(n+1)}{4}\rceil=m\)个多项式基\(\{1,t,t^2,...,t^m\}\)来参数化呀?
对于\(n\geq3\)时应该如何参数化用系数\(c_{pq}\)表示的\(n\)次的曲线呀? |
|