C++最小二乘法拟合平面
、`bool AlgFitPlane::FitPlane3D(std::vector& points, float& A, float& B, float& C, float& D)
{
if (points.size() < 3)
{
return false;
}
//判断是否共线
if (AlgCheckCollinear::Check(points))
{return false;
}Eigen::MatrixXd Am = Eigen::MatrixXd::Zero(4, 4);
Eigen::VectorXd Bm = Eigen::VectorXd::Zero(4, 1);Am(3, 3) = points.size();
for (std::size_t i = 0; i < points.size(); i++)
{Am(0, 0) += pow(points[i].x_, 2);Am(0, 1) += points[i].x_ * points[i].y_;Am(0, 2) += points[i].x_ * points[i].z_;Am(0, 3) += points[i].x_;Am(1, 1) += pow(points[i].y_, 2);Am(1, 2) += points[i].y_ * points[i].z_;Am(1, 3) += points[i].y_;Am(2, 2) += pow(points[i].z_, 2);Am(2, 3) += points[i].z_;
}Am(1, 0) = Am(0, 1);
Am(2, 0) = Am(0, 2);
Am(2, 1) = Am(1, 2);
Am(3, 0) = Am(0, 3);
Am(3, 1) = Am(1, 3);
Am(3, 2) = Am(2, 3);Eigen::BDCSVD<Eigen::MatrixXd> Cm = Am.bdcSvd(Eigen::ComputeThinU | Eigen::ComputeThinV);
//Eigen::JacobiSVD<Eigen::MatrixXd> Cm = Am.jacobiSvd(Eigen::ComputeThinU | Eigen::ComputeThinV);Eigen::Matrix4d V = Cm.matrixV();
Eigen::MatrixXd U = Cm.matrixU();Eigen::Vector4d normal;
normal << V(0, 3), V(1, 3), V(2, 3), V(3, 3);A = normal(0, 0) / normal.head<3>().norm();
B = normal(1, 0) / normal.head<3>().norm();
C = normal(2, 0) / normal.head<3>().norm();
D = normal(3, 0) / normal.head<3>().norm();
}`
C++最小二乘法拟合平面相关推荐
- Matlab 最小二乘法拟合平面(SVD)
文章目录 一.简介 1.1最小二乘法拟合平面 1.2 SVD角度 二.实现代码 三.实现效果 参考资料 一.简介 1.1最小二乘法拟合平面 之前我们使用过最为经典的方式对平面进行了最小二乘拟合(点云最 ...
- PCL最小二乘法拟合平面
PCL最小二乘法拟合平面 效果 过滤掉不属于拟合平面的点(点到平面距离处于阈值外的点) 原理参考 最小二分法拟合平面 过程推导如下 PCL实现 #include <QCoreApplicatio ...
- Matlab 最小二乘法 拟合平面
一.原理推导 最小二乘法 拟合平面是我们最常用的拟合平面的方法,但是有特殊的情况是用这种方法是不能拟合的,后续会加上这种拟合方法(RANSAC). matlab 最小二乘拟合平面(方法一) - 灰信网 ...
- 最小二乘法拟合平面原理MATLABC++实现
文章目录 最小二乘法拟合平面原理MATLAB&C++实现 最小二乘法拟合平面原理 MATLAB实现 c++实现 最小二乘法拟合平面原理MATLAB&C++实现 最小二乘法拟合平面原理 ...
- python 最小二乘法三维坐标拟合平面_【MQ笔记】超简单的最小二乘法拟合平面(Python)...
这篇笔记中,我主要通过解决"由离散点拟合平面"这个小问题,学习了超定方程最小二乘解的求解方法.在这里我整理了两种求解思路用以交流. 直接求解超定方程. 我们知道,对于一个平面,其方 ...
- 点云最小二乘法拟合平面
文章目录 一.简介 二.算法实现 三.实现效果 参考文献 一.简介 点云平面拟合的实质其实就是用一个拟合平面取代近似位于同一平面的点云,使点云中的所有点到拟合平面的距离平方和最小, 达到点云与拟合平面 ...
- 最小二乘法 拟合平面直线
前言: 最近要实现一个算法,"对一系列点拟合出一条线,且区分出不属于该线的点".在网上找了许多资料,用数学公式解释原理以及用matlab实现的居多,本文章主要解释用最小二乘法的进行 ...
- RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读
本章代码是本人根据一个未曾谋面的好人学习的(要怀抱希望,世界上好人真的是很多的,我要做一个去给别人带去正能量积极态度的人,加油喽),如需转载学习请注明.谢谢 ---------------基于rans ...
- 最小二乘法拟合直线——MATLAB和Qt-C++实现
本节Jungle用C++实现最小二乘法拟合平面直线. 1.理论知识 平面直线的通用方程可以表示为 A+Bx-y=0 其中,A是直线的截距,B是直线的斜率.对于测量的二维坐标(x,y),x是精确分布的, ...
最新文章
- 百度推出自动驾驶系统Apollo2.0, 距商业化“更近一步”!
- python最大公约数
- [导入]较为周全的Asp.net提交验证方案 (下)
- ASP.NET Core分布式项目实战(运行Consent Page)--学习笔记
- 台式计算机进入安全模式蓝屏,windows进入系统安全模式时蓝屏怎么办?
- shell等待特定进程pid退出的方法
- 使用vSAN RVC进一步了解vSAN环境
- web.xml文件书写规则
- Android网络应用的封装与调度
- ChromeFFOpera下DIV不设置高度显示背景颜色和边框的办法
- 开启协程_一篇文章搞懂Python协程
- 符晓《TMS320F28335DSP原理、开发及应用》2017版
- sp_send_dbmail参数设置
- 小编为你简单介绍基本ERP管理系统模块
- 英语砖石法则(三)----用好你的耳朵
- 罗技craft键盘使用入门
- Python 核心编程(第二版)——网络编程
- Linux服务器查看带宽,进程和线程
- 解决SQL Server占用服务器内存过高问题
- 定位线程Segment fault (SIGSEGV)的方法