registration - icp注册pcl库
问题描述
我正在尝试将两个点云对齐在一起,如下图所示..白色云是我的源云,黑色是我的目标...由于某种原因,对齐方式移动了某个值你可以看到(红色点云)。关于如何使它完美契合的任何建议?我尝试更改一些参数(检查下面的代码),但完全没有区别。
pcl::PointCloud<pcl::PointXYZ>::Ptr sourceCloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr targetCloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr finalCloud(new pcl::PointCloud<pcl::PointXYZ>);
Eigen::Matrix4f icp_Transformation;
//Assign both point clouds as source and target
pcl::io::loadPCDFile<pcl::PointXYZ>("plate_pcd.pcd", *sourceCloud);
pcl::copyPointCloud(*holes_pos_intertial, *targetCloud);
// ICP object.
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> registration;
registration.setInputSource(sourceCloud);
registration.setInputTarget(targetCloud);
registration.setTransformationEpsilon(0.0000000000000000000001);
registration.setEuclideanFitnessEpsilon(0.0000000000000000000001);
// double RMS = EMVS::PCGeometry::computeCloudRMS(targetCloud, sourceCloud, 1.0);
// std::cout << "RMS is :" << RMS << std::endl;
registration.align(*finalCloud);
if (registration.hasConverged())
{
std::cout << "ICP converged." << std::endl
<< "The score is " << registration.getFitnessScore() << std::endl;
std::cout << "Transformation matrix:" << std::endl;
std::cout << registration.getFinalTransformation() << std::endl;
icp_Transformation = registration.getFinalTransformation();
}
else std::cout << "ICP did not converge." << std::endl;
}