2013-10-26 222 views
1

我是從一個圖像使用以下簡單的線條提取SURF描述符:在的範圍內SURF描述符的值是什麼?

Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create("SURF"); 
    descriptor->compute(im1, kp, desc1); 

現在,當I「看」的變量desc1.data,它包含的整數值0到255

然而,當我使用的代碼調查值:

for (int j=0;j<desc1.cols; j++){ 
      float a=desc1.at<float>(0,j); 

它包含-1和1之間的值這怎麼可能? SURF不應該像SIFT那樣返回整數值?

回答

1

我不確定OpenCV會發生什麼,但是到目前爲止,這是SURF所做的。 SURF描述符將一個小圖像塊分成4×4個子區域,並以聰明的方式計算每個子區域上的小波響應。基本上它是一個4元組描述符< sum(dx),sum(dy),sum(| dx |),sum(| dy |)>,其中dx,dy是每個子區域中的小波響應。描述符是通過連接所有的響應和規範化幅度來構造的,這導致了64維描述符。從描述中可以清楚地看出,歸一化總和(dx)和總和(dy)值位於-1和1之間,而sum(| dx |)和sum(| dy |)位於0到1之間。如果看到128維描述符,dx和| dx |的求和分別計算dx> = 0和dy < 0,這使64維描述符的大小加倍。

+0

感謝您的回答! – GilLevi

相關問題