最小二乘法简解及空间直线拟合
通常我们在对一些数据进行直线,圆,圆柱,圆球等规则几何体进行拟合时,需要用到最小二乘法,只需要使其平方差最小,即可得到相应几何体的数学表达式。
一、最小二乘法
例如一组数据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;
}
}
代码中有的参数是写在了头文件中,需要自己手动添加。
最小二乘法简解及空间直线拟合相关推荐
- PCL:多直线拟合(RANSAC)
文章目录 1 RANSAC 空间直线拟合 2 RANSAC 多直线拟合 1 RANSAC 空间直线拟合 具体可参考以下博客. https://blog.csdn.net/weixin_46098577 ...
- 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?
我的理解是,直接求距离之和可能导致多个解存在的情况,而求距离平方和可以保证唯一解,参考: 当且仅当a=b时,不等式等号成立 参考文章:利用最小二乘法,用直线拟合5点时,为什么计算竖直距离而非垂直距离?
- 最小二乘法详解(线性拟合与非线性拟合)
监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归.回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表 ...
- 怎么把曲线拟合成一条直线 matlab,用matlab怎么拟合一条空间直线
直线无所谓空间的,直线都在一平面上.如果您说的是曲线,那就比较麻烦. 最小二乘法直线拟合程序. 最小二乘法直线拟合如下: %Created by Safirst C. Ke 2009.3.27 Wed ...
- 最小二乘法直线拟合汇总
原文链接:https://www.jianshu.com/p/1c4f3edbaa47 首先最小二乘法是面对不连续的离散点. 它的本质是求某些参数,估计值在整体下可以使误差ε最小. 对于离散点的直线拟 ...
- 【C++】【Ctrl+CV即可食用】三维点拟合空间直线
前景概述 网上三维点拟合空间直线的代码很多 大多数都是python或者matlab 这里贴一个C++的代码 原目的是拟合出直线之后任取两个点手动计算一下斜率 数学原理 最小二乘拟合直线方程: x−x0 ...
- 基于opencv的c++图像处理(霍夫直线检测与最小二乘法直线拟合)
前言 基于opencv的c++接口,实现标准的霍夫直线检测.基于统计概率的霍夫直线检测.以及最小二乘法直线拟合. 相关的opencv接口解析 CV_EXPORTS_W void HoughLines( ...
- 最小二乘法-直线拟合-推荐方法
1. 最小二乘法 首先举个例子. 针对线性最小二乘法即直线拟合,如下图(来自维基百科)所示: 根据已有的数据(图中的点),来做出一条最贴近数据发展趋势的直线. 通过这条直线,我们可以对未来的数据进行预 ...
- python直线拟合_RANSAC算法详解(附Python拟合直线模型代码)
之前只是简单了解RANSAC模型,知道它是干什么的.然后今天有个课程设计的报告,上去讲了一下RANSAC,感觉这个东西也没那么复杂,所以今天就总结一些RASAC并用Python实现一下直线拟合. RA ...
- 【OpenCV3】直线拟合——cv::fitLine()详解
在图像处理中,通常会遇到根据给定的点集(比如轮廓)拟合出一条直线的情形.opencv2和opencv3中提供了一个专门用于直线拟合的函数--cv::fitLine(). 下面对该函数作一详细的介绍. ...
最新文章
- Windows10远程桌面Ubuntu——把服务器当超高配置的个人电脑使用
- insert size|single-read|Paired-end|Mate-pair
- 在继承中派生类成员的访问权限测试
- 纯CSS实现圆角边框
- Smack 3.3.1 发布,Java 的 XMPP 开发包
- 斐波那契数列(大数)
- Algs4-1.3.46栈可生成性问题中禁止出现的排列
- 计算机音乐新年好呀,新年好呀新年好 伴奏
- 魔百盒 UNT403A UNT413A S905L3A卡刷精简固--S905L3A
- LaTeX的语法问题及写作模板汇总
- 用上周的作业:画一个太阳、地球、月亮的运动模型来剖析OpenGL中变换乃至整个绘制的秘密
- 关于线宽与PCB过孔铺铜的一点经验
- MATLAB中表示点形状、颜色的常见符号
- Flutter控件——常用控件:按钮
- Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.
- char*、char**和char***的使用
- 图像处理技术及相应C++代码
- vue如何实现消息的无缝滚动
- 给大家分享一下从卷烟-电子烟-口含烟的发展过程
- 微星极光授权使用步骤