1.最小二乘拟合
最小二乘拟合是一种数学上的近似和优化,利用已知的数据得出一条直线或者曲线,使之在坐标系上与已知数据之间的距离的平方和最小。
2.RANSAC算法
参见王荣先老师的博文 http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac-1.html
3,直线拟合
建立模型时利用直线的一般方程AX+BY+C=0,随机选取两点构建直线模型,计算每个点到此直线的TLS(Total Least Square),TLS小于一定阈值时的点为符合模型的点,点数最多时的模型即为最佳直线模型。再根据此时的直线参数画出最终拟合直线。
4.椭圆拟合
建立模型时利用椭圆的定义方程:dist(P,A)+dist(P,B)=DIST,其中P为椭圆上一点,A和B为椭圆两焦点。随机选取三点A,B,P构建椭圆模型,计算每个点到此两焦点的距离和与DIST的差值,差值小于一定阈值时的点为符合模型的点,点数最多时的模型即为最佳椭圆模型,再根据符合条件的点,利用椭圆一般方程Ax2+Bxy+Cy2+Dx+Ey+F=0 和得到符合点进行系数拟合,根据函数式画出最终拟合椭圆。
5.matlab代码
(1)最小二乘拟合
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % FILENAME LSF.m % FUNCTION Input points with mouse,Least-squares fit of lines to % 2D points % DATE 2012-10-12 % AUTHOR zhangying %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc; %% 鼠标输入点,enter键结束 axis([-10 10 -10 10]); [x,y]=ginput; %读取坐标直到按下回车键,返回坐标点的x,y坐标 num=length(x); %计算点的个数 %% 直接用最小二乘进行拟合 %通过最小化误差的平方和寻找数据的最佳函数匹配 [p1,s1]=polyfit(x,y,1); %n=1为直线拟合 x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量 [p2,s2]=polyfit(x,y,num-2); %n>1为曲线拟合,找到次数为n的多项式,对于数据点集(x,y),满足差的平方和最小 [p3,s3]=polyfit(x,y,num-1); %x必须是单调的。矩阵s用于在polyval中来估计误差。 xcurve=-10:2:10; %在这些点处求多项式的值 p1curve=polyval(p1,xcurve); %多项式曲线求值,返回对应自变量xcurve在给定系数P的多项式的值 p2curve=polyval(p2,xcurve); p3curve=polyval(p3,xcurve); %% 画图 plot(xcurve,p1curve,'g-',xcurve,p2curve,'b-',... xcurve,p3curve,'r-',x,y,'*'); title('不同次数的最小二乘拟合'); legend('degree 1','degree num-2','degree num-1','points');
(2)基于RANSAC的直线拟合