配置迭代最近点PCL

时间:2016-03-29 10:38:23

标签: android-ndk point-cloud-library

我在PCL 1.6(我使用Android)中配置ICP时遇到了问题,我认为这是导致转换矩阵不正确的原因。到目前为止我所尝试的是这个; 使用以下代码对我在ICP中使用的点云进行下采样:

    pcl::VoxelGrid <pcl::PointXYZ> grid; 

    grid.setLeafSize(6, 6, 6); 
    grid.setInputCloud(output); 
    grid.filter(*tgt); 

    grid.setInputCloud(cloud_src); 
    grid.filter(*src); 

尝试使用以下代码对齐两个点云:

pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp; 
icp.setInputCloud(tgt); 
icp.setInputTarget(src); 
pcl::PointCloud<pcl::PointXYZ> Final; 
pcl::PointCloud<pcl::PointXYZ> transformedCloud; 
icp.setMaxCorrespondenceDistance(0.08); 
icp.setMaximumIterations(500); 
//icp.setTransformationEpsilon (0.000000000000000000001); 
icp.setTransformationEpsilon(1e-12); 
icp.setEuclideanFitnessEpsilon(1e-12); 
icp.setRANSACIterations(2000); 
icp.setRANSACOutlierRejectionThreshold(0.6); 

我在ICP的选项中尝试过各种各样的值但没有成功。

我用来创建点云的代码:

        int density = 1; 
        for (int y = 0; y < depthFrame.getHeight(); y = y + density) { 
            for (int x = 0; x < depthFrame.getWidth(); x = x + density) { 
                short z = pDepthRow[y * depthVideoMode.getResolutionX() + x]; 
                if (z > 0 && z < depthStream.getMaxPixelValue()) { 
                        cloud_src->points[counter].x = x; 
                        cloud_src->points[counter].y = y; 
                        cloud_src->points[counter].z = z; 
                } 
            } 
        } 

有人可以帮我配置ICP吗?

1 个答案:

答案 0 :(得分:0)

据我所知,PCL使用仪表作为测量单位。那么,下采样的叶片尺寸是否为6 * 6 * 6!我认为这是巨大的!! 尝试使用较低的值,如果它也不起作用,请使用最简单的配置尝试ICP,如下所示:

 pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp; 
 icp.setInputCloud(tgt); 
 icp.setInputTarget(src); 
 pcl::PointCloud<pcl::PointXYZ> Final; 
 icp.align(Final);

一次,你有这个工作(它应该是),然后开始调整其他参数,它应该不那么难。

希望有所帮助,干杯!