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

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

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

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




VC实现的代码:

  1. void CViewActionImageTool::LeastSquaresFitting()
  2. {
  3. if (m_nNum<)
  4. {
  5. return;
  6. }
  7.  
  8. int i=;
  9.  
  10. double X1=;
  11. double Y1=;
  12. double X2=;
  13. double Y2=;
  14. double X3=;
  15. double Y3=;
  16. double X1Y1=;
  17. double X1Y2=;
  18. double X2Y1=;
  19.  
  20. for (i=;i<m_nNum;i++)
  21. {
  22. X1 = X1 + m_points[i].x;
  23. Y1 = Y1 + m_points[i].y;
  24. X2 = X2 + m_points[i].x*m_points[i].x;
  25. Y2 = Y2 + m_points[i].y*m_points[i].y;
  26. X3 = X3 + m_points[i].x*m_points[i].x*m_points[i].x;
  27. Y3 = Y3 + m_points[i].y*m_points[i].y*m_points[i].y;
  28. X1Y1 = X1Y1 + m_points[i].x*m_points[i].y;
  29. X1Y2 = X1Y2 + m_points[i].x*m_points[i].y*m_points[i].y;
  30. X2Y1 = X2Y1 + m_points[i].x*m_points[i].x*m_points[i].y;
  31. }
  32.  
  33. double C,D,E,G,H,N;
  34. double a,b,c;
  35. N = m_nNum;
  36. C = N*X2 - X1*X1;
  37. D = N*X1Y1 - X1*Y1;
  38. E = N*X3 + N*X1Y2 - (X2+Y2)*X1;
  39. G = N*Y2 - Y1*Y1;
  40. H = N*X2Y1 + N*Y3 - (X2+Y2)*Y1;
  41. a = (H*D-E*G)/(C*G-D*D);
  42. b = (H*C-E*D)/(D*D-G*C);
  43. c = -(a*X1 + b*Y1 + X2 + Y2)/N;
  44.  
  45. double A,B,R;
  46. A = a/(-);
  47. B = b/(-);
  48. R = sqrt(a*a+b*b-*c)/;
  49.  
  50. m_fCenterX = A;
  51. m_fCenterY = B;
  52. m_fRadius = R;
  53.  
  54. return;
  55. }

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

(转)最小二乘法拟合圆公式推导及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++类中的静态成员变量与静态成员函数

    最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下. 静态成员的概念: 静态 ...

  2. C语言中对于结构的定义一般放在.h中还是.c中

    单文件使用的结构体放.c文件中 本模块内部使用结构体,放模块内部头文件中 供外部使用的结构体,放模块对外头文件中.

  3. 不用派生CTreeCtrl不用繁琐的过程 教你如何让CTreeCtrl的每一项有ToolTip提示

    最近工作中需要让CTreeCtrl控件的每一项都有提示信息,于是谷歌百度,爬山涉水,结果是………….在CodeProject里找到一篇文章是把CTreeCtrl派生出新类,重载一些函数自定义内容.使用 ...

  4. linux 下配置mysql区分大小写(不区分可能出现找不到表的情况)怎么样使用yum来安装mysql

    Linux 默认情况下,数据库是区分大小写的:因此,要将mysql设置成不区分大小写 在my.cof 设置 lower_case_table_names=1(1忽略大小写,0区分大小写) 检查方式:在 ...

  5. HTML5实现“摇一摇”效果

    在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...

  6. php 序列化储存和转化 json_encode() json_decode($q,true)

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 例如:当需要数据库只有一个 ...

  7. 生成bundle和移除bundle

    1.命令行生成bundle $ php bin/console generate:bundle --namespace=Acme/TestBundle 2.移除bundle(新的bundle) App ...

  8. python学习第一天 -安装配置及其输入输出

    Python, 是一种面向对象.解释型计算机程序设计语言. python适合领域: 1.Web网络和各种网络服务 2.系统工具和脚本 3.作为“胶水”语言把其他语言开发的模块包装起来方便使用 pyth ...

  9. 链接一个外部lib库的时候注意事项

    1.注意这个库是Debug版还是Release版,一般windows下,约定是Debug版的库文件名会加个d. 2.注意这个库是x86还是x64版本. 3.注意生成这个lib库的是什么编译器

  10. 记一次 java程序优化

    优化原因 环境中部署两个程序: web应用 tomcat   10G(webservice服务端,前端web服务) java应用               5G(webservice客户端,sock ...