【三维点云数据处理】PCL三维点云配准 SACIA

  • 算法原理
  • 代码实现
  • 实验结果

算法原理

该算法的总体思路如下:
将需要配准的目标点云P中选择n个采样点。为了保证所选取的采样点尽可能有不同的FPFH特征,采样点的距离一般要选择的恰当,尽可能分散,一般要大于预定的最小距离d;
在模板点云Q中查找与目标点云P中具有相似FPFH特征的对应点,这些点可能是一个或多个,但是从这些点中选取一个作为最终的对应点。
根据以上步骤得到对应点集,计算目标点云和模板点云之间的刚性变换矩阵,同时计算出配准后的误差,以及点云配准后的质量。
重复以上三个步骤,找到误差和最小的变换,然后用于点云的粗配准。
文献通过查找大量不同的对应点集,快速找到良好的转换关系。采用Huber惩罚函数来确定最小误差和。

其中l_e为设定的阈值,e_i为两组点云对应点之间的距离差。

代码实现

//PCL SAC-IA 初始配准算法-->求变换矩阵
#include <pcl/registration/ia_ransac.h>//sac_ia算法
#include <pcl/filters/voxel_grid.h>//体素下采样滤波
Eigen::Matrix4f SAC_IA(pcl::PointCloud<pcl::PointXYZ>::Ptr& target_cloud,pcl::PointCloud<pcl::PointXYZ>::Ptr& source_cloud)
{clock_t start, end, time;start = clock();//---------------------------去除源点云的NAN点------------------------vector<int> indices_src; //保存去除的点的索引pcl::removeNaNFromPointCloud(*source_cloud, *source_cloud, indices_src);//-------------------------源点云下采样滤波-------------------------pcl::VoxelGrid<pcl::PointXYZ> vs;vs.setLeafSize(1.5, 1.5, 1.5);vs.setInputCloud(source_cloud);pointcloud::Ptr source(new pointcloud);vs.filter(*source);cout << "down size *source_cloud from " << source_cloud->size() << " to " << source->size() << endl;//--------------------------去除目标点云的NAN点--------------------vector<int> indices_tgt; //保存去除的点的索引pcl::removeNaNFromPointCloud(*target_cloud, *target_cloud, indices_tgt);//----------------------目标点云下采样滤波-------------------------pcl::VoxelGrid<pcl::PointXYZ> vt;vt.setLeafSize(1.5, 1.5, 1.5);vt.setInputCloud(target_cloud);pointcloud::Ptr target(new pointcloud);vt.filter(*target);cout << "down size *target_cloud from " << target_cloud->size() << " to " << target->size() << endl;//---------------计算源点云和目标点云的FPFH------------------------fpfhFeature::Ptr source_fpfh = compute_fpfh_feature(source);fpfhFeature::Ptr target_fpfh = compute_fpfh_feature(target);//--------------采样一致性SAC_IA初始配准----------------------------pcl::SampleConsensusInitialAlignment<pcl::PointXYZ, pcl::PointXYZ, pcl::FPFHSignature33> sac_ia;sac_ia.setInputSource(source);sac_ia.setSourceFeatures(source_fpfh);sac_ia.setInputTarget(target);sac_ia.setTargetFeatures(target_fpfh);sac_ia.setMinSampleDistance(0.05);//设置样本之间的最小距离sac_ia.setCorrespondenceRandomness(10); //在选择随机特征对应时,设置要使用的邻居的数量;//也就是计算协方差时选择的近邻点个数,该值越大,协防差越精确,但是计算效率越低.(可省)pointcloud::Ptr align(new pointcloud);sac_ia.align(*align);end = clock();Eigen::Matrix4f sac_trans = sac_ia.getFinalTransformation();pcl::transformPointCloud(*source_cloud, *align, sac_ia.getFinalTransformation());cout << "calculate time is: " << float(end - start) / CLOCKS_PER_SEC << "s" << endl;cout << "\nSAC_IA has converged, score is " << sac_ia.getFitnessScore() << endl;cout << "变换矩阵:\n" << sac_ia.getFinalTransformation() << endl;//  将改变的点云输出到文件pcl::io::savePCDFile<pcl::PointXYZ>("./result.pcd", *align);//-------------------可视化------------------------------------visualizeCloud(source_cloud, target_cloud, align);return sac_trans ;
}

实验结果


【三维点云数据处理】PCL三维点云配准 SACIA相关推荐

  1. 3D点云系列———pcl:点云网格化

    参考:https://mp.weixin.qq.com/s/FfHkVY-lmlOSf4jKoZqjEA 什么是网格 网格主要用于计算机图形学中,有三角.四角网格等很多种. 计算机图形学中的网格处理绝 ...

  2. 3D点云系列——pcl:点云平滑及法线估计

    通过重采样实现点云平滑 需要平滑的情况: 用RGB-D激光扫描仪等设备扫描物体,尤其是比较小的物体时,往往会有测量误差.这些误差所造成的不规则数据如果直接拿来曲面重建的话,会使得重建的曲面不光滑或者有 ...

  3. 【matlab点云数据处理】平面点/点云旋转至平行于xoy平面

    最近,遇到一个需要将平面上的三维点云进行旋转,使之与xoy平面平行. 平面上的点分布如下图所示. 经过详细摸索,步骤如下: 求取该平面的法向量n1(可通过PCA方法进行求解,不在这进行赘述). 表达出 ...

  4. 3D点云系列———pcl:点云融合

    题目:将给定3帧(不连续)RGB-D相机拍摄的 RGB + depth 图像,以及他们之间的变换矩阵RGB-D图像转换为点云,并融合出最终的点云输出 pointCloudFusion.cpp #inc ...

  5. 空间实景三维激光点云数据处理服务来了!

    随着三维激光扫描技术的迅速发展,点云数据的应用方向变得更加广泛,呈现出多点开花的态势.但由于点云数据的体量庞大,面向的专业应用方向十分广泛,用于处理点云数据的软件工具种类纷繁多样,因此,内业处理起来非 ...

  6. 三维点云数据处理软件供技术原理说明_三维激光扫描技术在地质灾害调查中的应用...

    三维激光扫描技术是近几年发展起来的一种新兴测绘技术,该技术已广泛应用于工程建设与物体三维测量等测绘及相关领域,具有高效率.高精度的独特优势.本文在介绍三维激光扫描仪的工作原理的基础上,以邢台峡谷群地质 ...

  7. 3D-Lidar点云数据处理

    3D-Lidar点云数据处理 3D-Lidar点云数据处理 原始激光点云数据滤波 点云分割(地面与非地面) 目标聚类 欧式聚类 Add Bounding Boxes 目标跟踪 基础卡尔曼滤波 3D-I ...

  8. 三维点云数据处理软件供技术原理说明_基于三维点云处理技术的工件识别和匹配...

    1. 引言 目前,随着自动化程度的提高,机器人导航.工业零件检测及抓取等众多领域对计算机视觉系统的要求越来越高 [1],基于二维图像的物体识别已经无法满足日常作业的需求.而由于三维扫描技术的发展,结构 ...

  9. 三维点云数据处理软件供技术原理说明_基于三维激光扫描的粮仓储量测量中点云数据处理技术的研究...

    内容简介: 基于三维激光扫描的粮仓储量测量中点云数据处理技术的研究,毕业论文,共74页,30308字. 内容摘要 三维激光扫描仪(又称"激光雷达")能够快速.有效地获取空间点的三维 ...

  10. 三维点云数据处理软件供技术原理说明_海量点云数据处理理论与技术

    海量点云数据处理理论与技术 作者:程效军,贾东峰,程小龙 主编 出版时间:2014年版 内容简介 程效军.贾东峰.程小龙编著的<海量点云数据处理理论与技术>共分8章.第1章绪论,简要介绍海 ...

最新文章

  1. tensorflow GPU python cuda cudnn 匹配
  2. docker 部署redis
  3. TensorFlow------学习篇
  4. factorymenu什么意思_MENU是什么意思
  5. [转载] JAVA面试题大全(part_1)
  6. Spring Cloud Config - RSA简介以及使用RSA加密配置文件
  7. Gitbook中有序列表不能正常显示的解决办法
  8. 需求分析文档模板_我们应该如何进行需求管理「下篇」?
  9. 《Android App开发入门与项目实战》资源下载和内容勘误
  10. 采样方法(二)MCMC相关算法介绍及代码实现
  11. 一个老乞丐一句话震惊中国人...............
  12. 如何复制虚拟机中的数据到真实主机
  13. sina微博之errorcode:20003
  14. HbuilderX 配置eslint规范 问题
  15. Java桌面应用程序设计新贵:SWT 简介
  16. 康耐视VisionPro
  17. openwrt网络唤醒计算机,使用OpenWrt软路由唤醒网络设备
  18. SkeyeVSS安防视频云解决方案助力解决幼儿园安全系统防护问题
  19. “立体巴士”梦想,还是幻想
  20. QA和QC,傻傻分不清?

热门文章

  1. 数据结构-线性链表的实现和应用
  2. Python3爬虫中Selenium的用法详解
  3. 查看 Visio 是否激活以及激活方法
  4. gif怎么裁剪尺寸?一键gif裁剪工具推荐
  5. 苹果11蓝牙配对不成功怎么办_蓝牙配对不成功怎么办,苹果手机蓝牙配对不成...
  6. 直线插补和圆弧插补的区别
  7. Common Digester学习
  8. 数据可视化—第七次人口普查数据分析(基于d3.js)
  9. 抠图软件哪个好?这些软件值得收藏
  10. 更新!2021智能仓储物流之最全AGV企业供应商名录