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

相关文章

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

python库fire使用教程

《python库fire使用教程》本文主要介绍了python库fire使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1.简介2. fire安装3. fire使用示例1.简介目前python命令行解析库用过的有:ar

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt