SLAM: 图像角点检测的Fast算法(OpenCV文档)
生活随笔
收集整理的這篇文章主要介紹了
SLAM: 图像角点检测的Fast算法(OpenCV文档)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?????? 官方鏈接:http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_fast/py_fast.html#fast-algorithm-for-corner-detection
?????? 原文鏈接:http://blog.csdn.net/candycat1992/article/details/22285979
???????本文做了少量修改,并添加了C++代碼,若有疑問或者版權問題,請拜讀作者或者通知本人。
目標
- 理解FAST算法的基本原理
- 使用OpenCV的FAST函數進行角點(corners)檢測
原理
我們已知很多種特征檢測的方法,而且它們其中很多效果都非常不錯。但是,當從一個實時運行的程序角度出發,它們還不夠快。一個最好的例子就是SLAM(Simultaneous Localization and Mapping)移動機器人,它的可計算資源是受限的。
作為上述問題的一個解決方法,FAST(Features from Accelerated Segment Test)算法由Edward Rosten 和 Tom Drummond在他們2006年的論文“Machine learning for high-speed corner detection”(在2010年再次被修訂)中被提出。下面是該算法的一個基本總結。你可以參見原論文去學習更多的細節(下面所有的圖片是從原論文中提取的)。
使用FAST進行特征檢測
1.?當n < 12時不能拒絕許多候選點。
2. 檢測出來的角點不是最優的,這是因為它的效率是依靠角點外形的排列和分布的。
3.?
4. 相鄰的多個特征點會被檢測到。
前三個問題可以使用機器學習的方法解決。最后一個可以使用non-maximal suppression。
機器學習
non-maximal suppression
從鄰近的位置選取了多個特征點是另一個問題。我們可以使用non-maximal suppression來解決。
總結
FAST算法比其他已知的角點檢測法要快很多倍。 但是當圖片的噪點較多時,它的健壯性并不好。這依靠一個闕值。
OpenCV中的FAST特征檢測
和OpenCV中其他特征檢測器的調用相同。如果你想,你可以指定一個闕值,或者決定是否使用non-maximal suppression來判斷鄰近特征點。
對于相鄰特征點,OpenCV定義了三個flags:
- cv2.FAST_FEATURE_DETECTOR_TYPE_5_8
- cv2.FAST_FEATURE_DETECTOR_TYPE_7_12
- cv2.FAST_FEATURE_DETECTOR_TYPE_9_16
C++代碼段:
int CEkfSlam::fast_corner_detect_9(cv::Mat &im, double threshold, std::vector<CvPoint> &coords) {//提取快速角點//一次只提取一個角點?//且有時可能會不發現角點,可能一次有多個角點cv::Mat image(im.rows, im.cols, 1);if (3== im.channels() ){cv::cvtColor (im,image,CV_BGR2GRAY); }else{image =im.clone();}//快速角點檢測 std::vector<cv::KeyPoint> keypoints; cv::FAST(image,keypoints,threshold,true); //默認開啟極大值抑制!coords.resize(keypoints.size() );//cv::imshow("kp",image);cv::waitKey(0);for (int i=0;i< keypoints.size();++i){coords[i].x =keypoints[i].pt.x;coords[i].y =keypoints[i].pt.y;}return 1; }
值得注意的是,下面的寫法會出現內存問題:
cv::FastFeatureDetector fast(threshold, true); fast.detect(image, allKeypoints[0]);</del>
下面是測試結果。左邊是使用了nonmaxSuppression的FAST,右邊則沒有使用。
?
總結
以上是生活随笔為你收集整理的SLAM: 图像角点检测的Fast算法(OpenCV文档)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVPR2015深度学习回顾
- 下一篇: 安卓项目中文件夹的作用