IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> PCL点云NARF特征点 -> 正文阅读

[游戏开发]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?=mp?1?i=1mp??px+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,y??pright?
  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?(1?sshadow?)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}) (px?1,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=m1?XXT
    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 pi?RangeImage ,在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?(1?wpi??×max(1?σ10×p?pi??,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×p?pi???21? ?
    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?)(1?cos(α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描述子计算

在这里插入图片描述

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

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:25:36  更:2022-04-01 00:26:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:33:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码