三维计算机视觉 局部特征 Spin Image

时间:2024-04-12 19:38:36

今天在看熊风光同学博士论文《三维点云配准技术研究》,觉得作者总结的对我这个入门小白很受用,于是就接着逐个学习三维计算机视觉的一些局部特征。

看到了大佬的博客 https://blog.****.net/app_12062011/article/details/78168953 很详细,我也顺便搜到了参考文献中Andrew Edie Johnson的1997年的那篇博士原文《Spin-Images: A Representation for 3-D Surface Matching》。

现记录一些我觉得上面博客没有点出的,对我困扰很大的问题。

1、网格分辨率

三维计算机视觉 局部特征 Spin Image

       作者专门给出了网格分辨率的定义,应该是网格中所有边缘长度的中位数。对分辨率的定义与图像处理中使用的分辨率的定义具有相反的含义。 与图像处理一样,分辨率随着采样的添加而增加,采样减少了而减少。 但是,网格分辨率的度量----边长,随着采样的增加而减少,随着采样的减少而增加。

2、生成 Spin Image 的步骤

三维计算机视觉 局部特征 Spin Image

大写P------三维网格某顶点p的切面

n-------p点单位法向量

​x-------p附近的三维网格上的另一个顶点

α------x点在P上投影与p的距离

β------x点与P点的垂直距离

其中p和n定义为一个定向点(Oriented point)。

这的意思应该是说将点p和其法向量n作为基,然后这就变成了一个两个维度的坐标系。空间中的任一点x可以用它到n的距离a和到平面P的距离b来确定(才怪!因为明显还是缺少了一个角度),原文中也有提到说是一个缺少极坐标的圆柱坐标系。因为会导致在空间上不在一起的顶点变换之后有相同的(α,β)坐标。

1.定义一个​Oriented point

2.以Oriented point为轴生成一个圆柱坐标系

​3.定义Spin image的参数,Spin image是一个具有一定大小(行数列数)、分辨率(二维网格大小)的二维图像(或者说网格)。Spin image的三个关键参数将在后面讨论。

4.将圆柱体内的三维坐标​投影到二维Spin image,这一过程可以理解为一个Spin image绕着法向量n旋转360度,Spin image扫到的三维空间的点会落到Spin image的网格中。就是如下的公式:

三维计算机视觉 局部特征 Spin Image

从三维空间投影到spin-image坐标

三维计算机视觉 局部特征 Spin Image

5.根据spin image中的每个网格中落入的点不同,计算每个网格的强度I,显示spin image时以每个网格(也就是像素)I不同为依据。最直接的方法是直接计算每个网格中落入的点,然而为了降低对位置的敏感度降低噪音影响增加稳定性,Johnson论文中用双线性插值的方法将一个点分布到4个像素中。原理如下图:

三维计算机视觉 局部特征 Spin Image双线性插值

上图中,默认的网格(像素)边长是1(真实边长的选择会在稍后讨论),当一个点落入网格(i,j)中时会被双线性插值分散到(i,j)、(i,j+1)、(i+1,j)、(i+1,j+1)四个网格中。

我觉得这里是说落在了Bin中更合适。

三维计算机视觉 局部特征 Spin Image

这样就获得了spin image,如下图所示。

三维计算机视觉 局部特征 Spin Image

三维计算机视觉 局部特征 Spin Image

总结一下:某一点p的Spin Image就是用点p和其法向量n为基,把所有点云做的一个3D->2D映射。点云中任一点x,映射为到n的距离和到P平面距离一个二维坐标。很明显还可能存在其他不同于x的点,但是和x的二维坐标相同。可以想象成,拿一个中国象棋棋盘,找一个帅的位置与点p重合,摆棋子的一排与n重合。棋格的距离就是bin size,棋盘的长宽相等,就是image width,而文中所说的support distance = bin size * image width

然后你就开始转动棋盘,记录点云落在每个棋盘的个数(就是强度),转过的角度就是文中所说的support angle。

 

初学小白,要是有理解不对的地方望大神指出!

还是要看一下PCL中实现的代码,验证自己的理解