频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
FAST特征点检测算法
2017-07-17 10:53:52      个评论    来源:Chenyukuai6625的博客  
收藏   我要投稿

一、FAST算法简介
如今,特征点检测的算法有很多,从最初的Moravec,到Harris,再到SIFT、SUSAN、GLOH、SURF算法,可以说特征点提取算法层出不穷。各种改进算法PCA-SIFT、ICA-SIFT、P-ASURF、R-ASURF、Radon-SIFT等也是搞得如火如荼。其中上面的算法如SIFT、SURF提取到的特征效果非常好(有较强的不变性),但是时间消耗依然很大,而在一个系统中,特征提取仅仅是一部分,还需要进行诸如配准、提纯、融合等后续算法。这使得系统的实时性变差,降系了系统性能。所以FAST算法的提出就是为了解决系统检测的实时性问题。
2006年,Edward Rosten和Tom Drummond在《Machine learning for high-speed corner detection》中提出了一种FAST特征点检测算法,并在2010年稍作修改后发表了《Features From Accelerated Segment Test》,简称FAST算法。需要强调的是FAST算法只是一种特征点检测算法,并不涉及特征点的特征描述。具体的特征点描述可以通过其它算法来实现。

二、FAST算法主要内容
1、FAST特征角点
在理解具体算法之前先了解FAST特征角点的概念,如果某点的像素与其周围邻域内足够多的其它点的像素相差较大,则该点可能是角点。
2、FAST算法实现的具体步骤如下:
(1)在图像中任选一点p, 假定其像素(亮度)值为 Ip
(2)以p点为中心,以3为半径画圆,圆上有16个像素,如下图所示:

这里写图片描述

(3)定义一个阈值。计算p1<喎"/kf/ware/vc/" target="_blank" class="keylink">vc3ViPqGicDxzdWI+OTwvc3ViPtPr1tDQxHC1xM/xy9iy7qOsyPTL/MPHvvi21Na1trzQodPa49DWtaOs1PJwteOyu7/JxNzKx8zY1fe146Os1rG907aqxvqju7fx1PKjrLWx1/a68tGhteOjrL340NDPwtK7sr3F0LbPo7s8YnIgLz4NCqOoNKOpyPRwyse68tGhteOjrNTyvMbL43A8c3ViPjE8L3N1Yj6honA8c3ViPjU8L3N1Yj6honA8c3ViPjk8L3N1Yj6honA8c3ViPjEzPC9zdWI+0+vW0NDEcLXEz/HL2LLuo6zI9Mv8w8e1xL74ttTWtdPQ1sHJ2TO49rOsuf3j0Na1o6zU8rWx1/a68tGhteOjrL340NDPwtK7sr3F0LbPo7u38dTyo6zWsb3TtqrG+qO7PGJyIC8+DQqjqDWjqcj0cMrHuvLRobXjo6zU8rzGy+NwPHN1Yj4xPC9zdWI+tb1wPHN1Yj4xNjwvc3ViPtXiMTa49rXj0+vW0NDEcLXEz/HL2LLuo6zI9Mv8w8fT0NbBydk5uPazrLn949DWtaOs1PLKx8zY1fe146O7t/HU8qOs1rG907aqxvqhozxiciAvPg0Ko6g2o6m21M28z/G9+NDQt8e8q7Tz1rXS1tbGo7rF0LbP0tTM2NX3teNwzqrW0NDEtcTSu7j2wdrT8qOoyOczeDO78jV4NaOpxNrKx7fx09C24Lj2zNjV97Xjo6zI57n709C24Lj2zNjV97Xjo6zU8rfWsfC8xsvjuPe49szY1fe147XERkFTVLXDt9bWtaOovLRz1rWjrM6qMTa49rXj0+vW0NDEsu7WtbXEvvi21Na119y6zaOpo6zI57n7cMrHwezT8sv509DM2NX3tePW0HPWtdfutPO1xKOs1PKxo8H01eK49szY1fe146Ost/HU8raqxvq19KGjyOe5+8Hs0/LE2ta709DSu7j2zNjV97Xjo6zU8r2r1eK49szY1fe147340NCxo8H0o6yyu7LO0+ux8LXEvMbL46GjxuTW0MnPw+bTw7W9tcS1w7fWvMbL47mryr3I58/Co6i5q8q91tDTw1ax7cq+tcO31qOsdLHtyr7j0Na1o6mjujwvcD4NCjxkaXYgYWxpZ249"center">这里写图片描述

由上可以看出,FAST算法实现起来简单,这也就是它为什么这么快速的原因,它也因为其速度快而著称。

三、利用OpenCV实现的FAST实例
1、代码

#include  
#include  
#include  
#include 

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    Mat img = imread("1.jpg"); //读取图片
    std::vector keypoints;
    FAST(img, keypoints, 10); //调用FAST算法,10为阈值
    //-- Draw keypoints 
    Mat img_keypoints;
    drawKeypoints(img, keypoints, img_keypoints, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    //-- Show detected (drawn) keypoints 
    imshow("Keypoints", img_keypoints);

    waitKey(0);
    return 0;
}

2、运行结果
(1)原图

这里写图片描述

(2)FAST特征点检测

这里写图片描述

四、总结
FAST算法比其他已知的角点检测算法要快很多倍,但是当图片中的噪点较多时,它的健壮性并不好,而且算法的效果还依赖于一个阈值tt。而且FAST不产生多尺度特征而且FAST特征点没有方向信息,这样就会失去旋转不变性。

点击复制链接 与好友分享!回本站首页
上一篇:在Centos6.7上安装YARA
下一篇:hadoop基础xml配置
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训

版权所有: 红黑联盟--致力于做实用的IT技术学习网站