[轉]ORB特征提取-----FAST角點檢測


轉載地址:https://blog.csdn.net/maweifei/article/details/62887831

(一)ORB特征點提取算法的簡介

       Oriented FAST and Rotated BRIEF,簡稱ORB,該特征檢測算子是在著名的FAST特征檢測和BRIEF特征描述子的基礎上提出來的,其運行時間遠遠優於SIFT和SURF,可應用於實時性特征檢測。ORB特征檢測具有尺度和旋轉不變性,對於噪聲及其透視變換也具有不變性,良好的性能是的利用ORB在進行特征描述時的應用場景十分廣泛。ORB特征檢測主要分為以下兩個步驟:(1)方向FAST特征點檢測(2)BRIEF特征描述。

(二)方向FAST特征點檢測

     局部特征檢測快速發展的時候,人們對於特征的認識也越來越深入,近幾年來,許多學者提出了許許多多的特征檢測算法及其相應算法的改進,在眾多的特征提取算法中,不乏佼佼者的出現。
        從早期的Moravec,到Harris,再到SIFT,SURF等,可以說特征提取的算法層出不窮,各種改進的算法PCA-SIFT,ICA-SIFT,P-ASURF等也是搞得如火如荼,不亦樂乎。上面所說的SIFT和SURF提取到的特征也是非常的優秀(有較強的不變性),但是時間消耗依然十分巨大,而在一個系統中,特征點的提取僅僅是一部分,后續還需要進行諸如配准、提純、圖像融合等,這就使得系統的實時性不是很好,降低了系統的性能。Edward Rosten和Tom Drummond兩位大神經過研究,與2006年在《Machine learning for high-speed corner detection》中提出了一種FAST特征點,並在2010年稍作修改之后發表了《Feature From Accelerated Segment Test》,簡稱FAST。注意:FAST只是一種特點檢測算法,並不涉及特征點的描述。
        ORB采用的是FAST算子檢測特征點,然后再給檢測到的特征點加個特征方向信息,構成oFAST。解決了FAST算子不帶有方向的嚴重缺陷。
       FAST角點檢測是一種基於機器學習的快速角點特征的檢測算法,具有方向的FAST關鍵點檢測是對興趣點所在圓周上的16個像素點進行判斷,其核心思想就是找出那些卓爾不群的點,也就是拿出一個點跟它周圍足夠多的點比較,如果這個點和周圍足夠多的點不一樣,那么就認為它是一個FAST角點.考慮圖像中的任意一個像素點和以這個像素點為中心的區域,通常情況下,該區域選擇圓形區域。如下圖所示:要判斷P點是否為角點:將P點的灰度值和它鄰域內的16個像素點的灰度值進行比較,如果P點的像素值和圓圈上鄰域內n個連續的像素點的像素值相減大於閾值t,那么就認為點P是一個角點。
         FAST角點檢測計算的時間復雜度小,檢測效果突出。FAST角點檢測為加速該算法,通常首先對圓周上的點集進行排序,排序使得其計算過程大大得到了優化。FAST多尺度特性通過建立圖像金字塔獲得,引入灰度質心法用於實現特征點方向。


 

 

步驟一:粗提取。該步能夠提取大量的特征點,但是有很大一部分的特征點的質量不高。下面介紹提取方法。從圖像中選取一點P,如上圖1。我們判斷該點是不是特征點的方法是,以P為圓心畫一個半徑為3pixel的圓。圓周上如果有連續n個像素點的灰度值比P點的灰度值大或者小,則認為P為特征點。一般n設置為12。為了加快特征點的提取,快速排出非特征點,首先檢測1、9、5、13位置上的灰度值,如果P是特征點,那么這四個位置上有3個或3個以上的的像素值都大於或者小於P點的灰度值。如果不滿足,則直接排出此點。

步驟二:機器學習的方法篩選最優特征點。簡單來說就是使用ID3算法訓練一個決策樹,將特征點圓周上的16個像素輸入決策樹中,以此來篩選出最優的FAST特征點。

步驟三:非極大值抑制去除局部較密集特征點。使用非極大值抑制算法去除臨近位置多個特征點的問題。為每一個特征點計算出其響應大小。計算方式是特征點P和其周圍16個特征點偏差的絕對值和。在比較臨近的特征點中,保留響應值較大的特征點,刪除其余的特征點。

步驟四:特征點的尺度不變形。建立金字塔,來實現特征點的多尺度不變性。設置一個比例因子scaleFactor(opencv默認為1.2)和金字塔的層數nlevels(pencv默認為8)。將原圖像按比例因子縮小成nlevels幅圖像。縮放后的圖像為:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的圖像提取特征點總和作為這幅圖像的oFAST特征點。

步驟五:特征點的旋轉不變性。ORB算法提出使用矩(moment)法來確定FAST特征點的方向。也就是說通過矩來計算特征點以r為半徑范圍內的質心,特征點坐標到質心形成一個向量作為該特征點的方向。矩定義如下:


 

其中,I(x,y)為圖像灰度表達式。該矩的質心為:


 

假設角點坐標為O,則向量的角度即為該特征點的方向。計算公式如下:

  1. /********************************************************************************************************
  2. 文件說明:
  3. FAST角點檢測
  4. 開發環境:
  5. Win7 + OpenCv2.4.8 + VS2012
  6. 時間地點:
  7. 陝西師范大學 2017.3.17
  8. 作 者:
  9. 九 月
  10. *********************************************************************************************************/
  11. #include <opencv2/core/core.hpp>
  12. #include <opencv2/highgui/highgui.hpp>
  13. #include <opencv2/imgproc/imgproc.hpp>
  14. #include <opencv2/features2d/features2d.hpp>
  15.  
  16. using namespace cv;
  17. using namespace std;
  18.  
  19. int main(int argc, char** argv)
  20. {
  21. cv::Mat img = imread( "hand1.jpg");
  22. std::vector<cv::KeyPoint> keypoints;
  23.  
  24. cv:: FastFeatureDetector fast(15); // 檢測的閾值為50
  25. fast.detect(img, keypoints);
  26.  
  27. cv::Mat img_keypoints;
  28. cv::drawKeypoints(img, keypoints, img_keypoints, Scalar::all( -1), DrawMatchesFlags::DEFAULT);
  29.  
  30. cv::imshow( "Keypoints", img_keypoints);
  31. cv::waitKey( 0);
  32. return 0;
  33. }


參考資料:

1)http://blog.csdn.net/hujingshuang/article/details/46898007

2)http://m.blog.csdn.net/article/details?id=52625678

3)http://download.csdn.net/detail/yang843061497/7785917

 

4)http://www.cvchina.info/2011/07/04/whats-orb/ 

5)http://blog.sina.com.cn/s/blog_916b71bb0100w9al.html


免責聲明!

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



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