PCL点云NARF特征点

NARF: 3D Range Image Features for Object Recognition

NARF 全称 normal aligned radial feature(法线对齐的径向特征) 。是一种3D特征点检测和描述算法。下面将分别详述 NARF 特征点的提取和描述。

NARF特征点提取

NARF说了很多其实就是考虑以下两点:

  • 考虑表面稳定性
  • 考虑物体边缘处
    由以上的两个参考,NARF可以有如下特点:
  • 提取出边缘点,这些点往往更加具有稳定性和可重复性
  • 提取出Normal稳定的,也就是一些平面相对光滑平面和共面的点
  • 所有操作都是基于2D的range image,计算量相比于直接操作点云要小

边缘点提取

步骤:

1. 使用启发式方法寻找不跨越边缘的相邻点的典型3D距离
  1. 对每个深度图中的点p_i,创建窗口(核)边长为s,记住窗口内的领域点 N p i = n 1 , n 2 , ⋯   , n s 2 N_{p_i}={n_1,n_2,\cdots,n_{s^2}} Npi=n1,n2,,ns2
  2. 计算p与他领域点的距离 D p i = d 0 , d 1 , ⋯   , d s 2 , D_{p_i}={d_0,d_1,\cdots,d_{s^2}}, Dpi=d0,d1,,ds2,然后对他们进行升序排列, D p i ′ = d 0 ′ , d 1 ′ , ⋯   , d s 2 ′ D_{p_i}'={d_0',d_1',\cdots,d_{s^2}'} Dpi=d0,d1,,ds2
  3. 假设在 p i p_i pi领域内,有n个点处于同一空间,那么选取 δ = d M ′ \delta=d_M' δ=dM作为跳变距离,M可以如下: M = ( s + 1 2 ) 2 M=(\frac {s+1}{2})^2 M=(2s+1)2,M也可以选取 d i ‘ d_i‘ di的点作为M
2. 使用 (1) 得到的距离信息,计算该点是边缘点的可信度(score)
  • 距离可信度需要从上下左右四个方向一一判断,我们这里只是考虑右边的情况,实际上其他方向也是一样的,没啥可多说的。
  1. 计算平均距离点,这个点的采集数量自己定,文中采用 m p = 3 m_p=3 mp=3
    p r i g h t = 1 m p ∑ i = 1 m p p x + i , y p_{right}= \frac{1}{m_p} \sum_{i=1}^{m_p} p_{x+i,y} pright=mp1i=1mppx+i,y
  2. 计算当前与平均距离点的距离
    d r i g h t = ∣ ∣ p x , y − p r i g h t ∣ ∣ d_{right}=||p_{x,y}-p_{right}|| dright=px,ypright
  3. 计算可信度
    KaTeX parse error: Expected '}', got 'EOF' at end of input: …lta}{d_{right})
    那么 s r i g h t s_{right} sright越大,那么这个点就越可能是边缘点
3. 如果是边缘点,将该点分为上述3类点中的一类
  1. 确定 p x , y p_{x,y} px,y所属的类型,比较 p x . y p_{x.y} px.y p r i g h t p_{right} pright,如果 p x , y p_{x,y} px,y小,表示可能是obstacle border,反之,就可能是 shadow border。当然上下左右的各种点都要考虑
  2. 对所有可能是obstacle border的点,在2d平面右侧 m p m_p mp范围内,找到3d距离最大的点作为对应的shadow border,发然后计算 s s h a d o w s_{shadow} sshadow(这个还是面向右侧的算法, m p m_p mp可以前面定下来的点,可以自己定下来)。最后对上面的 s r i g h t 做 如 下 更 新 s_{right}做如下更新 sright
    s r i g h t ′ = m a x ( 0.9 , 1 − ( 1 − s s h a d o w ) 3 ) × s r i g h t s_{right}'=max(0.9,1-(1-s_{shadow})^3) \times s_{right} sright=max(0.9,1(1sshadow)3)×sright
4. 非极大抑制以获得精确的边缘点位置

现在我们有了可信度 s r i g h t ′ s_{right}' sright,也有了范围s,那么我们就可以NMS来排除一些点了,先删除可信度在0.8以下的点,这个论文阈值定的就是这个,然后降序排序,从上到下,并交iou范围内的一些点删除,一一个都来下,详细请看NMS算法。最后对于每个选取到的点在 ( p x − 1 , y , p x + 1 , y ) (p_{x-1,y},p_{x+1,y}) (px1,y,px+1,y)范围内进行获取极大值,然后认为这个点才是对应的obstacle bordrer


边缘点小结

通过以上内容,我们就可以获取边缘点了,下面需要根据以上的边缘点信息,来提取真正的关键点。

关键点提取

关键点必须考虑以下内容:

  1. 必须考虑边缘和表面结构信息
  2. 必须是能在不同视角下都能被检测到的点
  3. 必须位于稳定的区域,从而可以得到的稳定的法向量
  • 这里需要微分几何的相关知识,这里不做详细解释,但PCA方法比较容易我们大致介绍下:
  1. 设m条n维的数据
    1. 将原始数据按列组成n行m列的矩阵X;
    2. 将X的每一行进行去均值化,
    3. 取出协方差矩阵 C = 1 m X X T C= \frac{1}{m} X X^T C=m1XXT
    4. 求出协方差矩阵的特征值及对应的特征向量
    5. 将特征向量按对应的特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
    6. Y=PX就是降维到k维后的数据
  • 步骤:
  1. 估计法向量:对每一个点 p i ∈ R a n g e I m a g e p_i \in RangeImage piRangeImage ,在2D的 2 δ 2\delta 2δ范围内的点,计算他们的3D位置,然后估计他们的法向量,以及对应的相关幅度。

  2. 对 range image 中的每一个点,计算一个表示其邻域表面变化的分数和这种变化的一个主方向(dominant direction)

    1. 计算主方向v和幅值 λ \lambda λ, 对于borders point,v为边缘方向,对一其他点,v
      为主曲率方向, λ \lambda λ为对应的幅值。(我觉得应该就是上面对应的法向量和对应的特征值)
    2. 对于每个v,都有一个权值 w ∈ [ 0 , 1 ) w \in [0,1) w[0,1), 对borders point, w = 1 w=1 w=1;对others point, w = 1 − ( 1 − λ ) 3 w=1-(1-\lambda)^3 w=1(1λ)3
    3. 指定没一个参数 σ \sigma σ,对于图像中的每个点p,找到其所有的欧式距离在 σ 2 \frac{\sigma}{2} 2σ内且中间不存在边缘(两点位于同一个平面的点)
    4. 对于任意 p i p_i pi属于 N p i N_{p_i} Npi,将 v p i v_{p_i} vpi投影到一个平面P上(P为垂直于p到原点连线的一个平面),得到一个角度{ α p 1 \alpha_{p_1} αp1}( v p 1 v_{p_1} vp1与平面的夹角?) 。对 α p i \alpha_{p_i} αpi做如下调整:
      α ′ = { 2 × ( α − 180 ) f o r     α > 90 2 × ( α − 180 ) f o r     α > 90 } \alpha'=\left\{ \begin{aligned} 2\times (\alpha-180) & for \ \ \ \alpha>90\\ 2\times (\alpha-180) & for \ \ \ \alpha>90 \end{aligned} \right\} α={2×(α180)2×(α180)for   α>90for   α>90}
  3. 现在我们得到两幅图,长宽等于原来的图片,值分别是 w 和 α w和\alpha wα

  4. 计算置信度
    I 1 ( p ) = min ⁡ i ( 1 − w p i × m a x ( 1 − 10 × ∣ ∣ p − p i ∣ ∣ σ , 0 ) ) I_1(p)=\min \limits_{i} (1-w_{p_i} \times max(1- \frac {10\times ||p-p_i||}{\sigma},0)) I1(p)=imin(1wpi×max(1σ10×ppi,0))
    f ( p i ) = w p i × ( 1 − ∣ 2 × ∣ ∣ p − p i ∣ ∣ σ − 1 2 ∣ f(p_i)=\sqrt{w_{p_i} \times (1-|\frac{2 \times ||p-p_i||}{\sigma}-\frac{1}{2}|} f(pi)=wpi×(1σ2×ppi21
    I 2 ( p ) = max ⁡ i , j ( f ( n i ) f ( n j ) ( 1 − ∣ c o s ( α n i ′ − α n j ′ ∣ ) ) I_2(p)=\max \limits_{i,j} (f(n_i) f(n_j)(1-|cos(\alpha'_{n_i}-\alpha'_{n_j}|)) I2(p)=i,jmax(f(ni)f(nj)(1cos(αniαnj))
    I ( p ) = I 1 ( p ) I 2 ( p ) I(p)=I_1(p) I_2(p) I(p)=I1(p)I2(p)
    其中第三个公式中的i和j,只是p点领域内的点两两匹配。

NARF描述子计算

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值