【译】PCL官网教程翻译(22):全局对齐空间分布(GASD)描述符 - Globally Aligned Spatial Distribution (GASD) descriptors

本文主要是介绍【译】PCL官网教程翻译(22):全局对齐空间分布(GASD)描述符 - Globally Aligned Spatial Distribution (GASD) descriptors,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

英文原文查看

全局对齐空间分布(GASD)描述符

本文描述了全局对齐的空间分布(GASD)全局描述符,用于有效的目标识别和姿态估计。
GASD基于表示对象实例的整个点云的参考系的估计,该实例用于将其与正则坐标系对齐。然后,根据对齐后的点云的三维点在空间上的分布情况计算其描述符。这种描述符还可以扩展到整个对齐点云的颜色分布。将匹配点云的全局对齐变换用于目标姿态的计算。更多信息请参见GASD。

理论基础

全局对齐空间分布(或GASD)全局描述方法将表示给定对象局部视图的三维点云作为输入。第一步是估计点云的参考帧,这允许计算将其对齐到正则坐标系的转换,从而使描述符保持不变。对齐后,根据三维点的空间分布计算出点云的形状描述符。为了获得具有较高分辨能力的形状和颜色描述符,还可以考虑沿点云的颜色分布。然后通过匹配部分视图的查询和火车描述符来执行对象识别。通过匹配查询和训练局部视图的对齐变换,计算出每个被识别对象的姿态。
采用主成分分析法(PCA)对参考框架进行估计。给定一组表示对象局部视图的3D点 P i P_i Pi,其中 i ∈ { 1 , … n } i\in\{1,…n\} i{1n},第一步是计算它们的质心 p ‾ \overline p p,这是参考系的原点。然后由 p i p_i pi p ‾ \overline p p计算协方差矩阵 C C C,如下:
C = 1 n ⋅ ∑ i = 0 k ( p i − p ˉ ) ⋅ ( p i − p ˉ ) T C = \frac{1}{n}\cdot\sum_{i=0}^k(p_i-\bar p)\cdot(p_i-\bar p)^T C=n1i=0k(pipˉ)(pipˉ)T
然后,得到 C C C的特征值 λ j \lambda_j λj和对应的特征向量 v j v_j vj j ∈ { 1 , 2 , 3 } j\in \{1,2,3 \} j{1,2,3},使得 C v j = λ j v j C\boldsymbol{v_j}=\lambda_j\boldsymbol{v_j} Cvj=λjvj。考虑到特征值按升序排列,采用与最小特征值相关的特征向量 v 1 v_1 v1作为参照系的z轴。若 v 1 v_1 v1与查看方向之间的角度在 [ − 9 0 ∘ 、 9 0 ∘ ] [-90^{\circ}、90^{\circ}] [9090]范围内,则舍弃 v 1 v_1 v1。这确保 z z z轴始终指向视点方向。参考坐标系的 x x x轴是与最大特征值相关的特征向量 v 3 v_3 v3 y y y轴由 v 2 = v 1 × v 3 \boldsymbol{v_2}=\boldsymbol{v_1}\times\boldsymbol{v_3} v2=v1×v3给出。
从参照系中,可以计算一个转换 [ R ∣ t ] [\boldsymbol{R} | \boldsymbol{t}] [Rt],使它与正则坐标系对齐。然后用 [ R ∣ t ] [\boldsymbol{R} | \boldsymbol{t}] [Rt]转换局部视图中的所有点,定义如下:
[ R t 0 1 ] = [ v 3 T − v 3 T P ‾ v 2 T − v 2 T P ‾ v 1 T − v 1 T P ‾ 0 1 ] . \begin{bmatrix} \boldsymbol{R} & \boldsymbol{t} \\ \boldsymbol{0} & 1 \end{bmatrix}= \begin{bmatrix} \boldsymbol{v_3}^T & -\boldsymbol{v_3}^T\boldsymbol{\overline{P}} \\ \boldsymbol{v_2}^T & -\boldsymbol{v_2}^T\boldsymbol{\overline{P}} \\ \boldsymbol{v_1}^T & -\boldsymbol{v_1}^T\boldsymbol{\overline{P}} \\ \boldsymbol{0} & 1 \end{bmatrix}. [R0t1]=v3Tv2Tv1T0v3TPv2TPv1TP1.
一旦使用参考帧对点云进行对齐,就可以从中计算出一个位姿不变的全局形状描述符。以原点为中心的点云轴向对齐的边界立方体被划分为 m s × m s × m s m_s \times m_s \times m_s ms×ms×ms规则网格。对于每个网格单元,计算带有 l s l_s ls bin的直方图。如果 l s l_s ls=1,则每个直方图bin将在3D规则网格中存储属于对应单元格的点数。如果 l s l_s ls>1,则计算每个单元格与云质心之间归一化距离的直方图。
每个样本对直方图的贡献根据云中的总点数进行标准化。可选地,插值可用于将每个样本的值分布到相邻的单元格中,以避免当样本从一个单元格内移动到另一个单元格时,可能导致直方图突变的边界效应。然后通过连接计算得到的直方图获得描述符。
在这里插入图片描述在这里插入图片描述颜色信息也可以合并到描述符中,以提高其识别能力。描述符的颜色组件是用 m c × m c × m c m_c \times m_c \times m_c mc×mc×mc网格计算的,与用于形状组件的网格类似,但是根据属于它的点的颜色为每个单元生成颜色直方图。点云颜色用HSV空间表示,色调值用 l c l_c lc bin直方图累加。与形状分量计算类似,对点的个数进行归一化。此外,还可以对直方图样本进行插值。将形状和颜色组件连接起来,得到最终的描述符。
查询和火车描述符使用最近邻搜索方法进行匹配。然后,对于每个匹配的对象实例,使用从各自查询和训练部分视图的参考帧获得的对齐转换计算粗姿态。给定分别对齐查询和训练部分视图的转换 [ R q ∣ t q ] [\mathbf{R_{q}} | \mathbf{t_{q}}] [Rqtq] [ R t ∣ t t ] [\mathbf{R_{t}} | \mathbf{t_{t}}] [Rttt],则通过以下方法获得对象的粗姿态 [ R c ∣ t c ] [\mathbf{R_{c}} | \mathbf{t_{c}}] [Rctc]
[ R c t c 0 1 ] = [ R q t q 0 1 ] − 1 [ R t t t 0 1 ] . \begin{bmatrix} \mathbf{R_{c}} & \mathbf{t_{c}} \\ \mathbf{0} & 1 \end{bmatrix}= {\begin{bmatrix} \mathbf{R_{q}} & \mathbf{t_{q}} \\ \mathbf{0} & 1 \end{bmatrix}}^{-1} \begin{bmatrix} \mathbf{R_{t}} & \mathbf{t_{t}} \\ \mathbf{0} & 1 \end{bmatrix}. [Rc0tc1]=[Rq0tq1]1[Rt0tt1].
粗姿态 [ R c ∣ t c ] [\mathbf{R_{c}} | \mathbf{t_{c}}] [Rctc]可以使用迭代最近点(ICP)算法进行细化。

估计GASD特性

全局对齐的空间分布在PCL中作为pcl_features库的一部分实现。
color GASD参数的默认值是: m s m_s ms=6(一半尺寸3), l s l_s ls=1, m c m_c mc=4(一半尺寸2)和 l c l_c lc=12,没有直方图插值(INTERP_NONE)。这将产生一个包含984个浮点值的数组。它们存储在pcl::GASDSignature984点类型中。只有形状GASD参数的默认值是: m s m_s ms=8(一半大小4), l s l_s ls=1和三线性直方图插值(INTERP_TRILINEAR)。这将导致512个浮点值的数组,这些浮点值可以存储在pcl::GASDSignature512 点类型中。也可以使用四线性直方图插值(INTERP_QUADRILINEAR)。
下面的代码片段将估计输入彩色点云的GASD形状+颜色描述符。

#include <pcl/point_types.h>
#include <pcl/features/gasd.h>{pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);... read, pass in or create a point cloud ...// 创建GASD估计类,并将输入数据集传递给它pcl::GASDColorEstimation<pcl::PointXYZRGBA, pcl::GASDSignature984> gasd;gasd.setInputCloud (cloud);// 输出数据集pcl::PointCloud<pcl::GASDSignature984> descriptor;// 计算描述符gasd.compute (descriptor);// 得到对齐变换Eigen::Matrix4f trans = gasd.getTransform (trans);// 解压缩直方图箱for (size_t i = 0; i < size_t( descriptor[0].descriptorSize ()); ++i){descriptor[0].histogram[i];}
}

下面的代码片段将只估计输入点云的GASD形状描述符。

#include <pcl/point_types.h>
#include <pcl/features/gasd.h>{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);... read, pass in or create a point cloud ...//  创建GASD估计类,并将输入数据集传递给它pcl::GASDEstimation<pcl::PointXYZ, pcl::GASDSignature512> gasd;gasd.setInputCloud (cloud);// 输出数据集pcl::PointCloud<pcl::GASDSignature512> descriptor;// 计算描述符gasd.compute (descriptor);// 得到对齐变换Eigen::Matrix4f trans = gasd.getTransform (trans);// 解压缩直方图箱for (size_t i = 0; i < size_t( descriptor[0].descriptorSize ()); ++i){descriptor[0].histogram[i];}
}

注意
@InProceedings{Lima16SIBGRAPI, author = {Joao Paulo Lima and Veronica Teichrieb}, title = {An Efficient Global Point Cloud Descriptor for Object Recognition and Pose Estimation}, booktitle = {Proceedings of the 29th SIBGRAPI - Conference on Graphics, Patterns and Images}, year = {2016}, address = {Sao Jose dos Campos, Brazil}, month = {October} }

这篇关于【译】PCL官网教程翻译(22):全局对齐空间分布(GASD)描述符 - Globally Aligned Spatial Distribution (GASD) descriptors的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126984

相关文章

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

springboot日期格式化全局LocalDateTime详解

《springboot日期格式化全局LocalDateTime详解》文章主要分析了SpringBoot中ObjectMapper对象的序列化和反序列化过程,并具体探讨了日期格式化问题,通过分析Spri... 目录分析ObjectMapper与jsonSerializer结论自定义日期格式(全局)扩展利用配置

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee