【问题标题】:Which hashing algorithm is suited for image local descriptors?哪种散列算法适合图像局部描述符?
【发布时间】:2017-02-19 03:09:20
【问题描述】:

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

>>> 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

【问题讨论】:

  • 没有流行的(设计上与您想要的相反)!您需要一些感知散列或局部保留散列。但是大多数用于图像的图像都会以未触及的图像开始(意思是:您作为第一步所做的事情不是他们设计的一部分)。另一个评论(来自非专家):滑动窗口看起来很大(将无法掌握可以说是最重要概念的边缘)在你的情况下做任何好事。
  • 你指的是哪一个?是否可以调整感知散列或局部散列以生成“本地”描述符?
  • 没有。它们通常用作完整图像的散列。 Hash(a), Hash(b) -> 哈希遵循一些度量(例如在欧几里得空间)行为,因此基于聚类的方法可以使用这些。
  • 您不能根据图像中的 x/y 位置将哈希值存储到 2-dim 数组中吗?或者完全跳过哈希并只存储信息?我想我错过了你想要实现的部分目标。
  • 检查OpenCV FLANN,其中包含非常适合您的目的的算法集合。

标签: algorithm image-processing hash knn


【解决方案1】:

Locality Sensitive Hashing (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 等等)并使用不同的算法评估它们的性能,那就更好了。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多