FAST特征點檢測算法


一 原始方法

簡介

        在局部特征點檢測快速發展的時候,人們對於特征的認識也越來越深入,近幾年來許多學者提出了許許多多的特征檢測算法及其改進算法,在眾多的特征提取算法中,不乏涌現出佼佼者。

        從最早期的Moravec,到Harris,再到SIFT、SUSAN、GLOH、SURF算法,可以說特征提取算法層出不窮。各種改進算法PCA-SIFT、ICA-SIFT、P-ASURF、R-ASURF、Radon-SIFT等也是搞得如火如荼,不亦樂乎。上面的算法如SIFT、SURF提取到的特征也是非常優秀(有較強的不變性),但是時間消耗依然很大,而在一個系統中,特征提取僅僅是一部分,還要進行諸如配准、提純、融合等后續算法。這使得實時性不好,降系了統性能。

        Edward Rosten和Tom Drummond兩位大神經過研究,於2006年在《Machine learning for high-speed corner detection》中提出了一種FAST特征點,並在2010年稍作修改后發表了《Features From Accelerated Segment Test》,簡稱FAST注意:FAST只是一種特征點檢測算法,並不涉及特征點的特征描述。

FAST詳解

FAST特征的定義

      FAST的提出者Rosten等將FAST角點定義為:若某像素與其周圍鄰域內足夠多的像素點相差較大,則該像素可能是角點。

FAST算法的步驟


1、上圖所示,一個以像素p為中心,半徑為3的圓上,有16個像素點(p1、p2、...、p16)。

2、定義一個閾值。計算p1、p9與中心p的像素差,若它們絕對值都小於閾值,則p點不可能是特征點,直接pass掉;否則,當做候選點,有待進一步考察;

3、若p是候選點,則計算p1、p9、p5、p13與中心p的像素差,若它們的絕對值有至少3個超過閾值,則當做候選點,再進行下一步考察;否則,直接pass掉;

4、若p是候選點,則計算p1到p16這16個點與中心p的像素差,若它們有至少9個超過閾值,則是特征點;否則,直接pass掉。

5、對圖像進行非極大值抑制:計算特征點出的FAST得分值(即score值,也即s值),判斷以特征點p為中心的一個鄰域(如3x3或5x5)內,計算若有多個特征點,則判斷每個特征點的s值(16個點與中心差值的絕對值總和),若p是鄰域所有特征點中響應值最大的,則保留;否則,抑制。若鄰域內只有一個特征點(角點),則保留。得分計算公式如下(公式中用V表示得分,t表示閾值):


       上面是FAST-9,當然FAST-10、FAST-11、FAST-12也是一樣的,只是步驟4中,超過閾值的個數不一樣。FAST算法實現起來簡單,尤其是以速度快著稱。

       以上便是FAST特征檢測的過程,清晰明了,而對於角點的定義也是做到了返璞歸真,大師就是大師,還原本質的能力很強,估計以前這種簡單想法被很多人忽略了。

 

 

 

 1 # -*-coding:utf-8-*-
 2 
 3 
 4 import cv2
 5 import datetime
 6 
 7 img1 = cv2.imread('/home/260158/code/pictures-data/CMU0/medium00.JPG')
 8 
 9 starttime = datetime.datetime.now()
10 
11 fast = cv2.FastFeatureDetector_create(90)
12 kp = fast.detect(img1,None)
13 img2 = cv2.drawKeypoints(img1,kp,(0,0,255))
14 
15 endtime = datetime.datetime.now()
16 a = endtime- starttime
17 
18 
19 #cv2.namedWindow('fast', cv2.WINDOW_NORMAL)
20 
21 cv2.imshow('fast',img2)
22 cv2.waitKey(0)
23 print a

結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM