转载地址:https://blog.csdn.net/maweifei/article/details/62887831

(一)ORB特征点提取算法的简介

Oriented FAST and Rotated BRIEF,简称ORB,该特征检测算子是在著名的FAST特征检测和BRIEF特征描述子的基础上提出来的,其运行时间远远优于SIFT和SURF,可应用于实时性特征检测。ORB特征检测具有尺度和旋转不变性,对于噪声及其透视变换也具有不变性,良好的性能是的利用ORB在进行特征描述时的应用场景十分广泛。ORB特征检测主要分为以下两个步骤:(1)方向FAST特征点检测(2)BRIEF特征描述。

(二)方向FAST特征点检测

     在局部特征检测快速发展的时候,人们对于特征的认识也越来越深入,近几年来,许多学者提出了许许多多的特征检测算法及其相应算法的改进,在众多的特征提取算法中,不乏佼佼者的出现。
        从早期的Moravec,到Harris,再到SIFT,SURF等,可以说特征提取的算法层出不穷,各种改进的算法PCA-SIFT,ICA-SIFT,P-ASURF等也是搞得如火如荼,不亦乐乎。上面所说的SIFT和SURF提取到的特征也是非常的优秀(有较强的不变性),但是时间消耗依然十分巨大,而在一个系统中,特征点的提取仅仅是一部分,后续还需要进行诸如配准、提纯、图像融合等,这就使得系统的实时性不是很好,降低了系统的性能。Edward Rosten和Tom Drummond两位大神经过研究,与2006年在《Machine learning for high-speed corner detection》中提出了一种FAST特征点,并在2010年稍作修改之后发表了《Feature From Accelerated Segment Test》,简称FAST。注意:FAST只是一种特点检测算法,并不涉及特征点的描述。
        ORB采用的是FAST算子检测特征点,然后再给检测到的特征点加个特征方向信息,构成oFAST。解决了FAST算子不带有方向的严重缺陷。
       FAST角点检测是一种基于机器学习的快速角点特征的检测算法,具有方向的FAST关键点检测是对兴趣点所在圆周上的16个像素点进行判断,其核心思想就是找出那些卓尔不群的点,也就是拿出一个点跟它周围足够多的点比较,如果这个点和周围足够多的点不一样,那么就认为它是一个FAST角点.考虑图像中的任意一个像素点和以这个像素点为中心的区域,通常情况下,该区域选择圆形区域。如下图所示:要判断P点是否为角点:将P点的灰度值和它邻域内的16个像素点的灰度值进行比较,如果P点的像素值和圆圈上邻域内n个连续的像素点的像素值相减大于阈值t,那么就认为点P是一个角点。
         FAST角点检测计算的时间复杂度小,检测效果突出。FAST角点检测为加速该算法,通常首先对圆周上的点集进行排序,排序使得其计算过程大大得到了优化。FAST多尺度特性通过建立图像金字塔获得,引入灰度质心法用于实现特征点方向。

步骤一:粗提取。该步能够提取大量的特征点,但是有很大一部分的特征点的质量不高。下面介绍提取方法。从图像中选取一点P,如上图1。我们判断该点是不是特征点的方法是,以P为圆心画一个半径为3pixel的圆。圆周上如果有连续n个像素点的灰度值比P点的灰度值大或者小,则认为P为特征点。一般n设置为12。为了加快特征点的提取,快速排出非特征点,首先检测1、9、5、13位置上的灰度值,如果P是特征点,那么这四个位置上有3个或3个以上的的像素值都大于或者小于P点的灰度值。如果不满足,则直接排出此点。

步骤二:机器学习的方法筛选最优特征点。简单来说就是使用ID3算法训练一个决策树,将特征点圆周上的16个像素输入决策树中,以此来筛选出最优的FAST特征点。

步骤三:非极大值抑制去除局部较密集特征点。使用非极大值抑制算法去除临近位置多个特征点的问题。为每一个特征点计算出其响应大小。计算方式是特征点P和其周围16个特征点偏差的绝对值和。在比较临近的特征点中,保留响应值较大的特征点,删除其余的特征点。

步骤四:特征点的尺度不变形。建立金字塔,来实现特征点的多尺度不变性。设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(pencv默认为8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’=
I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。

步骤五:特征点的旋转不变性。ORB算法提出使用矩(moment)法来确定FAST特征点的方向。也就是说通过矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。矩定义如下:

其中,I(x,y)为图像灰度表达式。该矩的质心为:

假设角点坐标为O,则向量的角度即为该特征点的方向。计算公式如下:

  1. /********************************************************************************************************
  2. 文件说明:
  3. FAST角点检测
  4. 开发环境:
  5. Win7 + OpenCv2.4.8 + VS2012
  6. 时间地点:
  7. 陕西师范大学 2017.3.17
  8. 作 者:
  9. 九 月
  10. *********************************************************************************************************/
  11. #include <opencv2/core/core.hpp>
  12. #include <opencv2/highgui/highgui.hpp>
  13. #include <opencv2/imgproc/imgproc.hpp>
  14. #include <opencv2/features2d/features2d.hpp>
  15.  
  16. using namespace cv;
  17. using namespace std;
  18.  
  19. int main(int argc, char** argv)
  20. {
  21. cv::Mat img = imread("hand1.jpg");
  22. std::vector<cv::KeyPoint> keypoints;
  23.  
  24. cv::FastFeatureDetector fast(15); // 检测的阈值为50
  25. fast.detect(img, keypoints);
  26.  
  27. cv::Mat img_keypoints;
  28. cv::drawKeypoints(img, keypoints, img_keypoints, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
  29.  
  30. cv::imshow("Keypoints", img_keypoints);
  31. cv::waitKey(0);
  32. return 0;
  33. }

参考资料:

1)http://blog.csdn.net/hujingshuang/article/details/46898007

2)http://m.blog.csdn.net/article/details?id=52625678

3)http://download.csdn.net/detail/yang843061497/7785917

4)http://www.cvchina.info/2011/07/04/whats-orb/ 

5)http://blog.sina.com.cn/s/blog_916b71bb0100w9al.html

[转]ORB特征提取-----FAST角点检测的更多相关文章

  1. 第十四节、FAST角点检测(附源码)

    在前面我们已经陆续介绍了许多特征检测算子,我们可以根据图像局部的自相关函数求得Harris角点,后面又提到了两种十分优秀的特征点以及他们的描述方法SIFT特征和SURF特征.SURF特征是为了提高运算 ...

  2. FAST特征点检测

    Features From Accelerated Segment Test 1. FAST算法原理 博客中已经介绍了很多图像特征检测算子,我们可以用LoG或者DoG检测图像中的Blobs(斑点检测) ...

  3. opencv笔记6:角点检测

    time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...

  4. Opencv学习笔记------Harris角点检测

    image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...

  5. Harris角点及Shi-Tomasi角点检测(转)

    一.角点定义 有定义角点的几段话: 1.角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测.图像匹配.视频跟踪.三维建模和目标识别等领域中.也 ...

  6. ORB(oriented FAST and rotated BRIEF)特征提取与检测

    ORB采取FAST算法检测特征点,采取BRIEF算法计算特征点描述子. 1.检测特征点 检测候选特征点周围一圈的像素值,若有足够多的像素值与候选特征点的差异都较大,则认为该候选特征点是特征点. 对于上 ...

  7. 图像处理检测方法 — ORB(Oriented FAST and Rotated BRIEF)

    1.FAST  FAST算子的基本原理是:若某像素点与其周围领域内足够多的连续的像素点存在某一属性差异,并且该差异大于指定阈值,则可以断定该像素点与其邻域像素有可被识别的不同之处,可以作为一个特征点( ...

  8. 特征点检测算法——FAST角点

    上面的算法如SIFT.SURF提取到的特征也是非常优秀(有较强的不变性),但是时间消耗依然很大,而在一个系统中,特征提取仅仅是一部分,还要进行诸如配准.提纯.融合等后续算法.这使得实时性不好,降系了统 ...

  9. ORB特征提取与匹配

    ORB特征是目前最优秀的特征提取与匹配算法之一,下面具体讲解一下: 特征点的检测 图像的特征点可以简单的理解为图像中比较显著显著的点,如轮廓点,较暗区域中的亮点,较亮区域中的暗点等.ORB采用FAST ...

随机推荐

  1. Java通过openOffice实现word,excel,ppt转成pdf实现在线预览

    Java通过openOffice实现word,excel,ppt转成pdf实现在线预览 一.OpenOffice 1.1 下载地址 1.2 JodConverter 1.3 新建实体类PDFDemo ...

  2. ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具

    ShowDoc,APIDoc,可道云API,语雀-适合IT企业的文档工具 一.ShowDoc官方文档及说明 1.1 它可以用来做什么 1.2 它都有些什么功能 1.3 使用在线的ShowDoc 1.4 ...

  3. Java——Number类

    在平时学习中,当我们需要使用数字的时候,通常使用内置数据类型,如byte,int,long,double等. int i =12; float a = 12.3; 在实际开发中,经常会遇到需要使用对象 ...

  4. Go语言学习笔记(1)——顺序编程

    Go语言学习笔记这一堆主要是<Go语言编程>(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...

  5. SpringMVC请求参数的获取方式

    一.GET请求参数获取 1. 通过HttpServletRequest获取参数 2. 直接方法参数获取 3. RequestParam注解方式获取请求参数 4. Bean方式获取参数 5. Model ...

  6. java切割~~百万 十万 万 千 百 十 个 角 分

    /** * @param value * @return */ @SuppressWarnings("unused") public static void convertLoan ...

  7. js文字颜色闪烁

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 全局负载均衡与CDN内容分发

    CDN简介 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...

  9. MySQL常用SQL语句2

    -- 1创建student和score表 CREATE TABLE Student( Id INT(10) PRIMARY KEY auto_increment, Name VARCHAR(20) N ...

  10. H - Oil Skimming (挖石油)

    题意大概是,海上漂浮着一些符号为#的石油,你要去搜集他们,但是你的勺子呢能且只能挖到两个单元的石油.问你最多能挖多少勺.注意 不能挖到纯净的海水,不然石油会被纯净的海水稀释的. 二分匹配,计算出里边有 ...