2013-03-07 20 views
2

我想在opencv 2.4.4中使用flann中的局部敏感哈希算法。這裏是我的代碼局部敏感哈希算法只與opencv/flann中的二進制描述符兼容嗎?

Ptr<IplImage> cluster_image = cvLoadImage("C:\\Users\\Administrator\\Pictures\\1.jpg"); 
vector<KeyPoint> cluster_keypoint; 
Mat des; 

description_detect(cluster_image,cluster_keypoint,des,SIFT_DESCRIPTION); 
//My function to extract the sift feature from image. 
//Descriptions are stored at variable des. 

flann::Index my_index(des, flann::LshIndexParams(10, 10, 2)); 

當運行此代碼來建立由lsh algo的flann的索引。該代碼斷言

「opencv的錯誤,不支持的格式或格式類型= 5的組合」

我在miniflann.cpp校驗碼。似乎flann中的本地敏感哈希算法只能與CV_8U Mat類型兼容,而不是由sift生成的CV_32F。

但是,從ORB,Brief,BRISK,FREAK檢測到的其他二進制描述符可以生成CV_8U Mat類型。

所以我的問題是:本地敏感哈希算法只與opencv中的二進制描述符兼容?

回答

4

是:哈希函數僅用於二進制描述符(即描述符可以表示爲unsigned char的數組)。

請參考這個答案詳細信息:Binary features and Locality Sensitive Hashing (LSH)

+0

正如您所提到的話題,我們只能使用可表示爲unsigned char類型的數組描述散列函數。無符號字符的範圍從0到255,不等於二進制0,1。我確信二進制描述符,例如:(1,0,0,1,0,......)將生效。但是,無符號字符描述符,例如:(2,4,1,6,29,255 ......),也會以同樣的方式生效? – zhfkt 2013-03-07 12:37:45

+1

當您使用二進制描述符時,實際上[字節數組](http://en.wikipedia.org/wiki/Bit_array)與字節(8位)存儲在一起。一個512位描述符由一個64字節的字節數組('unsigned char'-s)表示。然後[位操作](http://en.wikipedia.org/wiki/Bitwise_operation)用於在位級操作描述符。 – deltheil 2013-03-07 13:19:21

+1

啊哈,這意味着一個字節變量包含8個二進制描述符,而不僅僅包含1個二進制描述符。 – zhfkt 2013-03-07 17:21:07