点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 5731|回复: 2

RANSAC平面分割

[复制链接]
发表于 2013-9-16 21:36:20 | 显示全部楼层 |阅读模式
大家好,我在利用pcl::SACSegmentationFromNormals<pcl::PointXYZ, pcl::Normal> Segmentation;进行平面分割时遇到了这样的问题,见附件的图。代码粘贴如下:
  pcl::PointCloud<pcl::PointXYZ>::Ptr PlaneSegmentationCloud (new pcl::PointCloud<pcl::PointXYZ>);
  pcl::SACSegmentationFromNormals<pcl::PointXYZ, pcl::Normal> Segmentation;
  pcl::ModelCoefficients::Ptr coefficients_plane (new pcl::ModelCoefficients);
  pcl::PointIndices::Ptr inliers_plane (new pcl::PointIndices);
  Segmentation.setOptimizeCoefficients (true);
  Segmentation.setModelType (pcl::SACMODEL_NORMAL_PARALLEL_PLANE);
  Segmentation.setNormalDistanceWeight (0.1);//法向量约束
  Segmentation.setMethodType (pcl::SAC_RANSAC);
  Segmentation.setMaxIterations (200);
  Segmentation.setDistanceThreshold (0.1);
  const Eigen::Vector3f  ax = Eigen::Vector3f(0,0,1);
  Segmentation.setAxis(ax);
  Segmentation.setEpsAngle(0.26);//轴向约束
  pcl::SACSegmentation<pcl::PointXYZ>::SearchPtr searcher (new pcl::search::KdTree<pcl::PointXYZ>) ;
  Segmentation.setSamplesMaxDist(1.0, searcher);//采样点间隔约束
  Segmentation.setInputCloud(cloud->makeShared());
  Segmentation.setInputNormals (cloud_normals->makeShared());
  searcher->setInputCloud(cloud->makeShared());
  Segmentation.segment(*inliers_plane,*coefficients_plane);
求大师指点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复

使用道具 举报

发表于 2013-9-16 21:53:48 | 显示全部楼层
采用这个算法时,它虽然robust,但对数据中的inliners数目的比例是有一定的要求的。我建议你先采用50%以上的内点的数据,再用的代码跑跑。看看能检测出平面吗。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-17 09:38:14 | 显示全部楼层
mypcl 发表于 2013-9-16 21:53
采用这个算法时,它虽然robust,但对数据中的inliners数目的比例是有一定的要求的。我建议你先采用50%以上 ...

您好。谢谢您的建议,我试了一下应该不是内点比例少的问题。我用一份内点数98%的数据进行上述的分割时,仍然出现了上面的错误。单独只加轴向、法向量、采样点间距中的一个约束时是可以得到结果的,同时加三个约束条件就出现了上述的错误。
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-29 14:21 , Processed in 2.231965 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表