拟合椭圆更一般就是对圆锥曲线拟合,椭圆、双曲线、抛物线区在方程中区别在于偏心率同“
1
”的比较。下文对于椭圆的拟合,可以更一般的推广到其它圆锥曲线的拟合中去。
在二维平面
xy
坐标系中有一离散的点集
,
i
=0,1,2,3…n-
1
,这
n
个点分布在椭圆曲线方程
上,其中
为点与拟合的期望方程
的偏差。
在
xy
坐标系中,椭圆方程的基本形式是:
。
证明如下:
圆锥曲线上的每一点
与曲线外的某点
的距离,与其到某直线
l
:
的距离之比为常数
,偏心率的大小也就决定了圆锥曲线的类型。
那么有:
;
等价 :
;
所以圆锥曲线满足形式:
。证毕
曲线的拟合方程的原则是:
→
。
,
,
,
,
之间线性无关,所以可以使问题转化为最小二乘线性拟合问题,如下:
=
;
=
;
=
;
有:
;
为了得到系数矩阵
X
,使得曲线方程
→
,对期望求导,得到最小二乘的矩阵表达式:
,点集的数量
n
大于
5
时,得到矩阵
以
2
范数为距离度量规则的最小解。当
可逆时
。
MATLAB
代码:
function
[F]=ellipsefit(X,Y)
X=X';
Y=Y';
M=[X.^2,Y.^2,X.*Y,X,Y];
temp=M'*M;
temp=inv(temp);
n=size(X,1);
F=temp*M'*ones(n,1);
end
Position: (-3.8
,-1)
、
(-4.5
,3.27)
、
(0.7701,-0.084)
、
(-1.32,-2.19)
、
(-4,0.05)
、
(1.054,3.32)
、
(-0.9196,6.8342)
、
(-3.59,6.17);
Return F:
F =[ 0.3008 ,0.1097,0.0154,0.9925,-0.4985];
椭圆方程拟合结束后,对于图像处理来说,通常需要把其“扶正”。
可以通过
xy
坐标系旋转来扶正,椭圆方程:
,改写成矩阵形式:
其中:
对其扶正,也就是寻找旋转矩阵:
使得:
以使椭圆可以表达为如下形式:
求解如下:
寻找
使正交阵
P
满足:
而由对称关系得出:
;
再而求得
,这便是坐标轴扶正所需旋转的角度的正切值。
由上文中拟合的的数据可以得到
。
以上便是圆锥曲线拟合和扶正的全过程。
转载本文请联系原作者获取授权,同时请注明本文来自黄川科学网博客。
链接地址:http://blog.sciencenet.cn/blog-567861-436167.html
下一篇:整数分拆matlab代码