我正在经历来自SAC平面分割的非常奇怪的输出 以前为我工作。
我有一个几乎完全是平面的地形点云,想要 平面系数。 尽管非常规则,所得的系数还是非常随机的 点云的结构。更令人费解的是,我接下来要做的是 另一个点云上的相同分割(激光扫描),更多 稀疏,效果很好,反复。
在图像上,您可以看到有问题的PC(暗红色,以矩形裁剪) ,其检测到的像素(亮红色条)和稀疏的激光雷达扫描 灰色的点云。每次灰点云的平面系数都能很好地检测到,几乎是水平的。
我看过这个问题: SACSegmentation detecting odd plane model
但是没有一个建设性的答案,并且正如您所看到的,就我而言,稀疏的激光雷达点云表现得很好,尽管它的起源也很远(点云在同一参考系中)。 我尝试将这个问题发送到PCL用户的邮件列表中,但是他们目前在注册时遇到了一些麻烦。
打印到控制台的平面系数为: 地图平面:0.129365、0.988998,-0.0717494,-46.6275, 扫描平面:-0.00558903,-0.131864、0.991252,-469.395,
生成此代码的代码如下,不进行服务转换:
pcl::SACSegmentationFromNormals<pcl::PointNormal,pcl::PointNormal> seg;
seg.setModelType (pcl::SACMODEL_NORMAL_PLANE);
seg.setNormalDistanceWeight (0.1);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setMaxIterations (200);
seg.setDistanceThreshold (max_dist_plane); // equal to 0.2
seg.setOptimizeCoefficients (true);
seg.setInputCloud(map_norm_near);
seg.setInputNormals(map_norm_near);
seg.segment(*inliers_plane, *coeff_plane_map);
std::cout « "Map plane: " « ap « "," « bp « "," « cp « "," « dp « "," «
std::endl;
seg.setInputCloud(scan_norm_near);
seg.setInputNormals(scan_norm_near);
seg.segment(*inliers_plane, *coeff_plane_scan);
std::cout « "Scan plane: " « ap2 « "," « bp2 « "," « cp2 « "," « dp2 « ","
« std::endl;
我正在循环中在ROS节点内运行代码。细分对象 在每次迭代时都会重新初始化。我在Ubuntu 16.04下使用PCL 1.7.2。 我试过从法线和常规分割中使用SAC分割, 设置优化系数的开和关,设置轴和epsangle,无 明显的差异。激光雷达扫描很好地分割了,地图平面 是疯子。
有人可以解释这是什么原因吗?