PCL利用RANSAC自行拟合分割平面,

利用PCL中分割算法、

pcl::SACSegmentation<:pointxyz> seg;

,不利用法线参数,只根据模型参数得到的分割面片,与想象的面片差距很大,

1 pcl::ModelCoefficients::Ptr coefficients (newpcl::ModelCoefficients ());2 pcl::PointIndices::Ptr inliers (newpcl::PointIndices ());3 //创建分割对象

4 pcl::SACSegmentation<:pointxyz>seg;5 //可选

6 seg.setOptimizeCoefficients (true);7 //必选

8 seg.setModelType (pcl::SACMODEL_PLANE);9 seg.setMethodType (pcl::SAC_RANSAC);10 seg.setMaxIterations (1000);11 seg.setDistanceThreshold (0.05);

后我采用RANSAC拟合的方法,进行面片的分割

1 std::vector inliers; //存储局内点集合的点的索引的向量2

3 //进行RANSAC平面拟合

4 pcl::SampleConsensusModelPlane::Ptr model_p(new pcl::SampleConsensusModelPlane(cloud)); //针对平面模型的对象

5 pcl::RandomSampleConsensusransacP(model_p);6 ransacP.setDistanceThreshold(.1); //与平面距离小于0.1的点作为局内点考虑

7 ransacP.computeModel(); //执行随机参数估计

8 ransacP.getInliers(inliers); //存储估计所得的局内点

9 pcl::copyPointCloud(*cloud, inliers, *cloud_in); //复制估算模型的所有局内点到cloud_in中

10 pcl::io::savePCDFile("./data/seg_RAN/RANSAC_building_1.pcd", *cloud_in);

得到:

之后我想迭代的进行面片拟合后分割出来,在索引的地方遇到了问题

于是想出来一个比较笨的办法:

1 for (int i = 0; i < cloud->points.size(); i++)2 {3 std::vector::iterator iter =find(inliers.begin(), inliers.end(), i);4 if (iter ==inliers.end())5 {6 cloud_out->points.push_back(cloud->points.at(i));7 }8 }

等同于自己写了一个分割的方法。

中间遇到的问题有:

点云的索引、有序点云与无序点云的写入、智能指针未实例化问题、

现在仍未搞明白PCL中的索引的使用方法。例如:PointIndices、 ExtractIndices 等

如有了解的小伙伴希望告知、互帮互助、共同进步!

2019-04-12  19:04:34

http://www.dengb.com/cjjc/1344862.htmlwww.dengb.comtruehttp://www.dengb.com/cjjc/1344862.htmlTechArticlePCL利用RANSAC自行拟合分割平面, 利用PCL中分割算法、 pcl::SACSegmentationpcl::PointXYZ seg; ,不利用法线参数,只根据模型参数得到的分割面片,...

python ransac 拟合平面,PCL利用RANSAC自行拟合分割平面,相关推荐

  1. PCL:RANSAC算法拟合直线的两种实现方式

    pcl利用ransac实现直线拟合的方法 pcl::SampleConsensusModelLine pcl::SACSegmentation pcl::SampleConsensusModelLin ...

  2. 利用 ransac 算法拟合平面

    1.前言 最近项目中遇到一个问题, 老板给了一组数据然后要求获取其中处于同一个平面上的数据点的信息, 很明显就是使用ransac 算法进行处理. 2. ransac算法思想 这里我们使用自己的理解来说 ...

  3. PCL:RANSAC 平面拟合

    文章目录 1 平面方程 2 算法原理 3 代码实现 4 结果展示 5 注意 1 平面方程 平面方程 是指空间中所有处于同一平面的点所对应的方程,其一般式形如 Ax+By+Cz+D=0Ax+By+Cz+ ...

  4. RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读

    本章代码是本人根据一个未曾谋面的好人学习的(要怀抱希望,世界上好人真的是很多的,我要做一个去给别人带去正能量积极态度的人,加油喽),如需转载学习请注明.谢谢 ---------------基于rans ...

  5. PCL使用RANSAC拟合三位平面

    1.使用PCL工具 1 //创建一个模型参数对象,用于记录结果 2 pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficient ...

  6. PCL:RANSAC 圆拟合(二维圆 + 空间圆)

    文章目录 1 二维圆 1.1 SACMODEL_CIRCLE2D 模型 1.2 代码实现 1.3 结果展示 1.4 源码 2 空间圆 2.1 SACMODEL_CIRCLE3D 模型 2.2 代码实现 ...

  7. PCL中RANSAC模型的使用

    RANSAC算法是什么 RANSAC算法于1981年由Fischler和Bolles提出,全程是RANdom SAmple Consensus,一般中文翻译为"随机抽样一致性算法" ...

  8. 多点拟合求平面的RANSAC算法

    对于多点求平面,直接的传统方法是三点求平面,通过求解方程组得到平面的法向量和截距. 但仅适用于点集能够恰好拟合到一个平面的情况,如果点集不能恰好拟合到一个平面,则需要使用更复杂的方法来处理,例如使用最 ...

  9. 两种点云分割(一)— RANSAC分割平面

    点云分割的目的是将点云中属于不同部分的点加以区分.最直接的点云分割方法就是聚类,八种点云聚类方法(一)- DBSCAN_Coding的叶子的博客-CSDN博客这个在前面几节之中已经进行了详细介绍.本节 ...

最新文章

  1. HTML教程-各窗口间相互操作(Frame Target)
  2. PAT甲级1009 Product of Polynomials:[C++题解]多项式乘法、高精度乘法
  3. 探秘AI开发「神器」ModelArts,解读IoT 智能设备,华为云教你玩转 AI开发!
  4. boost::outcome_v2::std_result用法的测试程序
  5. iOS socket 套接字编程
  6. PHP在浏览器中被拒绝请求,php控制请求页面浏览器缓
  7. Composer帮你轻松管理PHP包 autoload
  8. java yml value_Spring Boot:从YAML文件加载@Value
  9. Java可变引用,Java – 对可变对象的易失性引用 – 对对象的字段的更新对所有线程都是可见的...
  10. el-tooltip位置不灵活_要提高步伐移动的灵活性,注意这5点,加以改正,步伐不再沉重...
  11. ArcGIS制作三维地貌场景
  12. bigemap功能介绍
  13. C++华氏温度和摄氏温度的转换
  14. 简单做(ZTD)的十个好习惯总结--转
  15. 3D打印成型技术:看得见摸得着的真实
  16. 计算机培训计划方案结尾怎么写,学习计划怎么写结尾
  17. 生成流水号如 LS0000001
  18. 动态规划算法思想解决找零钱问题
  19. direction 属性
  20. 软件项目 单元测试用例,行政培训考核系统项目单元测试用例.doc

热门文章

  1. lr常用的几个函数(不完整)
  2. 内容分发系统MediaEW:助新闻媒体转投HTML5
  3. 从myspace数据库看分布式系统数据结构变迁(转)
  4. ASP.NET大闲话:ashx文件有啥用
  5. 解决苹果手机点击返回键页面不刷新问题
  6. ACL 2021 | PENS: 个性化新闻标题生成数据集
  7. 【白皮书分享】中国新能源汽车供应链白皮书2020.pdf(附下载链接)
  8. 编写模块时的声明(含MODULE_LICENSE等)
  9. qt 进度条最小_QT:圆形进度条设计
  10. server之后安装ssms失败 安装sql_SQL Server 2019怎么安装?SQL Server 2019详细安装使用教程及SSMS连接...