通常我们在对一些数据进行直线,圆,圆柱,圆球等规则几何体进行拟合时,需要用到最小二乘法,只需要使其平方差最小,即可得到相应几何体的数学表达式。
一、最小二乘法
例如一组数据F={(X1,Y1),(X2,Y2),(X3,Y3)…,(Xn,Yn)},需要通过这组数据得到一条直线,设该条直线为:y=ax+b;使得(ax+b)的输出尽可能接近,从而使得预测值和真实值之间的方差最小,可以用下式表达:
E=(aX1+b-Y1)+(aX2+b-Y2)+(aX3+b-Y3)+.……+(aXn+b-Yn)
此时,如果使得E的值最小,即可到未知数a,b的值。

从公式中可以知晓Xi,Yi是已经量,只有a,b是未知量,即对其进行偏导,可以求得E最小时a,b的值。
对a求偏导:

对b求偏导:

最终得到2个二元一次方程,形成方程组,进行消元,求得a,b的值。
二、PCL中最小二乘法拟合点云直线源码
int fitLine(pcl::PointCloudpcl::PointXYZ::Ptr m_pPointCloud)
{

if (m_pPointCloud->points.empty())
{return 2;
}pcl::ModelCoefficients::Ptr coefficients4(new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers4(new pcl::PointIndices);
pcl::SACSegmentation<pcl::PointXYZ> seg4;
seg4.setOptimizeCoefficients(true);
seg4.setModelType(pcl::SACMODEL_LINE);
seg4.setMethodType(pcl::SAC_LMEDS);
seg4.setDistanceThreshold(distanceTolerance);
//输入点云
seg4.setInputCloud(m_pPointCloud);
//分割点云
seg4.segment(*inliers4, *coefficients4);
if (inliers4->indices.size() != 0)
{//提取直线pcl::ExtractIndices<pcl::PointXYZ> extract4;extract4.setInputCloud(m_pPointCloud);extract4.setIndices(inliers4);extract4.setNegative(false);extract4.filter(*m_pValidatePointCloud);return 0;
}
else
{return 1;
}

}
代码中有的参数是写在了头文件中,需要自己手动添加。

最小二乘法简解及空间直线拟合相关推荐

  1. PCL:多直线拟合(RANSAC)

    文章目录 1 RANSAC 空间直线拟合 2 RANSAC 多直线拟合 1 RANSAC 空间直线拟合 具体可参考以下博客. https://blog.csdn.net/weixin_46098577 ...

  2. 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?

    我的理解是,直接求距离之和可能导致多个解存在的情况,而求距离平方和可以保证唯一解,参考: 当且仅当a=b时,不等式等号成立 参考文章:利用最小二乘法,用直线拟合5点时,为什么计算竖直距离而非垂直距离?

  3. 最小二乘法详解(线性拟合与非线性拟合)

     监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归.回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表 ...

  4. 怎么把曲线拟合成一条直线 matlab,用matlab怎么拟合一条空间直线

    直线无所谓空间的,直线都在一平面上.如果您说的是曲线,那就比较麻烦. 最小二乘法直线拟合程序. 最小二乘法直线拟合如下: %Created by Safirst C. Ke 2009.3.27 Wed ...

  5. 最小二乘法直线拟合汇总

    原文链接:https://www.jianshu.com/p/1c4f3edbaa47 首先最小二乘法是面对不连续的离散点. 它的本质是求某些参数,估计值在整体下可以使误差ε最小. 对于离散点的直线拟 ...

  6. 【C++】【Ctrl+CV即可食用】三维点拟合空间直线

    前景概述 网上三维点拟合空间直线的代码很多 大多数都是python或者matlab 这里贴一个C++的代码 原目的是拟合出直线之后任取两个点手动计算一下斜率 数学原理 最小二乘拟合直线方程: x−x0 ...

  7. 基于opencv的c++图像处理(霍夫直线检测与最小二乘法直线拟合)

    前言 基于opencv的c++接口,实现标准的霍夫直线检测.基于统计概率的霍夫直线检测.以及最小二乘法直线拟合. 相关的opencv接口解析 CV_EXPORTS_W void HoughLines( ...

  8. 最小二乘法-直线拟合-推荐方法

    1. 最小二乘法 首先举个例子. 针对线性最小二乘法即直线拟合,如下图(来自维基百科)所示: 根据已有的数据(图中的点),来做出一条最贴近数据发展趋势的直线. 通过这条直线,我们可以对未来的数据进行预 ...

  9. python直线拟合_RANSAC算法详解(附Python拟合直线模型代码)

    之前只是简单了解RANSAC模型,知道它是干什么的.然后今天有个课程设计的报告,上去讲了一下RANSAC,感觉这个东西也没那么复杂,所以今天就总结一些RASAC并用Python实现一下直线拟合. RA ...

  10. 【OpenCV3】直线拟合——cv::fitLine()详解

    在图像处理中,通常会遇到根据给定的点集(比如轮廓)拟合出一条直线的情形.opencv2和opencv3中提供了一个专门用于直线拟合的函数--cv::fitLine(). 下面对该函数作一详细的介绍. ...

最新文章

  1. Windows10远程桌面Ubuntu——把服务器当超高配置的个人电脑使用
  2. insert size|single-read|Paired-end|Mate-pair
  3. 在继承中派生类成员的访问权限测试
  4. 纯CSS实现圆角边框
  5. Smack 3.3.1 发布,Java 的 XMPP 开发包
  6. 斐波那契数列(大数)
  7. Algs4-1.3.46栈可生成性问题中禁止出现的排列
  8. 计算机音乐新年好呀,新年好呀新年好 伴奏
  9. 魔百盒 UNT403A UNT413A S905L3A卡刷精简固--S905L3A
  10. LaTeX的语法问题及写作模板汇总
  11. 用上周的作业:画一个太阳、地球、月亮的运动模型来剖析OpenGL中变换乃至整个绘制的秘密
  12. 关于线宽与PCB过孔铺铜的一点经验
  13. MATLAB中表示点形状、颜色的常见符号
  14. Flutter控件——常用控件:按钮
  15. Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.
  16. char*、char**和char***的使用
  17. 图像处理技术及相应C++代码
  18. vue如何实现消息的无缝滚动
  19. 给大家分享一下从卷烟-电子烟-口含烟的发展过程
  20. 微星极光授权使用步骤

热门文章

  1. Unity3DAI行为------路径跟随
  2. 抖音上热门的小技巧,不看后悔
  3. html中鼠标冒泡泡,鼠标经过出现气泡框的简单实例
  4. 每秒浮点运算次数FLOPS
  5. 解决VS下载慢的问题
  6. 大数据智能学院的硕士论文怎么写_大数据智能营销笔记本怎么样
  7. 台式计算机如何自动开关机,台式机怎么设置自动开关机
  8. 20条理由告诉你,为什么当前的深度学习成了人工智能的死胡同?
  9. One-shot Face Reenactment(BMVC19)
  10. 前端面试谈:项目经历的 STAR 法则