RoP

RoPS特征提取

RoPSRotational Projection Statistics的简写,即旋转投影统计特征。RoPS特征具有对点云旋转和平移(即姿态变化)的不变性,具备很强的鉴别力以及对噪声和数据分辨率变化等干扰的良好稳健性。该特征目前已成功应用于三维目标识别、三维模型重建以及三维人脸识别等场景,均获得了优异的性能[1-4]。此外,在多个数据集下的测试结果表明,其性能优于多个现有特征。

本节将首先分析RoPS特征描述算法的理论基础[1-3],进而给出在PCL中的应用实例[5]RoPS特征理论基础及实验分析详见参考文献[1-3]PCL实例部分参考了PCL官网说明文档[5]

理论基础

1)生物视觉认知学启示

生物视觉认知学的相关实验研究结果表明,幼儿对三维物体的识别能力与其观察物体的角度数密切相关。若幼儿从多个角度观察物体,则其识别物体的能力大大提高。此外,幼儿把持及观察物体的方式在很大程度上影响其识别物体的能力。研究结果认为,实现三维物体在人脑中的统一表示需要对来自物体多个视点的信息进行融合,而该融合则依赖于物体主轴所确定的参考框架。因此,幼儿如何旋转观察物体对信息融合的效果具有十分关键的作用。

上述认知学实验结果启示我们,在构建特征描述子时,若能将从多个视点获得的物体表面信息进行融合,将有助于提高特征描述子的鉴别力。此外,在生成特征描述子时,亦可依据物体的表面信息构建一个参考坐标框架,从而获得特征描述子对物体旋转和平移的不变性。

受此启发,提出了RoPS特征提取算法。该RoPS算法包含两个部分,即局部参考坐标框架构建和RoPS特征描述,详见下文叙述。

2)局部参考坐标框架构建

给定一个关键点和支撑半径,首先得到离关键点的距离小于的局部表面,该局部表面包含个三角形和个顶点。对于第个三角形,假设其顶点为,和,则三角形中的任意一个点均可表示为

 

(1)

其中,且

 

图1  局部表面点示意图(图片节选自文献[1])

则第个三角形上点的散布矩阵可计算为

 

(2)

那么,局部表面上所有点的总散布矩阵C 可以计算为所有三角形散布矩阵的加权和,即:

 

(3)

其中,是第个三角形的面积与局部表面总面积的比值:

 

(4)

是与关键点到第个三角形中心距离相关的权值:

 

(5)

对该总散布矩阵进行特征值分解,即

 

(6)

其中,是由的降序排列的特征值构成的对角矩阵,包含了对应的特征向量。这三个相互正交的特征向量构成了局部参考坐标框架的基础。然而,这些特征向量的方向是随机的,因此目前得到的局部参考坐标框架不具有良好的可重复提取性。

为消除局部参考坐标框架坐标轴方向的二义性,将每个特征向量指向多数散布向量所指向的方向,因此特征向量与散布向量的内积符号可用于定义特征向量的不模糊方向。具体而言,不模糊特征向量定义为:

 

(7)

其中 为符号函数。类似的,不模糊特征向量可计算为:

 

(8)

给定两个不模糊向量和,向量定义为。由此,得到了关键点的不模糊局部参考坐标框架。在该框架中,原点为关键点,三个坐标轴分别为、和。采用该局部参考坐标框架,从而可获得一个对姿态变化具有不变性的局部特征描述子。

3RoPS特征描述

RoPS 特征描述子的生成过程如图2所示。对于一幅输入点云或其Mesh表示(如图2a所示),首先获得每个关键点上对应于支撑半径的局部表面(如图2b所示),进而计算点上的局部参考坐标框架。局部表面上的三角形顶点可构成点云,将该点云变换到局部参考坐标框架下以获得局部特征描述子对物体姿态变化的旋转和平移不变性。变换后的点云记为。

 

2  RoPS 特征生成过程示意图(图片节选自文献[1])

RoPS 特征描述子的具体提取步骤如下:

1) 将点云绕轴旋转角度,得到旋转后的点云,如图2(c) 所示。进而将点云投影到、和三个坐标平面上以获得投影点云。由于二维投影较好地保留了局部表面在该视角下的几何形状信息,对点云进行投影可实现三维局部表面的简洁高效描述。

2) 对于投影点云,将其二维包围框均匀划分成个单元格(如图2(d) 所示),并统计落入每个单元格内的投影点数量,从而获得一个的分布矩阵(如图2(e) 所示)。将分布矩阵归一化以使得所有单元格中的数值之和为1,从而获得对数据分辨率变化的不变性。

3) 提取分布矩阵的中心矩和香农熵。分布矩阵的阶中心矩定义为:

 

(9)

分布矩阵的香农熵定义为:

 

(10)

将这些中心矩与香农熵组合起来以得到一个统计向量,如图2(f)所示。进一步将、和平面上的三个统计向量组合起来以得到子特征。该子特征代表了点云绕轴的第次旋转所得到的统计量,如图2(g) 所示。

4) 为全面记录局部表面的信息,将点云绕轴旋转一系列角度,从而得到一系列子特征。然后,将点云绕轴旋转一系列角度以得到一系列子特征。最后,将点云绕轴旋转一系列角度以得到一系列子特征。

5) 将所有子特征连接起来便得到最终的RoPS特征描述子,即:

 

(11)

由于RoPS 特征描述子从多个角度记录了局部表面的几何信息,因此其拥有很高的鉴别力。事实上,RoPS 特征提取算法与生物认知学机理存在许多相通之处。首先,RoPS 算法中将关键点支撑域内的邻域点绕三个坐标轴进行旋转并投影到三个坐标平面以得到一系列投影点分布矩阵的过程,类似于人眼从多个视点对三维物体进行二维成像的过程。其次,该算法采用少量统计矩记录每个投影点云分布矩阵信息的过程则类似人脑对图像信息的抽象理解过程。最后,该算法将所有统计矩信息连接得到RoPS 特征描述子的过程类似人脑对多视图像信息的融合理解及记忆过程。

4)推荐算法参数及说明

实验表明,如下参数能取得很好的性能:包围矩形划分单元格数取为5,绕每个坐标轴的旋转次数取为3,每个分布矩阵采用向量描述。

需要注意的是,上述第(2)节中只给出了mesh数据格式(包含点和面元信息)下计算关键点处局部参考坐标框架的方法。若数据为点云表示(没有面元信息),则有两种解决方案。一是首先将点云采用三角化算法转化为mesh数据格式,然后采用上述方法计算局部参考坐标框架和RoPS特征描述子;而是采用其它算法(如SHOT)中的局部参考坐标框架模块计算局部参考坐标框架,而后在该局部参考坐标框架的基础上计算RoPS特征描述。

PCL应用实例详解

下文具体给出采用PCL计算点云RoPS特征的程序实例。

版本要求:PCL1.7.2

输入数据:

points – 输入点云

l indices – 需要计算RoPS特征的点的标号,即关键点的标号

l triangles – 三角面元

1)包含头文件

#include <pcl/features/rops_estimation.h>

#include <pcl/io/pcd_io.h>

2)加载点云cloud

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ> ());

if (pcl::io::loadPCDFile (argv[1], *cloud) == -1)

   return (-1);

3)加载点云中需要计算RoPS特征的关键点的标号indices。若对点云中的每一个点均需要计算RoPS特征,则可以将以下代码注释。

pcl::PointIndicesPtr indices = boost::shared_ptr <pcl::PointIndices> (new pcl::PointIndices ());

std::ifstream indices_file;

indices_file.open (argv[2], std::ifstream::in);

for (std::string line; std::getline (indices_file, line);)

{

  std::istringstream in (line);

  unsigned int index = 0;

  in >> index;

  indices->indices.push_back (index - 1);

}

indices_file.close ();

4加载Mesh的面元信息triangles。若输入的为纯点云(没有面元信息)而非Mesh,则将下述代码替换为三角化(triangulation)程序。

std::vector <pcl::Vertices> triangles;

std::ifstream triangles_file;

triangles_file.open (argv[3], std::ifstream::in);

for (std::string line; std::getline (triangles_file, line);)

{

  pcl::Vertices triangle;

  std::istringstream in (line);

  unsigned int vertex = 0;

  in >> vertex;

  triangle.vertices.push_back (vertex - 1);

  in >> vertex;

  triangle.vertices.push_back (vertex - 1);

  in >> vertex;

  triangle.vertices.push_back (vertex - 1);

  triangles.push_back (triangle);

}

5)设置用于RoPS特征提取的参数:

设置局部邻域大小的支撑半径support_radius,该数值越大,包含的表面信息越多,但同时受遮挡和背景干扰的影响也越大。极端的,若该支撑半径能将一个场景的所有点云均包含进去,则提取到的特征为全局特征。推荐设置为点云分辨率的15倍。

设置获得分布矩阵的投影平面划分单元格数number_of_partition_bins,推荐设置为5

设置绕每个坐标轴的旋转次数number_of_rotations,推荐设置为3

float support_radius = 0.0285f;

unsigned int number_of_partition_bins = 5;

unsigned int number_of_rotations = 3;

6)设置特征提取算法中使用到的邻域点搜索函数,如k-d树。

pcl::search::KdTree<pcl::PointXYZ>::Ptr search_method (new pcl::search::KdTree<pcl::PointXYZ>);

search_method->setInputCloud (cloud);

7)实例化pcl::ROPSEstimation类。

pcl::ROPSEstimation <pcl::PointXYZ, pcl::Histogram <135> > feature_estimator;

feature_estimator.setSearchMethod (search_method);

feature_estimator.setSearchSurface (cloud);

feature_estimator.setInputCloud (cloud);

feature_estimator.setIndices (indices);

feature_estimator.setTriangles (triangles);

feature_estimator.setRadiusSearch (support_radius);

feature_estimator.setNumberOfPartitionBins (number_of_partition_bins);

feature_estimator.setNumberOfRotations (number_of_rotations);

feature_estimator.setSupportRadius (support_radius);

8)计算RoPS特征。

pcl::PointCloud<pcl::Histogram <135> >::Ptr histograms (new pcl::PointCloud <pcl::Histogram <135> > ());

feature_estimator.compute (*histograms);

参考文献

[1] Yulan Guo, Ferdous Sohel, Mohammed Bennamoun, Min Lu, Jianwei Wan. Rotational Projection Statistics for 3D Local Surface Description and Object Recognition. International Journal of Computer Vision. 2013, 105 (1): 63-86.

[2] Yulan Guo, Mohammed Bennamoun, Ferdous Sohel, Min Lu, Jianwei Wan. 3D Object Recognition in Cluttered Scenes with Local Surface Features: A Survey. IEEE Transactions on Pattern Analysis and Machine Intelligence. 2014, 36 (11): 2270-2287.

[3] 郭裕兰. 点云局部特征描述与三维目标重建识别技术研究. 国防科学技术大学研究生院. 博士学位论文. 2015.

[4] Yulan Guo, Ferdous Sohel F, Mohammed Bennamoun, Jianwei Wan, Min Lu. An Accurate and Robust Range Image Registration Algorithm for 3D Object Modeling. IEEE Transactions on Multimedia. 2014, 16 (5): 1377-1390.

[5] PCL官网RoPS特征使用说明. http://pointclouds.org/documentation/tutorials/rops_feature.php

posted @ 2018-11-20 17:20  创造卓越人生  阅读(1378)  评论(0编辑  收藏  举报