我在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吗?
答案 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);
一次,你有这个工作(它应该是),然后开始调整其他参数,它应该不那么难。
希望有所帮助,干杯!