【问题标题】:Is local sensitive hashing algorithm only compatible with binary descriptors in opencv / flann?局部敏感散列算法是否仅与 opencv / flann 中的二进制描述符兼容?
【发布时间】:2013-02-22 07:27:30
【问题描述】:

我正在尝试在 opencv 2.4.4 的 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 算法构建 flann 的索引时。代码断言

“Opencv 错误,不支持的格式或格式组合 type=5”

我检查 miniflann.cpp 中的代码。 flann中的局部敏感哈希算法似乎只兼容CV_8U Mat类型,除了CV_32F是sift生成的。

但是,从 ORB、Brief、BRISK、FREAK 检测到的其他二进制描述符可以产生 CV_8U Mat 类型。

所以我的问题是:局部敏感散列算法是否只与 opencv 中的二进制描述符兼容?

【问题讨论】:

    标签: opencv indexing sift surf


    【解决方案1】:

    是的:散列函数仅针对二进制描述符(即可以表示为unsigned char 数组的描述符)实现。

    更多详情请参考这个答案:Binary features and Locality Sensitive Hashing (LSH)

    【讨论】:

    • 正如您提到的主题,我们只能在可以表示为无符号字符数组的描述符中使用散列函数。 unsigned char 范围从 0 到 255,不等于二进制 0,1。我确信二进制描述符,例如:(1,0,0,1,0,……),将生效。但是 unsigned char 描述符,例如:(2,4,1,6,29,255……) 也会以同样的方式生效吗?
    • 当您使用二进制描述符时,bit array 在实践中以字节(8 位)存储,例如512 位描述符由 64 字节数组 (unsigned char-s) 表示。然后bitwise operations用于在位级别操作描述符。
    • 啊哈,也就是说一个字节变量包含8个二进制描述符,而不仅仅是1个二进制描述符。
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 2017-02-19
    • 2016-09-19
    • 1970-01-01
    • 2011-04-29
    • 2020-05-19
    • 2020-10-12
    • 2012-12-27
    相关资源
    最近更新 更多