本文共 1907 字,大约阅读时间需要 6 分钟。
转自:http://www.cnblogs.com/dotLive/archive/2007/04/06/524633.html
最小二乘法(least squares analysis)是一种 数学 优化 技术,它通过 最小化 误差 的平方和找到一组数据的最佳 函数 匹配。 最小二乘法是用最简的方法求得一些绝对不可知的真值,而令误差平方之和为最小。 最小二乘法通常用于 曲线拟合 (least squares fitting) 。这里有 拟合圆曲线 的公式推导过程 和 vc实现。
VC实现的代码:
编译运行后随便打开一个图片,当然最好是全白的图片,然后就点吧,大于三个点后就会开始拟合。红线画的圆为拟合的圆,深蓝的点为鼠标点击设置的样本点。单击鼠标右键清空样本集。
下面是matlab代码: (http://wenku.baidu.com/link?url=mPD8NOhWJUjQwl2rcXms8Mm2dhI5EY402uXztZeCjwfRKx44v6sg10XDJnlRBJU-mIYJbywZ_4lHL0HBiHVoouURf-DWiKxXgPwfM951lXK) 比如用其他算法(如霍夫、链码、形态学等)得到了某个圆或者近似圆的轮廓,想要将其标准化。
%%此程序用于对二值图像获得的圆形边缘进行圆拟合,计算出圆心坐标及半径 %最小二乘法进行曲线拟合 function [xc,yc,R] = cirfit(x,y)%x、y为坐标点,都是一组向量。如x=[x1,x2,x3,...,xn] n=length(x); xx=x.*x; yy=y.*y; xy=x.*y; A=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)]; B=[-sum(xx+yy); -sum(xx.*y+yy.*y); -sum(xx.*x+xy.*y)]; a=A\B; xc = -0.5*a(1); yc = -0.5*a(2); R = sqrt((a(1)^2+a(2)^2)/4-a(3)); end
%结束后返回的值便是圆心坐标及半径