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条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...
随机推荐
- Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825
Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825 1. 播放系统服务器方面的维护2 1.1. 默认情况下,已经在系统的启动目录下增加了俩个启动项目2 1.2. ...
- View的setTag和getTag方法
---恢复内容开始--- public View getView(int position, View convertView, ViewGroup parent) { Msg msg =getIte ...
- Flutter自定义标题栏之处理状态栏高度
App在很多情况下由于各种需求需要自定义标题栏,而在能够构建Android和IOS应用的Flutter中,如果不在Scaffold中使用AppBar会发现默认是沉浸式. 猜想:我们使用自定义标题栏好像 ...
- oracle 用户对象权限
drop user test cascade;create user test identified by test;grant create session to test;grant create ...
- mysql 客户端
MySQL是基于C/S模式的数据库管理系统.MySQL公司开发了众多的客户端软件来帮助用户管理MySQL软件,最著名的就是 MySQL Command Line Client 和 MySQL-Work ...
- RHEL7系统管理之资源管理
1. CGroup(控制群组).slice(切片).scop.service 控制群组(control group)是linux kernel的一项功能, 该功能允许linux对RHEL7中syste ...
- Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)
package test.tttt; import java.io.File; import java.util.ArrayList; import java.util.List; public cl ...
- eclipse导入spring aop xml约束
步骤: 1. 2. 3. 4.取 Location:中最后一个命名:spring-aop-4.2.xsd,放到Key的最后面,Key type:选择 Schema location.点击OK 5.编 ...
- Jquery 保留N位小数,且千位以上用","号隔开
s:数据Value n:保留小数位数 function jinEFmoney(s, n) { if (s == '' || s == null) return '0.00'; n = n > 0 ...
- 更改SQL实例端口
为SQL Server使用非标准的端口 你正在使用标准的端口号1433来连接SQL Server 2005吗?你考虑过设置SQL Server来监听一个不同于1433的端口号吗?我曾经就是这样.在这篇 ...