【译】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

相关文章

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分