参考博客:https://www.cnblogs.com/ironstark/p/5051533.html

关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别、寻物联系在一起。NARF 算法可以分成两个部分,第一个部分是关键点提取,第二个部分是关键点信息描述,本文仅涉及第一个部分。

  在文章开始之前,有非常重要的一点要说明,点云中任意一点,都有一定概率作为关键点。关键点也是来自原始点云中的一个元素。和图像的边缘提取或者关键点检测算法追求n次插值,最终求的亚像素坐标不同,点云的关键点只在乎找到那个点。

1. 边缘提取

  首先声明本文所有思想算法公式均来自:Point Feature Extraction on 3D Range Scans Taking into Account Object Boundaries 

  在正式开始关键点提取之前,有必要先进行边缘提取。原因是相对于其他点,边缘上的点更有可能是关键点。和图像的边缘不同(灰度明显变化),点云的边缘有更明确的物理意义。对点云而言,场景的边缘代表前景物体和背景物体的分界线。所以,点云的边缘又分为三种:前景边缘,背景边缘,阴影边缘。

  rangeImage 是一个天然适合用于边缘提取的框架。在这里需要做一些假设:每个rangeImage像素中假设都只有一个点(显然在生成rangeImage的时候点云是被压缩了的,压缩了多少和rangeImage的分辨率有关,分辨率不能太小,否则rangeImage上会有"洞”,分辨率太大则丢失很多信息)。

  三维点云的边缘有个很重要的特征,就是点a 和点b 如果在 rangImage 上是相邻的,然而在三维距离上却很远,那么多半这里就有边缘。由于三维点云的规模和稀疏性,“很远”这个概念很难描述清楚。到底多远算远?这里引入一个横向的比较是合适的。这种比较方法可以自适应点云的稀疏性。所谓的横向比较就是和 某点周围的点相比较。 这个周围有多大?不管多大,反正就是在某点pi的rangeImage 上取一个方窗。假设像素边长为s. 那么一共就取了s^2个点。接下来分三种情况来讨论所谓的边缘:

  1.这个点在某个平面上,边长为 s 的方窗没有涉及到边缘

  2.这个点恰好在某条边缘上,边长 s 的方窗一半在边缘左边,一半在右边

  3.这个点恰好处于某个角点上,边长 s 的方窗可能只有 1/4 与 pi 处于同一个平面

  如果将 pi 与不同点距离进行排序,得到一系列的距离,d0 表示与 pi 距离最近的点,显然是 pi 自己。 ds^2 是与pi 最远的点,这就有可能是跨越边缘的点了。 选择一个dm,作为与m同平面,但距离最远的点。也就是说,如果d0~ds^2是一个连续递增的数列,那么dm可以取平均值。如果这个数列存在某个阶跃跳动(可能会形成类似阶跃信号)那么则发生阶跃的地方应该是有边缘存在,不妨取阶跃点为dm(距离较小的按个阶跃点)原文并未如此表述此段落,原文取s=5, m=9 作为m点的一个合理估计。

  对任意一个点,进行打分,来判断该点作为边缘点有多大可能性。首先,边缘可能会在某点的:上,下,左,右四个方向。

  所以只要把pi 和 pi 右边的点求相对距离。 并把这个相对距离和dm进行比较,就可以判断边缘是不是在该点右边。如果距离远大于dm,显然该点右边的邻点就和pi不是同一个平面了。

  

  为了增加对噪声的适应能力,取右边的点为右边几个点的平均数。接下来依据此信息对该点进行打分。

  其中deta 就是dm. dright = || pi pright ||.

  最后再取大于0.8的Sright,并进行非极大值抑制。就可以得到物体的边缘了

  

2. 关键点提取

   在提取关键点时,边缘应该作为一个重要的参考依据。但一定不是唯一的依据。对于某个物体来说关键点应该是表达了某些特征的点,而不仅仅是边缘点。所以在设计关键点提取算法时,需要考虑到以下一些因素:

  i) it must take information about borders and the surface structure into account;

  边缘和曲面结构都要考虑进去

ii) it must select positions that can be reliably detected even if the object is observed from another perspective;

       关键点要能重复

  iii) the points must be on positions that provide stable areas for normal estimation or the descriptor calculation in general.

   关键点最好落在比较稳定的区域,方便提取法线 

  对于点云构成的曲面而言,某处的曲率无疑是一个非常重要的结构描述因素。某点的曲率越大,则该点处曲面变化越剧烈。在2D rangeImage 上,去 pi 点及其周边与之距离小于2deta的点,进行PCA主成分分析。可以得到一个 主方向v,以及曲率值 lamda. 注意, v 必然是一个三维向量。

  那么对于边缘点,可以取其 权重 w 为1 , v 为边缘方向。

  对于其他点,取权重 w 为 1-(1-lamda)^3 , 方向为 v 在平面 p上的投影。 平面 p 垂直于 pi 与原点连线。

  到此位置,每个点都有了两个量,一个权重,一个方向。

  将权重与方向带入下列式子 I 就是某点 为特征点的可能性。

  最后进行极大值抑制,就可以得到一些特征点了。

转载于:https://www.cnblogs.com/2Bthebest1/p/10918506.html

NARF 特征点提取相关推荐

  1. 高翔Slambook第七讲代码解读(特征点提取)

    前言:小白创建了一个微信公众号,主要面向学习视觉的小伙伴,分享一些学习过程中的感受和一些技术文章.公众号里文章也会更新在CSDN中,不过由于工作量较大,会出现一段时间的延时,感兴趣的小伙伴可以关注公众 ...

  2. ZippyPoint: 一种基于学习的特征点提取+二进制描述子,速度提升5倍+,为移动平台提供一种ORB的替代方案...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Realcat 来源丨 计算机视觉SLAM 作者来自ETHZ Computer Vision实验 ...

  3. 关于图像特征的提取【转】

    特征提取时计算机视觉和图像处理中的一个概念.它指的是计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征提取的结果是把图像上的点分为不同的子集,这些自己往往属于孤立的点,连续的曲线或者连续的 ...

  4. tensorflow 1.0 学习:参数和特征的提取

    tensorflow 1.0 学习:参数和特征的提取 在tf中,参与训练的参数可用 tf.trainable_variables()提取出来,如: #取出所有参与训练的参数 params=tf.tra ...

  5. opencv上gpu版surf特征点与orb特征点提取及匹配实例

    opencv上gpu版surf特征点与orb特征点提取及匹配实例 标签: gpu版surfgpu orbsurf和orbgpu surf及orbsurf orb gpu 2016-09-25 23:4 ...

  6. python提取个十百千位数字_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    之前写过一篇关于实现人脸识别的文章, Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序​zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的, ...

  7. 学习LOAM笔记——特征点提取与匹配

    学习LOAM笔记--特征点提取与匹配 学习LOAM笔记--特征点提取与匹配 1. 特征点提取 1.1 对激光点按线束分类 1.2 计算激光点曲率 1.3 根据曲率提取特征点 2. 特征点匹配 2.1 ...

  8. 特征点提取之Harris角点提取法

    1. 特征点提取的意义 2.角点 3. Harris角点检测的基本原理 4.Harris角点检测算法的步骤 5.Harris角点提取算法设计 <span style="font-siz ...

  9. sklearn特征的提取(下)

    上文特征的提取(上) 特征哈希向量 词袋模型的方法很好用,也很直接,但在有些场景下很难使用,比如分词后的词汇字典表非常大, 达到100万+,此时如果直接使用词频向量或Tf-idf权重向量的方法,将对应 ...

最新文章

  1. Eclipse如何更改包名后,批量修改文件的包名
  2. win10 java64虚拟机_Java VM 环境配置过程要点( win10,64位)
  3. Windows sever 2008 动态硬盘数据恢复
  4. Java入门:冒泡排序
  5. Spring的REST分页
  6. 查询 service monitor 时发生内部错误_通过Service访问应用 (1)
  7. 《Oracle comment on注释信息方法论》
  8. KVM虚拟机获取所有IP(shell)
  9. Memory Notification: Library Cache Object loaded into SGA问题
  10. Jetson TK1 一:调整屏幕分辨率
  11. 编码器的历史以及未来发展前景
  12. 神经网络容易受到对抗攻击,网络攻防原理与技术
  13. c语言实现十进制转换其他进制的代码
  14. 【Machine Learning】【Andrew Ng】- Quiz2(Week 9)
  15. 微信公众号项目录音上传功能
  16. There is no setter for property named ‘id‘ in ‘class com.atguigu.mybatistest.entity.User‘
  17. 在python中如何读取批量图片_Python批量处理图片
  18. Space X 火箭载人上天,马斯克改写时代:理科生的浪漫是用钱征服宇宙
  19. unity 阻挡射线未生效_Unity社区在E3生效
  20. JDK版本切换---JDK9.0版本切换至JDK1.8

热门文章

  1. mysql5.7单机多实例_Mysql 5.7.21单机多实例安装
  2. r.java没有生成_r.java文件没有生成
  3. java 源码分析_Java 源代码编译成 Class 文件的过程分析
  4. java script 6 折线_Java Script学习 6(转)
  5. java sftp nologin_SFTP连接通过Java询问奇怪的身份验证
  6. 河北单招计算机英语,2019年河北高职单招英语联考试题
  7. 【408预推免复习】操作系统之IO层次结构和IO控制方式
  8. 【PAT (Advanced Level) Practice】1008 Elevator (20 分)
  9. 【django轻量级框架】django项目部署到阿里云服务器流程
  10. android 定位 闪退_Android使用百度地图出现闪退及定位时显示蓝屏问题