我已经使用PCL从已知正确的角度估计点云中的法线
float radius 0.1;
pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZRGB>);
tree->setInputCloud(in);
pcl::NormalEstimation<pcl::PointXYZRGB, pcl::Normal> n;
n.setInputCloud (in);
n.setSearchMethod (tree);
n.setRadiusSearch (radius);
n.setViewPoint(vx, vy, vz); // Known correct viewpoint
n.compute (*out);
在大多数情况下,此方法效果很好,但是当存在尖锐的拐角(例如,箱形的东西)时,拐角及其附近的法线与曲面的角度会错误。参见下面,在这里可以容易地看到蓝色的错误角度的法线(Meshlab的快照),下面可以看到没有法线的点云。
根据本教程http://www.pointclouds.org/documentation/tutorials/normal_estimation.php,搜索区域非常重要,可以降低搜索区域以获取越来越好的详细信息。但是,如果降低它并降低它,不会有太大的变化,最终我降到了云的密度以下,那么所有法线都指向错误的方向。后者是可以理解的,因为用于估计的平面变得很小。
如何减少拐角处的错误角度法线,并希望它们在实际弯曲的表面上保持角度?
这些弯曲的法线在分割时会产生问题,即桌子的顶部和侧面没有连接,并且间隙很大。
最终,我想解决网格划分中的间隙,我相信这是错误的角上法线角度不正确。
更新:通过将点云的密度加倍,我设法使法线变得合理。即使搜索半径加倍,密度也很低,无法找到平面。 < / p>