当前位置: 首页 > news >正文

PCL库简单的icp配准

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h>int main(int argc, char** argv)
{// 确保提供了两个PCD文件作为输入if (argc != 3) {PCL_ERROR("请提供两个PCD文件作为输入。\n");return (-1);}// 读取源点云和目标点云pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_out(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_reg(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud_in) == -1) {PCL_ERROR("无法读取文件 %s\n", argv[1]);return (-1);}if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[2], *cloud_out) == -1) {PCL_ERROR("无法读取文件 %s\n", argv[2]);return (-1);}// 创建ICP配准对象pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;icp.setInputSource(cloud_in);icp.setInputTarget(cloud_out);// 进行配准icp.align(*cloud_reg);if (icp.hasConverged()){std::cout << "配准成功!" << std::endl;std::cout << "最终变换矩阵:" << icp.getFinalTransformation() << std::endl;std::cout << "配准后的点云:" << std::endl;for (size_t i = 0; i < cloud_reg->size(); ++i)std::cout << "    " << cloud_reg->points[i].x<< " " << cloud_reg->points[i].y<< " " << cloud_reg->points[i].z << std::endl;// 保存配准后的点云为PCD文件pcl::io::savePCDFile("aligned_cloud.pcd", *cloud_reg);std::cout << "已保存配准后的点云为 'aligned_cloud.pcd'" << std::endl;}else{std::cout << "配准失败!" << std::endl;}return 0;
}

测试了一下PCL库的icp效果,对于40度左右的旋转的配准效果还是不好。

joey@joey-Legion-Y7000P-IRX9:~/code/pclregistration/build$ ./simple_icp '/home/joey/code/pclregistration/data/1564024971.235044000.pcd' '/home/joey/code/pclregistration/data/1564025000.934826000.pcd'

在命令行调用生成的可执行文件。

可以看到初始点云(紫色),目标点云(白色),配准结果(蓝色)。

可以看到在角度比较大的时候,icp的效果不是很好。


http://www.mrgr.cn/news/40022.html

相关文章:

  • 监控告警功能详细介绍及操作演示:运维团队的智能保障
  • Chrome浏览器的C++内存管理技术揭秘
  • 前端vue相关常见面试题,包含MVVM、双向绑定原理、性能优化、vue2和vue3性能对比等
  • c++-类和对象-设计立方体类
  • 【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
  • 蓝鹏螺纹钢测径仪的三大测量要点 纵肋 横肋 基圆
  • 【C++ STL】深入理解string类的底层实现
  • Temporal Dynamic Quantization for Diffusion Models阅读
  • 计算机知识科普问答--24(116-120)
  • Java应用程序的服务器有哪些?
  • free vibration
  • ESXI识别服务器磁盘,虚拟机显示无效
  • 点餐小程序实战教程14点餐功能
  • leetcode每日一题day20(24.9.30)——座位预约管理系统
  • 全民AI-智能生活
  • 心觉:自我暗示语“正确姿势”的科学解释
  • 在VMware虚拟机上部署polardb
  • IO层次结构(用户层软件、设备独立性软件、设备驱动程序、中断驱动程序)
  • 【RockyLinux · 9.4】安装新版 QQ for Linux(不再是 QQ2008 那种老款了!)
  • [Day 81] 區塊鏈與人工智能的聯動應用:理論、技術與實踐