Open3D:RANSAC拟合平面分割点云(C++)

20200918:最近骨折了,很烦。蹦蹦跳跳的,膝盖疼。

一、RANSAC(Random Sample Consensus)

https://baike.baidu.com/item/ransac/10993469?fr=aladdin

(省的某些人嫌弃我不讲原理)

二、代码

分享给有需要的人,代码质量勿喷。

//Open3D
#include "Open3D/Open3D.h"

//Eigen
#include "Eigen/Dense"

/* RANSAC平面分割 */
void testOpen3D::pcPlaneRANSAC(const QString &pcPath)
{
	int width = 700, height = 500;
	auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>();
	if (!open3d::io::ReadPointCloud(pcPath.toStdString(), *cloud_ptr)) { return; }
	open3d::visualization::DrawGeometries({ cloud_ptr }, "Point Cloud 1", width, height);


	/***** 距离阈值,平面最小点数,最大迭代次数。返回平面参数和内点 *****/
	double tDis = 0.05;
	int minNum = 3;
	int numIter = 100;
	std::tuple<Eigen::Vector4d, std::vector<size_t>> vRes = cloud_ptr->SegmentPlane(tDis, minNum, numIter);

	//ABCD
	Eigen::Vector4d para = std::get<0>(vRes);
	//内点索引
	std::vector<size_t> selectedIndex = std::get<1>(vRes);


	//内点赋红色
	std::shared_ptr<open3d::geometry::PointCloud> inPC = cloud_ptr->SelectByIndex(selectedIndex, false);
	const Eigen::Vector3d colorIn = { 255,0,0 };
	inPC->PaintUniformColor(colorIn);

	//外点赋黑色
	std::shared_ptr<open3d::geometry::PointCloud> outPC = cloud_ptr->SelectByIndex(selectedIndex, true);
	const Eigen::Vector3d colorOut = { 0,0,0 };
	outPC->PaintUniformColor(colorOut);


	//显示 
	open3d::visualization::DrawGeometries({ inPC,outPC }, "RANSAC平面分割", width, height);
}

三、结果

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
点云RANSAC拟合平面是一种基于RANSACRandom Sample Consensus)算法的方法,用于从三维点云中提取出一个平面模型。该方法的基本思想是通过随机采样一组点,拟合一个平面模型,并计算该模型与其他点之间的误差。根据误差的阈值,筛选出满足误差要求的内点,并将这些内点用于再次拟合平面模型。重复这个过程,直到达到停止条件,即提取出所有的平面。 在具体实现中,可以使用点云库PCL(Point Cloud Library)来进行RANSAC平面拟合。使用PCL中的函数可以方便地进行点云数据的读取和处理,以及进行RANSAC平面拟合。首先,从点云中随机选择一组点作为初始的内点集合,拟合一个平面模型。然后,计算其他点到该模型的距离,并根据阈值筛选出符合要求的内点。接着,使用筛选出的内点再次拟合新的平面模型。重复这个过程,直到满足停止条件,即提取出所有的平面模型。 通过RANSAC平面拟合,可以将三维不平整的表面近似为一个平面,并将表面上的点投影到该平面上,从而实现对点云数据的平面化处理。这种方法可以广泛应用于计算机视觉、三维重建、机器人导航等领域。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [RANSAC点云平面拟合分割](https://blog.csdn.net/Subtlechange/article/details/123004329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [PCL Ransac 点云平面拟合 C++](https://download.csdn.net/download/rocachilles/10974783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值