1、FAST
FAST算子的基本原理是:若某像素點與其周圍領域內足夠多的連續的像素點存在某一屬性差異,並且該差異大於指定閾值,則可以斷定該像素點與其鄰域像素有可被識別的不同之處,可以作為一個特征點(角點);對於灰度圖像,FAST算子考察的屬性是像素與其鄰域的灰度差異。
這個檢查過程可以用下圖更清楚的描述:對於圖像上所有像素點,考察其7*7鄰域內以該點為圓心,半徑是3的圓周上的共計16個像素點和中心點的差異。如果有連續的12(或9)個像素點與中心點的灰度差的絕對值大於或低於某一給定閾值,則該點被檢測為FAST特征點。
為了提高檢測速度,FAST提出分割測試的概念,不是逐個遍歷考察圓周上的16個像素點,而是先考察垂直和水平方向上的4個點,1,9,5,13 進行測試(先測試 1 和 19, 如果它們符合
閾值要求再測試 5 和 13)。如果 p 是角點,那么這四個點中至少有 3 個要符合閾值要求。如果不是的話肯定不是角點,就放棄。對通過這步測試的點再繼續進行測試(是否有 12 的點符合閾值要求)。基於FAST算子要求圓周上最少有12(或9)個連續的差異較大的點,如果垂直和水平方向上4個點中有2個或2個以上不滿足要求的點,則可以直接判斷該點不是FAST特征點,這樣可以排除絕大部分非FAST特征點。進過初步篩選,在對剩下的符合條件的點實施FAST算子進行特征點檢測,最后進過非極大值抑制后得到最終的特征點檢測結果。
但它的缺點是不具有方向性,尺度不變性。但速度快。缺點:
- 當 n<12 時它不會丟棄很多候選點 (獲得的候選點比較多)。
- 像素的選取不是最優的,因為它的效果取決與要解決的問題和角點 的分布情況。
- 高速測試的結果被拋棄
- 檢測到的很多特征點都是連在一起的。
前 3 個問題可以通過機器學習的方法解決,最后一個問題可以使用非最大值抑 制的方法解決。 檢測到的很多特征點都是連在一起的,采用非極大值抑制解決。
2、BRIEF
- 取目標像素點一定范圍內的領域,一般9*9。
- 對該領域進行高斯模糊處理,一般選核參數σ=2
- 以滿足高斯分布的方式在該領域內隨機選取N組像素點對,比較這兩個像素點的灰度值大小,x>=y則返回1,x< y則返回0 (所有特征點的計算均采用統一的隨機取樣模板)
- 將步驟3的結果組合成一個N位的二進制編碼,即為目標像素點的特征值。根據精度和速度要求,一般N會取256和32.
BRIEF 不去計算描述符而是直接找到一個二進制字符串。這種算法使用的是已經平滑后的圖像,它會按照一種特定的方式選取一組像素點對 n d (x,y),然后在這些像素點對之間進行灰度值對比。例如,第一個點對的灰度值分別為 p 和 q。如果 p 小於 q,結果就是 1,否則就是 0。就這樣對 n d個點對進行對比得到一個 n d 維的二進制字符串。n d 可以是128,256,512。OpenCV 對這些都提供了支持,但在默認情況下是 256(OpenCV 是使用字節表示它們的,所以這些值分別對應與 16,32,64)。當我們獲得這些二進制字符串之后就可以使用漢明距離對它們進行匹配了。非常重要的一點是:BRIEF 是一種特征描述符,它不提供查找特征的方法。所以我們不得不使用其他特征檢測器,比如 SIFT 和 SURF 等。原始文獻推薦使用 CenSurE 特征檢測器,這種算法很快。而且 BRIEF 算法對 CenSurE關鍵點的描述效果要比 SURF 關鍵點的描述更好。
原生的BRIEF的缺點也比較明顯,不具備旋轉不變性、不具備尺度不變性而且對噪聲敏感,但是它算法簡單而且計算復雜度低,計算速度很快。
3、ORB (Oriented FAST and Rotated BRIEF)
原理方法:http://blog.csdn.net/yang843061497/article/details/38553765
首先它使用 FAST 找到關鍵點,然后再使用 Harris角點檢測對這些關鍵點進行排序找到其中的前 N 個點。它也使用金字塔從而產 生尺度不變性特征。但是有一個問題,FAST 算法步計算方向。那旋轉不變性怎樣解決呢?作者進行了如下修改。它使用灰度矩的算法計算出角點的方向。以角點到角點所在(小塊)區域 質心 的方向為向量的方向。為了進一步提高旋轉不變性,要計算以角點為中心半徑為 r 的圓形區域的矩,再根據矩計算除方向。對於描述符,ORB 使用的是 BRIEF 描述符。但是我們已經知道 BRIEF對與旋轉是不穩定的。所以我們在生成特征前,要把關鍵點領域的這個 patch的坐標軸旋轉到關鍵點的方向。