PCL 点云配准衡量指标
0. 简介
PCL作为目前最为强大的点云库,内部存在有大量集成好的算法。而对于数据量大、非同源、含大量噪声且部分重叠的激光点云与影像重建点云,其稀疏程度、噪声程度等不同,非重叠区域的面积很大。真实场景的点云尤其是影像重建点云噪声较多,提取的法向量误差也很大,有的时候NDT和ICP并不能形成良好的匹配,这个时候我们该怎么样评估通过IPC或NDT算出的变换矩阵来估算出算法的精度呢?这个时候就需要通过均方根误差以及重合度来综合评判结果了。
1. 从Cloudcompare对点云配准进行了解
Cloudcompare是一个开源的免费点云处理软件,可以实现常用的点云处理功能,使用也是简单方便。官网网址为http://www.cloudcompare.org/,由于其良好的可视化,这里我们来从这个软件开始,向读者来介绍配准的一些基础概念。
首先,我们打开安装好的cloudcompare,打开要配准的点云文件。这里使用斯坦福的兔子点云。
选中45°点云,改变颜色(edit–>colors–>set unique,或者快捷键alt+c)
选中两个点云,点击配准按钮,参考点云(reference)选择0°,重叠度改成70%(不同数据视情况而定,这里目测70%重叠差不多),精度(RMS difference)没改变。
此时,我们就可以快捷的拿到我们想要的配准结果了。在上面我们注意到在Cloudcompare中提到了两个重要的概念,分别是重叠度和精度(均方根误差)。而这也是我们下面文章中主要介绍的内容。
2. 均方根误差(RMSE)
下面这部分的内容是计算方根误差的,其中内部主要是通过kd-tree完成了dist的搜索,从而计算出最近邻匹配点对欧氏距离的平方,并最终拿到我们的RMSE,从而评判出点云的重合性。
float caculateRMSE(pcl::PCLPointCloud2::Ptr& cloud_source, pcl::PCLPointCloud2::Ptr& cloud_target)
{pcl::PointCloud<pcl::PointXYZ>::Ptr xyz_source(new pcl::PointCloud<pcl::PointXYZ>());fromPCLPointCloud2(*cloud_source, *xyz_source);pcl::PointCloud<pcl::PointXYZ>::Ptr xyz_target(new pcl::PointCloud<pcl::PointXYZ>());fromPCLPointCloud2(*cloud_target, *xyz_target);float rmse = 0.0f;pcl::KdTreeFLANN<pcl::PointXYZ>::Ptr tree(new pcl::KdTreeFLANN<pcl::PointXYZ>());tree->setInputCloud(xyz_target);for (auto point_i : *xyz_source){// 去除无效的点if (!pcl_isfinite(point_i.x) || !pcl_isfinite(point_i.y) || !pcl_isfinite(point_i.z))continue; pcl::Indices nn_indices(1);std::vector<float> nn_distances(1);if (!tree->nearestKSearch(point_i, 1, nn_indices, nn_distances)) // K近邻搜索获取匹配点对continue;/*dist的计算方法之一size_t point_nn_i = nn_indices.front();float dist = squaredEuclideanDistance(point_i, xyz_target->points[point_nn_i]);*/float dist = nn_distances[0]; // 获取最近邻对应点之间欧氏距离的平方rmse += dist; // 计算平方距离之和}rmse = std::sqrt(rmse / static_cast<float> (xyz_source->points.size())); // 计算均方根误差return rmse;
}// ---------------------------计算均方根误差------------------------------
//auto Rmse= caculateRMSE(cloud_source, cloud_target);
//cout << "配准误差为:" << Rmse << endl;
3. 重合率计算
下面的代码提供了两种方法计算匹配的区域的点云的重合率,分别使用CorrespondenceEstimation以及kd-tree来实现了点云重合率的计算,当然现在的PCL算法已经自带了均方误差以及变换矩阵和当前变换矩阵的差性等情况,但是这也不妨碍我们通过RMSE以及重合率来单帧分析问题所在
…详情请参照古月居
PCL 点云配准衡量指标相关推荐
- 一分钟详解PCL中点云配准技术
原文首发于微信公众号「3D视觉工坊」: 一分钟详解PCL中点云配准技术 本文是对前两篇文章:
- 用pcl读ply文件_一分钟详解PCL中点云配准技术
原文首发于微信公众号「3D视觉工坊」:一分钟详解PCL中点云配准技术 本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更 ...
- PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视 ...
- PCL点云配准(ICP)
/*********************************** 点云配准 *****************************************/ #include <pc ...
- PCL点云配准(2)
(1)正态分布变换进行配准(normal Distributions Transform) 介绍关于如何使用正态分布算法来确定两个大型点云之间的刚体变换,正态分布变换算法是一个配准算法,它应用于三维点 ...
- PCL点云配准(3)
(1)关于点云的配准 1.首先给定源点云与目标点云. 2.提取特征确定对应点 3.估计匹配点对应的变换矩阵 4.应用变换矩阵到源点云到目标点云的变换 配准的流程图 通过特征点的匹配步骤 (1)计算源点 ...
- python 点云配准_点云配准(Registration)算法——以PCL为例
本文为PCL官方教程的Registration模块的中文简介版. An Overview of Pairwise Registration 点云配准包括以下步骤: from a set of poin ...
- 第七周PCL学习--点云配准(七)
目录 引言 一.点云配准 1.1.定义 1.2.含义 1.3.配准过程 1.4.算法原理 1.5.实验 二.总结 三.参考 引言 随着计算机辅助设计技术的发展,通过实物模型产生数字模型的逆向工程技术, ...
- 点云配准5:4pcs算法在pcl上的实现
目录 配准结果 点云配准系列 准备 完整项目文件 参数设定及说明 数据 参数 代码 结果 Bunny hippo 算法缺点 参考及感谢 完 配准结果 偶尔效果比较好,白色是目标点云0°的Bunny,紫 ...
最新文章
- 锁定计算机的事件日志,关闭并重新启动计算机后意外地在系统事件日志中记录了事件 ID 6008...
- alibaba sentinel限流组件 源码分析
- optee的启动过程
- 嵌入式Linux基础学习笔记-文件IO编程-I/O多路复用
- 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
- 最难学的十大编程语言,Java排第二,它竟是第一名!
- 一个好习惯可以让自己享受一辈子
- linux 每日学一点《Linux挂载NTFS分区方法》
- 社区智慧+机器智能=奇虎经验的知识机器人
- Atitit 机器可读护照的Machine-readable passport 规范与解析格式 目录 1. 术语	1 1.1. machine-readable zone(MRZ)	1 1.2.
- 我爸的电脑中了勒索病毒
- 涉密计算机 桌面 及 屏保,符合国家保密要求的涉密计算机屏幕保护程序启动时间要求是不超10分钟 - 作业在线问答...
- 2022年按摩椅行业现状分析
- 新浪(1998年12月—2000年3月)
- nginx 开启gzip压缩
- 计算机数字媒体计数专业好就业吗,2019数字媒体技术专业就业形势和就业方向分析...
- OrientedRCNN论文解读
- 数据结构 - 学习笔记 - 红黑树
- 5G 学习笔记 NG-RAN架构
- Java获取指定日期的本月,上月,下月的最后一天