特徵點檢測和匹配是計算機視覺中乙個很有用的技術。在物體檢測,視覺跟蹤,三維常年關鍵等領域都有很廣泛的應用。這一次先介紹特徵點檢測的一種方法——fast(features from accelerated segment test)。很多傳統的演算法都很耗時,而且特徵點檢測演算法只是很多複雜影象處理裡中的第一步,得不償失。fast特徵點檢測是公認的比較快速的特徵點檢測方法,只利用周圍畫素比較的資訊就可以得到特徵點,簡單,有效。
fast特徵檢測演算法**於corner的定義,這個定義基於特徵點周圍的影象灰度值,檢測候選特徵點周圍一圈的畫素值,如果候選點周圍領域內有足夠多的畫素點與該候選點的灰度值差別夠大,則認為該候選點為乙個特徵點。
其中i(x)為圓周上任意一點的灰度,i(p)為圓心的灰度,ed為灰度值差得閾值,如果n大於給定閾值,一般為周圍圓圈點的四分之三,則認為p是乙個特徵點。
為了獲得更快的結果,還採用了額外的加速辦法。如果測試了候選點周圍每隔90度角的4個點,應該至少有3個和候選點的灰度值差足夠大,否則則不用再計算其他點,直接認為該候選點不是特徵點。候選點周圍的圓的選取半徑是乙個很重要的引數,這裡我為了簡單高效,採用半徑為3,共有16個周邊畫素需要比較。為了提高比較的效率,通常只使用n個周邊畫素來比較,也就是大家經常說的fast-n。我看很多文獻推薦fast-9,作者的主頁上有fast-9、fast-10、fast-11、fast-12,大家使用比較多的是fast-9和fast-12。上個圖說明的更形象一些
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特徵檢測的過程,清晰明了,而對於角點的定義也是做到了返璞歸真,大師就是大師,還原本質的能力很強,估計以前這種簡單想法被很多人忽略了。
具體內容如下:
判別特徵點p是否是乙個特徵點,可以通過判斷以該點為中心畫圓,該圓過16個畫素點。設在圓周上的16個畫素點中是否最少有n個連續的畫素點滿足都比ip+t大,或者都比ip−t小。(這裡ip指的點p的灰度值,t是乙個閾值)如果滿足這樣的要求,則判斷p是乙個特徵點,否則p不是。在原**中n的值一般設為12。
FAST特徵點檢測演算法
定義 fast演算法定義特徵點是如果某個畫素點和他周圍領域足夠多的畫素點處於不同區域,那麼這個畫素點就是特徵點。對於灰度圖,及特徵點處灰度值與周圍足夠多畫素灰度值不同。threshold 邊緣軌跡與中心點差值。nonmaxsuppression 是否使用非極大值抑制 聚簇情況下使用 fastfeat...
matlab練習程式(FAST特徵點檢測)
演算法思想 如果乙個畫素與它鄰域的畫素差別較大 過亮或過暗 那它更可能是角點。演算法步驟 1.上圖所示,乙個以畫素p為中心,半徑為3的圓上,有16個畫素點 p1 p2 p16 2.定義乙個閾值。計算p1 p9與中心p的畫素差,若它們絕對值都小於閾值,則p點不可能是特徵點,直接pass掉 否則,當做候...
特徵點檢測學習 4 FAST演算法
fast特徵點檢測演算法 在眾多特徵點檢測演算法中,fast演算法的優勢是速度快,主要利用周圍畫素比較的資訊就可以得到特徵,簡單有效。fast演算法是基於角點檢測的影象特徵,其定義特徵點的依據是 如果某個畫素點和他周圍鄰域足夠多的畫素點處於不同區域,則這個畫素點就是特徵點,對於灰度圖來說,也就是該點...