(下文内容为转载,不过已经不清楚原创的是哪里了,特此说明)

转自: http://www.cnblogs.com/dotLive/archive/2006/10/09/524633.html

该网址下面有更多的讨论。

最小二乘法(least squares analysis)是一种 数学 优化 技术,它通过 最小化 误差 的平方和找到一组数据的最佳 函数 匹配。 最小二乘法是用最简的方法求得一些绝对不可知的真值,而令误差平方之和为最小。 最小二乘法通常用于 曲线拟合 (least squares fitting) 。这里有 拟合圆曲线 的公式推导过程 和 vc实现。




VC实现的代码:

 void CViewActionImageTool::LeastSquaresFitting()
{
if (m_nNum<)
{
return;
} int i=; double X1=;
double Y1=;
double X2=;
double Y2=;
double X3=;
double Y3=;
double X1Y1=;
double X1Y2=;
double X2Y1=; for (i=;i<m_nNum;i++)
{
X1 = X1 + m_points[i].x;
Y1 = Y1 + m_points[i].y;
X2 = X2 + m_points[i].x*m_points[i].x;
Y2 = Y2 + m_points[i].y*m_points[i].y;
X3 = X3 + m_points[i].x*m_points[i].x*m_points[i].x;
Y3 = Y3 + m_points[i].y*m_points[i].y*m_points[i].y;
X1Y1 = X1Y1 + m_points[i].x*m_points[i].y;
X1Y2 = X1Y2 + m_points[i].x*m_points[i].y*m_points[i].y;
X2Y1 = X2Y1 + m_points[i].x*m_points[i].x*m_points[i].y;
} double C,D,E,G,H,N;
double a,b,c;
N = m_nNum;
C = N*X2 - X1*X1;
D = N*X1Y1 - X1*Y1;
E = N*X3 + N*X1Y2 - (X2+Y2)*X1;
G = N*Y2 - Y1*Y1;
H = N*X2Y1 + N*Y3 - (X2+Y2)*Y1;
a = (H*D-E*G)/(C*G-D*D);
b = (H*C-E*D)/(D*D-G*C);
c = -(a*X1 + b*Y1 + X2 + Y2)/N; double A,B,R;
A = a/(-);
B = b/(-);
R = sqrt(a*a+b*b-*c)/; m_fCenterX = A;
m_fCenterY = B;
m_fRadius = R; return;
}

工程下载
编译运行后随便打开一个图片,当然最好是全白的图片,然后就点吧,大于三个点后就会开始拟合。红线画的圆为拟合的圆,深蓝的点为鼠标点击设置的样本点。单击鼠标右键清空样本集。

(转)最小二乘法拟合圆公式推导及vc实现[r]的更多相关文章

  1. .net core(c#)拟合圆测试

    说明 很多时候,我们需要运动物体的转弯半径去描述其机器性能.但在大多数的现实条件下,我们只能够获取到运动物体的 GPS 位置点集,并不能直接得到转弯半径或者圆心位置.为此,我们可以利用拟合圆的方式得到 ...

  2. 最小二乘法拟合java实现源程序(转)

    因为我所在的项目要用到最小二乘法拟合,所有我抽时间将C++实现的程序改为JAVA实现,现在贴出来,供大家参考使用./** * <p>函数功能:最小二乘法曲线拟合</p> * @ ...

  3. 利用最小二乘法拟合任意次函数曲线(C#)

    原文:利用最小二乘法拟合任意次函数曲线(C#) ///<summary>     ///用最小二乘法拟合二元多次曲线     ///</summary>     ///< ...

  4. 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)

    1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...

  5. 最小二乘法拟合非线性函数及其Matlab/Excel 实现

    1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...

  6. opencv——拟合圆

    #include "stdafx.h" #include "cv.h" #include "highgui.h" #include &quo ...

  7. golang 实现最小二乘法拟合直线

    func LeastSquares(x[]float64,y[]float64)(a float64,b float64){ // x是横坐标数据,y是纵坐标数据 // a是斜率,b是截距 xi := ...

  8. C#使用最小二乘法对多个离散点进行圆拟合

    /// <summary> /// 最小二乘法拟合圆,计算拟合圆半径和拟合圆圆心 /// </summary> /// <param name="points& ...

  9. Halcon 10.0:Sample 分割边缘拟合圆Circles.hdev

    处理流程:快速二值化(区域)->获取区域边缘->截取边缘->膨胀边缘区域(定位)->定位区域进行边缘检测->边缘分割:线和圆->选择属性为圆的弧->拟合圆 * ...

随机推荐

  1. C#设置鼠标在控件上面时,改变光标形状

    //设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...

  2. hdu5358 First One(尺取法)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud First One Time Limit: 4000/2000 MS (Java/ ...

  3. Protobuf, understand the hood

    proto文件定义 package lm; message Foo{ required int32 id = 1; } message Bar{ required int32 id = 1 [defa ...

  4. [Mugeda HTML5技术教程之13]链接的添加方式

    在广告主的需求中,有很多情况下需要在动画中添加一些外部链接.这份文档就在Mugeda动画中添加外部链接的方式,做一下梳理. 1.通过点击触发的链接 就是要用户点击屏幕来触发链接的情况,这是推荐使用的方 ...

  5. kafka相关应用

    一.kafka官网地址 http://kafka.apache.org 下载地址: http://kafka.apache.org/downloads.html 二.版本 0.9.0.1 is the ...

  6. 解决ligerUI服务器分页Total不起作用的问题

    Js代码:   $('#userTable').ligerGrid({ width:'100%', height:'100%', title:'用户列表', //url:'', dataAction: ...

  7. 使用Windows USB-DVD制作U盘启动安装系统盘

    第一步:到如下所示的地址下载所需要的*.iso系统镜像文件. http://msdn.itellyou.cn/ 第二步:下载Windows USB-DVD工具 https://www.microsof ...

  8. linux之chdir函数解析

    [lingyun@localhost chdir]$ ls chdir.c [lingyun@localhost chdir]$ cat chdir.c  /********************* ...

  9. [转载]Linux编程 sockaddr_in 和sockaddr和in_addr详解

    sockaddr sockaddr 是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 sa_family是地址家族,一般都是"AF_xxx& ...

  10. 《TCP/IP具体解释卷2:实现》笔记--4种不同类型的mbuf

    mbuf的主要用途是保存子进程和网络接口间互相传递的用户数据.但mbuf也用于保存其它各种数据:源于目的地址.插口 选项等等. 以下介绍我们要遇到的四种类型的mbuf,它们根据在成员m_flag中填写 ...