(features from accelerated segment test),由於不涉及尺度,梯度,等複雜運算,fast檢測器速度非常快。它使用一定鄰域內像元的灰度值與中心點比較大小去判斷是否為乙個角點。但它的缺點是不具有方向性,尺度不變性。
1、在影象中選取乙個畫素點,來判斷它是不是關鍵點。ip等於畫素點的灰度值。
2、選擇適當的閾值εd。
3、如下圖所示在畫素點p的以固定半徑為圓的邊上選擇16個畫素點(圖中白色框出的位置),與中心點畫素值ip做差。
4、如果在這16個畫素點鐘存在n個連續畫素點的灰度值都高於ip+εd,或者低於ip-εd,那麼畫素點p就被認為是乙個角點。n的選取值一般有 9、10、11、12。
5、 為了獲得更快的結果,還採用了額外的加速辦法。
如果測試了候選點周圍每隔90度角的4個點(1,9,5,13),應該至少有3個和候選點的灰度值差足夠大,否則則不用再計算其他點,直接認為該候選點不是特徵點
。候選點周圍的圓的選取半徑是乙個很重要的引數,上圖採用半徑為3,共有16個周邊畫素需要比較。
這個檢測器的效率很高,但是它有如下幾條缺點:
1、當n<12時不會丟棄很多候選點(也就是獲得的候選點會比較多)
2、檢測出來的角點不是最優的,這是因為它的效果是依靠角點外圍的排列和分布
3、高速測試的結果被拋棄
4、檢測到的很多特徵點是連在一起的
前三個問題可以使用機器學習的方法解決。最後乙個可以使用non-maximal suppression。
1、選擇乙個集合進行學習(最好是來自於目標應用定義域)。
2、在每一張圖上執行fast演算法,找到特徵點。
3、對於每個特徵點,儲存它周圍的16個畫素點到乙個vector中。為所有的做同樣的事,得到它們所有特徵點的vectorp
4、每乙個特徵點的16個畫素點都屬於下面三類中的一種。
5、根據這些畫素點的分類,特徵向量p也被分為三個子集:p_d, p_s, p_b。
6、定義乙個新的布林變數k_p。如果p是角點就設定為true,如果不是就設定為false。
7、使用id3演算法(決策樹分類器)來查詢每乙個子集
8、遞迴計算所以的子集知道它的熵為0
9、將構建好的決策樹運用於其他影象的fast檢測。
四、非極大值抑制
使用極大值抑制的方法可以解決檢測到的特徵點相連的問題
1、為每乙個檢測到的特徵點計算它的分數函式(score function)v。v是 畫素點p 和它周圍16個畫素點的差值的絕對值之和。
2、考慮兩個相鄰的特徵點,並比較它們的v值。
3、v 值較低的點將會被剔除。
五、opencv中的fast特徵檢測器
和opencv中其他特徵檢測器的呼叫相同。如果你想,你可以指定乙個闕值,或者決定是否使用non-maximal suppression來判斷鄰近特徵點。
對於相鄰特徵點,opencv定義了三個flags:
具體**:
#不使用非極大值抑制
OpenCV學習筆記(harris角點檢測)
在影象特徵提取中,有乙個角點的概念,角點和邊界不一樣,如下圖所示 基本原理 第一張圖中,當x和y移動時,所得到的畫素差值並不是很大,我們認為這是影象的中間部分,第二張圖中,當x或者y移動時,所得到的畫素差值乙個變化很大,乙個變化很小,我們認為這是影象的邊界部分,第三張圖中,當x和y移動時,所得到的畫...
opencv角點檢測
什麼叫角點呢?如果某一點在任意方向的乙個微小變化都會造成影象灰度很大的變化,那麼這個點就是角點 我們可以把角落看成是角點的現實體現,對於牆角來說,牆角是所有平面的開始點,只要這個點變化,就會引起所有從這個點出發的平面的變化,這就是角點。下面是幾個角點的具體描述 1 一階導數,也就是影象灰度的梯度的區...
OpenCV角點檢測小結
棋盤點匹配的問題?不考慮,因為r,t對內參標定沒影響。固定取左上角為原點就行了。注意 靶標是以什麼為單位無所謂,反正求出的內參是以畫素為單位的,t的單位和靶標單位一致。劉博確實很強大,均衡化後巧妙的統計得到了理想的門限,對光照相當魯棒!影象處理是一門藝術。opencv角點檢測小結 1,cvgoodf...