algorithm - 哪种哈希算法适合图像局部描述符?

标签 algorithm image-processing hash knn

我在图像上运行滑动窗口(类似于卷积核)并提取每个窗口的均值/颜色直方图。然而,由于数据是非常高维的,我希望将其散列为签名,因此我可以通过聚合窗口来执行近似最近邻图像搜索。

>>> means = cv2.mean(roi) #roi = window
>>> means
(181.12238527002307, 199.18315040165433, 206.514296508391, 0.0)..... => **some numeric hash**

哪种哈希算法适合这种情况?我试过 Md5 和 SHA-1,但它们是加密的,可能不适合 k-NN。

我读过 MinHash 和 SimHash,但不确定它们是否适合我的用例。有什么建议吗?

sliding window image example

最佳答案

局部敏感哈希 (LSH) 非常适合您的目的。根据 "Near-Optimal Hashing Algorithms for Approximate Nearest Neighbor in High Dimensions" (by Alexandr Andoni and Piotr Indyk)" ,适合在高维空间进行近似搜索。

LSH 中使用的哈希函数的特点是它们对于彼此靠近的特征向量的碰撞概率高于那些相距很远的特征向量。加密哈希函数没有此属性。使用加密哈希,即使特征向量发生非常小的变化也会导致哈希值发生巨大变化。

OpenCV FLANN有一个LSH的实现。上述论文的作者还提供了一个实现 here .

话虽如此,我建议您在您的数据集上评估 OpenCV FLANN 中的其他算法,以便您可以选择最佳的一个。

关于特征,您基本上是在使用对光照非常敏感的颜色信息。可能照明与您的情况无关。如果您可以尝试其他特征描述符(SIFT/SURF、ORB、BRIEF 等)并使用不同算法评估它们的性能,那就更好了。

关于algorithm - 哪种哈希算法适合图像局部描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962618/

相关文章:

ruby - "Array to Hash"在 Ruby 中转换

algorithm - 多因子排序算法

php - 使用明信片图像中的脸部(参见屏幕截图)

algorithm - 一次性密码算法(基于数学,基于时间和基于 Action )

python - PyQt - 自动调整小部件/图片的大小

opencv - 3D刚性变换的组合

c++ - 预先知道的字符串的完美哈希函数

c - SHA256 使用 Openssl 导致段错误

c# - 最适合固定大小但具有标准化位置的实体

c - 遍历不断变化的事件列表