#pragma warning(disable:4996) #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkInteractionStyle); #define BOOST_TYPEOF_EMULATION #include //标准输入/输出 #include <pcl/io/pcd_io.h> //pcd文件输入/输出 #include <pcl/point_types.h> //各种点类型 #include <pcl/registration/icp.h> //ICP(iterative closest point)配准 #include <pcl/visualization/pcl_visualizer.h> //PCL可视化工具

int main(int argc, char** argv) { //创建点云指针 pcl::PointCloudpcl::PointXYZ::Ptr cloud_in(new pcl::PointCloudpcl::PointXYZ); //创建输入点云(指针) pcl::PointCloudpcl::PointXYZ::Ptr cloud_out(new pcl::PointCloudpcl::PointXYZ); //创建输出/目标点云(指针)

//生成并填充点云cloud_in
pcl::io::loadPCDFile<pcl::PointXYZ>("D:\\点云文件\\雕像1.pcd", *cloud_in\);
pcl::io::loadPCDFile<pcl::PointXYZ>("D:\\点云文件\\雕像2.pcd", *cloud_out\);

pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp; //创建ICP对象,用于ICP配准
icp.setInputCloud\(cloud_in\); //设置输入点云
icp.setInputTarget\(cloud_out\); //设置目标点云\(输入点云进行仿射变换,得到目标点云\)
pcl::PointCloud<pcl::PointXYZ> Final; //存储结果
//进行配准,结果存储在Final中
icp.align\(Final\);
//输出ICP配准的信息\(是否收敛,拟合度\)
std::cout << "has converged:" << icp.hasConverged() << " score: " <<
	icp.getFitnessScore() << std::endl;
//输出最终的变换矩阵\(4x4\)
std::cout << icp.getFinalTransformation() << std::endl;

//可视化配准结果
pcl::visualization::PCLVisualizer viewer("ICP Registration");
//设置背景颜色
viewer.setBackgroundColor\(0.0, 0.0, 0.0\);
//添加原始点云\(红色\)
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color_in\(cloud_in, 255, 0, 0\);
viewer.addPointCloud<pcl::PointXYZ>\(cloud_in, color_in, "cloud_in"\);
viewer.setPointCloudRenderingProperties\(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud_in"\);
//添加目标点云\(绿色\)
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color_out\(cloud_out, 0, 255, 0\);
viewer.addPointCloud<pcl::PointXYZ>\(cloud_out, color_out, "cloud_out"\);
viewer.setPointCloudRenderingProperties\(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud_out"\);
//添加配准结果点云\(蓝色\)
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color_final\(&Final, 0, 0, 255\);
viewer.addPointCloud<pcl::PointXYZ>\(&Final, color_final, "cloud_final"\);
viewer.setPointCloudRenderingProperties\(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud_final"\);
//设置坐标系
viewer.addCoordinateSystem\(1.0\);
viewer.initCameraParameters\(\);
//显示点云
while \(!viewer.wasStopped\(\)\)
{
	viewer.spinOnce\(100\);
}

return 0;

}

PCL点云配准:ICP算法可视化实现

原文地址: https://www.cveoy.top/t/topic/ptDY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录