PCL利用RANSAC自行拟合分割平面
利用PCL中分割算法、
pcl::SACSegmentation<pcl::PointXYZ> seg;
,不利用法线参数,只根据模型参数得到的分割面片,与想象的面片差距很大,
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
pcl::PointIndices::Ptr inliers (new pcl::PointIndices ());
// 创建分割对象
pcl::SACSegmentation<pcl::PointXYZ> seg;
// 可选
seg.setOptimizeCoefficients (true);
// 必选
seg.setModelType (pcl::SACMODEL_PLANE);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setMaxIterations ();
seg.setDistanceThreshold (0.05);
后我采用RANSAC拟合的方法,进行面片的分割
     std::vector<int> inliers;    //存储局内点集合的点的索引的向量
     //进行RANSAC平面拟合
     pcl::SampleConsensusModelPlane<PointT>::Ptr    model_p(new pcl::SampleConsensusModelPlane<PointT>(cloud));        //针对平面模型的对象
     pcl::RandomSampleConsensus<PointT> ransacP(model_p);
     ransacP.setDistanceThreshold(.);        //与平面距离小于0.1的点作为局内点考虑
     ransacP.computeModel();                    //执行随机参数估计
     ransacP.getInliers(inliers);                //存储估计所得的局内点
     pcl::copyPointCloud<PointT>(*cloud, inliers, *cloud_in);    //复制估算模型的所有局内点到cloud_in中
     pcl::io::savePCDFile("./data/seg_RAN/RANSAC_building_1.pcd", *cloud_in);
得到:

之后我想迭代的进行面片拟合后分割出来,在索引的地方遇到了问题
于是想出来一个比较笨的办法:
for (int i = ; i < cloud->points.size(); i++)
{
std::vector<int>::iterator iter = find(inliers.begin(), inliers.end(), i);
if (iter == inliers.end())
{
cloud_out->points.push_back(cloud->points.at(i));
}
}
等同于自己写了一个分割的方法。
中间遇到的问题有:
点云的索引、有序点云与无序点云的写入、智能指针未实例化问题、
现在仍未搞明白PCL中的索引的使用方法。例如:PointIndices、 ExtractIndices 等
如有了解的小伙伴希望告知、互帮互助、共同进步!
2019-04-12 19:04:34
PCL利用RANSAC自行拟合分割平面的更多相关文章
- 三维点集拟合:平面拟合、RANSAC、ICP算法
		ACM算法分类:http://www.kuqin.com/algorithm/20080229/4071.html 一: 拟合一个平面:使用SVD分解,代码里面去找吧 空间平面方程的一般表达式为: A ... 
- PCL使用RANSAC拟合三位平面
		1.使用PCL工具 //创建一个模型参数对象,用于记录结果 pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); ... 
- HDU2050离散数学折线分割平面
		折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ... 
- HDU 2050 折线分割平面(转)
		折线分割平面 http://acm.hdu.edu.cn/showproblem.php?pid=2050 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微 ... 
- hdu 2050:折线分割平面(水题,递归)
		折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ... 
- 折线分割平面[HDU2050]
		折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ... 
- Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)E粉丝与分割平面
		题目描述 在一个平面上使用一条直线最多可以将一个平面分割成两个平面,而使用两条直线最多可将平面分割成四份,使用三条直线可将平面分割成七份--这是个经典的平面分割问题,但是too simple,作为一个 ... 
- hdoj 2050 折线分割平面
		折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ... 
- HDU_2050——折线分割平面问题,递推
		Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ... 
随机推荐
- 活字格企业 Web 应用生成器新手上路指南
			活字格是一款企业 Web 应用生成器,使用了类 Excel 的设计界面,通过简单的拖拽操作,就能快速制作出一个 Web 信息管理系统.在整个使用过程中无需专业软件知识,没有任何技术门槛,能轻松实现各行 ... 
- Vue 框架-12-Vue 项目的详细开发流程
			Vue 框架-12-Vue 项目的详细开发流程 首先,如果你还不了解 Vue 脚手架怎么搭建? 默认的环境中有哪些文件? 文件大概是什么作用? 那么,您要先查看之前的文章才有助于你理解本篇文章: Vu ... 
- json与list,map,String之间的互转
			package tools; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j ... 
- 【Java】解析xml
			xml: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> ... 
- 5.String StringBuffer StringBuilder
			String,StringBuffer和StringBuilder三者的讲解 对于StringBuffer和StringBuilder是对Stirng的一个优化. 之前已经说过了,String对象一旦 ... 
- 解决国外模板h1、h2、h3...不显示中文文章标题的问题
			如果你经常用国外好看的网页模版时候,会遇到不显示中文文章标题的情况,显示英文标题却正常.遇到这个情况很多人认为应该修改CSS的font-family的字体,其实这是错误的,与CSS无关. 出现这种情况 ... 
- 如何在首次启动 Linux 虚拟机时对其进行自定义
			在前面的教程中,你已学习如何通过 SSH 连接到虚拟机 (VM) 并手动安装 NGINX. 若要以快速一致的方式创建 VM,通常需要某种形式的自动化. 在首次启动 VM 时实现自定义的常见方法是使用 ... 
- ASP.NET MVC下Bundle的使用
			ASP.NET MVC中Bundle是用于打包捆绑资源的(一般是css和js),它是在全局文件Global.asax.cs中注册Bundle,而注册的具体实现默认是在App_Start文件夹的Bund ... 
- 使用uwsgi发布项目
			1.先下载 uwsgi 指定豆瓣源下载 pip install -i https://pypi.douban.com/simple uwsgi 2.查看你的uwsgi基于那个python解释器运行的 ... 
- mysql二进制安装方法
			Linux centos7环境下MySQL安装教程 一.安装依赖包: a.boost_1_59_0下载:wget http://nchc.dl.sourceforge.net/project/boos ... 
