日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BRIEF 特征描述子

發(fā)布時間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BRIEF 特征描述子 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

FROM:http://www.cnblogs.com/ronny/p/4081362.html

Binary Robust Independent Elementary Features

www.cnblogs.com/ronny

1. BRIEF的基本原理

我們已經(jīng)知道SIFT特征采用了128維的特征描述子,由于描述子用的浮點(diǎn)數(shù),所以它將會占用512 bytes的空間。類似地,對于SURF特征,常見的是64維的描述子,它也將占用256bytes的空間。如果一幅圖像中有1000個特征點(diǎn)(不要驚訝,這是很正常的事),那么SIFT或SURF特征描述子將占用大量的內(nèi)存空間,對于那些資源緊張的應(yīng)用,尤其是嵌入式的應(yīng)用,這樣的特征描述子顯然是不可行的。而且,越占有越大的空間,意味著越長的匹配時間。

?

但是實(shí)際上SFIT或SURF的特征描述子中,并不是所有維都在匹配中有著實(shí)質(zhì)性的作用。我們可以用PCA、LDA等特征降維的方法來壓縮特征描述子的維度。還有一些算法,例如LSH,將SIFT的特征描述子轉(zhuǎn)換為一個二值的碼串,然后這個碼串用漢明距離進(jìn)行特征點(diǎn)之間的匹配。這種方法將大大提高特征之間的匹配,因?yàn)闈h明距離的計算可以用異或操作然后計算二進(jìn)制位數(shù)來實(shí)現(xiàn),在現(xiàn)代計算機(jī)結(jié)構(gòu)中很方便。下面來們提取一種二值碼串的特征描述子。

?

BRIEF[1]應(yīng)運(yùn)而生,它提供了一種計算二值串的捷徑,而并不需要去計算一個類似于SIFT的特征描述子。它需要先平滑圖像,然后在特征點(diǎn)周圍選擇一個Patch,在這個Patch內(nèi)通過一種選定的方法來挑選出來nd個點(diǎn)對。然后對于每一個點(diǎn)對(p,q),我們來比較這兩個點(diǎn)的亮度值,如果I(p)>I(q)則這個點(diǎn)對生成了二值串中一個的值為1,如果I(p)<I(q),則對應(yīng)在二值串中的值為-1,否則為0。所有nd個點(diǎn)對,都進(jìn)行比較之間,我們就生成了一個nd長的二進(jìn)制串。

?

對于nd的選擇,我們可以設(shè)置為128,256或512,這三種參數(shù)在OpenCV中都有提供,但是OpenCV中默認(rèn)的參數(shù)是256,這種情況下,非匹配點(diǎn)的漢明距離呈現(xiàn)均值為128比特征的高斯分布。一旦維數(shù)選定了,我們就可以用漢明距離來匹配這些描述子了。

值得注意的是,對于BRIEF,它僅僅是一種特征描述符,它不提供提取特征點(diǎn)的方法。所以,如果你必須使一種特征點(diǎn)定位的方法,如FAST、SIFT、SURF等。這里,我們將使用CenSurE方法來提取關(guān)鍵點(diǎn),對BRIEF來說,CenSurE的表現(xiàn)比SURF特征點(diǎn)稍好一些。

總體來說,BRIEF是一個效率很高的提取特征描述子的方法,同時,它有著很好的識別率,但當(dāng)圖像發(fā)生很大的平面內(nèi)的旋轉(zhuǎn)。

2. 關(guān)于點(diǎn)對的選擇

設(shè)我們在特征點(diǎn)的鄰域塊大小為S×S內(nèi)選擇nd個點(diǎn)對(p,q),Calonder的實(shí)驗(yàn)中測試了5種采樣方法:

1)在圖像塊內(nèi)平均采樣;

2)pq都符合(0,125S2)的高斯分布;

3)p符合(0,125S2)的高斯分布,而q符合(0,1100S2)的高斯分布;

4)在空間量化極坐標(biāo)下的離散位置隨機(jī)采樣

5)把p固定為(0,0)q在周圍平均采樣

下面是上面5種采樣方法的結(jié)果示意圖。

?

2. OpenCV實(shí)現(xiàn)BRIEF

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/features2d/features2d.hpp>using namespace cv;int main(int argc, char** argv) { Mat img_1 = imread("box.png"); Mat img_2 = imread("box_in_scene.png");// -- Step 1: Detect the keypoints using STAR Detector std::vector<KeyPoint> keypoints_1,keypoints_2; StarDetector detector; detector.detect(img_1, keypoints_1); detector.detect(img_2, keypoints_2);// -- Stpe 2: Calculate descriptors (feature vectors) BriefDescriptorExtractor brief; Mat descriptors_1, descriptors_2; brief.compute(img_1, keypoints_1, descriptors_1); brief.compute(img_2, keypoints_2, descriptors_2);//-- Step 3: Matching descriptor vectors with a brute force matcher BFMatcher matcher(NORM_HAMMING); std::vector<DMatch> mathces; matcher.match(descriptors_1, descriptors_2, mathces); // -- dwaw matches Mat img_mathes; drawMatches(img_1, keypoints_1, img_2, keypoints_2, mathces, img_mathes); // -- show imshow("Mathces", img_mathes);waitKey(0); return 0; }

?

[1] Michael Calonder, Vincent Lepetit, Christoph Strecha, and Pascal Fua, “BRIEF: Binary Robust Independent Elementary Features”, 11th European Conference on Computer Vision (ECCV), Heraklion, Crete. LNCS Springer, September 2010.


總結(jié)

以上是生活随笔為你收集整理的BRIEF 特征描述子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。