ORB特征点
ORB(Oriented FAST and Rotated BRIEF),2011年提出,是一種快速特征點提取和描述的算法。ORB特征是將FAST特征點的檢測方法與BRIEF特征描述子結(jié)合起來,并在它們原來的基礎(chǔ)上做了改進(jìn)與優(yōu)化(ORB主要解決了BRIEF描述子不具備旋轉(zhuǎn)不變性的問題)。據(jù)說,ORB算法的速度是sift的100倍,是surf的10倍。
【函數(shù)】
Ptr<ORB> create(int nfeatures=500, float scaleFactor=1.2f, int nlevels=8, int edgeThreshold=31,int firstLevel=0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold=20);
【參數(shù)說明】原理鏈接
nfeatures——最多提取的特征點的數(shù)量
scaleFactor——金字塔圖像之間的尺度參數(shù)
nlevels——金字塔層數(shù)
edgeThreshold——邊緣閾值,這個值主要是根據(jù)后面的patchSize來定的,靠近邊緣edgeThreshold以內(nèi)的像素是不檢測特征點的。
firstLevel——第一層的索引值
WTA_K——用于產(chǎn)生BIREF描述子的點對的個數(shù),一般為2個,也可以設(shè)置為3個或4個,那么這時候描述子之間的距離計算就不能用漢明距離了,而是應(yīng)該用一個變種。OpenCV中,如果設(shè)置WET_K = 2,則選用點對就只有2個點,匹配的時候距離參數(shù)選擇NORM_HAMMING,像素點會被判為0或1標(biāo)識不同區(qū)域。如果WET_K設(shè)置為3或4,則BIREF描述子會選擇3個或4個點,那么后面匹配的時候應(yīng)該選擇的距離參數(shù)為NORM_HAMMING2,像素點會被標(biāo)識為0、1、2或者0、1、2、3。
scoreType——用于對特征點進(jìn)行排序的算法,你可以選擇HARRIS_SCORE,也可以選擇FAST_SCORE,但是它也只是比前者快一點點而已。
patchSize——用于計算BIREF描述子的特征點鄰域大小
fastThreshold——fast特征閾值
【案例】
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("D:/sunflower.png");
Mat srcGrayImage;
if (srcImage.channels() == 3)
{
cvtColor(srcImage,srcGrayImage,CV_RGB2GRAY);
}
else
{
srcImage.copyTo(srcGrayImage);
}
vector<KeyPoint>detectKeyPoint;
Mat keyPointImage1,keyPointImage2;
Ptr<ORB> orb = ORB::create();
orb->detect(srcGrayImage,detectKeyPoint);
drawKeypoints(srcImage,detectKeyPoint,keyPointImage1,Scalar(0,0,255),DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
drawKeypoints(srcImage,detectKeyPoint,keyPointImage2,Scalar(0,0,255),DrawMatchesFlags::DEFAULT);
imshow("src image",srcImage);
imshow("keyPoint image1",keyPointImage1);
imshow("keyPoint image2",keyPointImage2);
waitKey(0);
return 0;
}
總結(jié)
- 上一篇: 廖排骨怎么样(谁加盟过廖排骨效益咋样)
- 下一篇: 茶叶排行榜(中国十大名茶加盟品牌)