OpenCV2学习笔记(十一):特征点检测之FAST算法

原创 2015年03月09日 00:21:27

在上一节中,记录了Harris算子检测图像特征点的定义和基于OpenCV的实现方法,它基于两个正交方向上的强度变化率。本节记录另一种特征点检测算子FAST(Features from Accelerated Segment Test),它依赖少数像素的比较来确定是否接受一个特征点,其检测效率要好于Harris。

与Harris算法相同,FAST特征算法需要定义什么是特征点。这次的定义基于假定特征点周围的图像强度,通过检查候选像素的周围一圈像素来决定是否接受这一个特征点。与中心点差异较大的像素如果组成连续的圆弧,并且弧长大于圆周长的3/4,则可判断为特征点。

在此基础上,算法还使用了额外的技巧进行加速。首先测试一个圆圈上被90度分隔的四个点(如顶部、底部,左侧和右侧四个点),如果要满足FAST的定义条件,四个点中至少要有三个点必须同时大于或小于中心像素。如果条件不成立,则该点可以直接被移除而不需要进一步的验证。在实践中,大部分的像素点可以通过这个测试进行移除,因此该算法非常高效。

和Harris方法相同的是,可以在找到的角点上执行非极大值抑制,因此需要指定角点强度的测量方法。

这里可以使用OpenCV 2的通用接口来创建任意的特征检测器,比如FAST检测器的使用方法如下:

    // 创建特征点的向量
    std::vector<cv::KeyPoint>keypoints;
    // 构造FAST特征检测器
    cv::FastFeatureDetector fast(75);
    // 进行检测
    fast.detect(image, keypoints);

同时,为了方便标记特征点,OpenCV提供了通用的特征点绘制函数cv::drawKeypoints,其调用方法如下:

    // 通用的特征点绘制函数
    cv::drawKeypoints(image, // 输入图像
                      keypoints, // 特征点向量
                      image, // 输出图像
                      cv::Scalar(255,255,255), // 特征点颜色
                      cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); // 绘制标记

通过指定选中的绘制标记,可以看到输出图像中特征点均得到了绘制:

这里写图片描述

完整的实现代码如下,只需修改main函数:

#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 输入图像
    cv::Mat image = cv::imread("c:/031.jpg", 0);
    cv::namedWindow("Original Image");
    cv::imshow("Original Image", image);
    // 特征点的向量
    std::vector<cv::KeyPoint>keypoints;
    // 构造FAST特征检测器
    cv::FastFeatureDetector fast(75);
    // 进行检测
    fast.detect(image, keypoints);

    // 通用的特征点绘制函数
    cv::drawKeypoints(image, // 输入图像
                      keypoints, // 特征点向量
                      image, // 输出图像
                      cv::Scalar(255, 255, 255), // 特征点颜色
                      cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); // 绘制标记

    cv::namedWindow("Fast Feature");
    cv::imshow("Fast Feature", image);

    return a.exec();
}

FAST算法可以获得非常快速的特征点检测,在需要考虑运行速度的时候可以选用,比如在高帧率的视频序列中进行视觉跟踪。

关于FAST特征算法的详细描述,可参考以下论文:

The article by E.Rosten, T.Drummond, Machine Learning for High-speed Corner Detection, In European Conference on Computer Vision, pp.430-443, 2006

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyuefeilong/article/details/44142623

Opencv2.4.9源码分析——FAST

FAST(Features fromaccelerated segment test)是一种角点检测方法,它可以用于特征点的提取,并完成跟踪和映射物体。FAST角点检测算法最初是由Edward Ros...
  • zhaocj
  • zhaocj
  • 2014-10-20 15:47:11
  • 11639

【特征匹配】Fast原理及源码解析

在实时的视频流处理中,需要对每一帧特征提取,对算法处理速度上有很高的要求,传统的SIFT,Harris等特征点提取很难满足。由此提出Fast(Features from Accelerated Se...
  • luoshixian099
  • luoshixian099
  • 2015-09-08 18:34:43
  • 5850

学习OpenCV——Fast检测与Surf&Brief匹配(娱乐)

这几天一直徘徊在Fast,Surf,Shift,Brief,ORB几种特征检测算法之中,被搞得焦头烂额!!! 各个实验都在前面的blog中。 OpenCV已经实现了他们,所以就用OpenCV试验一...
  • sangni007
  • sangni007
  • 2012-05-08 18:51:43
  • 24486

FAST算法小结

本文解决以下问题 FAST算法的基本原理 FAST 算法在OpenCV中的调用 一. FAST算法的基本原理1. FAST算法的动机大部分特征检测算法的效果较好,但是达不到实时,因此提出FAST (...
  • GH_HOME
  • GH_HOME
  • 2016-05-25 20:54:33
  • 4323

OpenCV特征点提取----Fast特征

1. FAST(featuresfrom accelerated segment test)算法 http://blog.csdn.net/yang_xian521/article/details/...
  • wangyaninglm
  • wangyaninglm
  • 2015-03-08 22:43:44
  • 12847

python+OpenCV 特征点检测

1.Harris角点检测Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。基本原理是根据公...
  • wangyaninglm
  • wangyaninglm
  • 2016-06-11 23:39:16
  • 9557

OpenCV中feature2D学习——FAST特征点检测

在前面的文章《OpenCV中feature2D学习——SURF和SIFT算子实现特征点检测》中讲了利用SIFT和SURF算子进行特征点检测,这里尝试使用FAST算子来进行特征点检测。     FAS...
  • u012564690
  • u012564690
  • 2015-03-29 23:12:09
  • 6265

【openCV】特征点提取与匹

#include "opencv2/opencv.hpp" #include "opencv2/core/core.hpp" #include "highgui.h" #include "op...
  • jhszh418762259
  • jhszh418762259
  • 2016-10-05 13:23:42
  • 1389

FAST特征点检测算法

一、FAST算法简介   如今,特征点检测的算法有很多,从最初的Moravec,到Harris,再到SIFT、SUSAN、GLOH、SURF算法,可以说特征点提取算法层出不穷。各种改进算法PCA-S...
  • Chenyukuai6625
  • Chenyukuai6625
  • 2017-07-14 16:27:25
  • 1507

OpenCV学习笔记(四十六)——FAST特征点检测features2D

特征点检测和匹配是计算机视觉中一个很有用的技术。在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用。这一次先介绍特征点检测的一种方法——FAST(features from accelerate...
  • yang_xian521
  • yang_xian521
  • 2012-03-30 16:50:32
  • 45209
收藏助手
不良信息举报
您举报文章:OpenCV2学习笔记(十一):特征点检测之FAST算法
举报原因:
原因补充:

(最多只允许输入30个字)