椭圆拟合

本文介绍了椭圆拟合的数学原理和MATLAB实现,包括最小二乘法、RANSAC算法以及直线拟合。通过随机选取数据点构建模型,确定最佳直线和椭圆模型,利用RANSAC算法提高拟合的鲁棒性。最后给出了MATLAB代码示例。
摘要由CSDN通过智能技术生成

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的直线拟合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值