【问题标题】:Locality Sensitivy Hashing in OpenCV for image processingOpenCV中用于图像处理的局部敏感散列
【发布时间】:2016-05-20 19:50:05
【问题描述】:

这是我的第一个图像处理应用程序,所以请善待这个肮脏的农民。

应用程序:

我想实现一个快速应用程序(性能至关重要甚至超过准确性),其中给定包含电影海报的照片(由手机拍摄)在给定数据集中找到最相似的照片并返回相似度得分。数据集由相似的图片组成(手机拍摄,包含电影海报)。图像可以有不同的大小、分辨率,并且可以从不同的视点拍摄(但没有旋转,因为海报应该总是向右)。

任何关于如何实施此类应用程序的建议都被广泛接受。

OPENCV 中的功能描述:

我从未使用过 OpenCV,我读过 OpenCV 的 this tutorial about Feature Detection and Description

据我了解,这些算法应该找到关键点(通常是角)并最终定义描述符(描述每个关键点并用于匹配两个不同的图像)。我使用“最终”,因为其中一些(例如 FAST)仅提供关键点。

最相似的图像问题和 LSH:

上述问题并没有解决“给定图像,如何快速找到数据集中最相似的图像”的问题。为了做到这一点,我们都可以使用任何先前算法获得的关键点和描述符。上面提到的问题似乎是nearest neighbor problemLocality Sensitive Hashing 是一种快速且流行的解决方案,可以在高维空间中找到该问题的近似解决方案。

问题:

我不明白的是如何在 LSH 中使用任何先前算法的结果(即关键点和描述符)。

有解决这个问题的方法吗?

【问题讨论】:

    标签: c++ opencv image-processing nearest-neighbor locality-sensitive-hash


    【解决方案1】:

    我将提供一个一般性的答案,超出 OpenCV 库的范围。


    引用此answer

    描述符:它们是比较关键点的方式。他们 总结,以矢量格式(恒定长度)一些特征 关于关键点。

    话虽如此,我们可以将描述符(几何)想象/视为 D 维空间中的点。所以总的来说,所有的描述符都是 D 维空间中的点。例如,对于GIST,D = 960。

    所以实际上描述符 describe 图像,使用的信息少于整个图像(因为当您有 10 亿张图像时,大小很重要)。它们充当图像的代表,因此我们代表图像处理它们(因为它们更容易/更小处理)。


    您提到的问题Nearest Neighbor 问题。请注意,当 D 很大时,这个问题的 近似 版本可以显着提高速度(因为维度的诅咒会使传统方法,例如 kd-tree 非常慢,几乎是线性的N(点数))。

    解决作为优化问题的 NN 问题的算法通常是通用的。他们可能不关心数据是否是图像、分子等,例如,我对两者都使用了我的kd-GeRaF。因此,算法期望 D 维空间中有 N 个点,因此您可能想说 N 个描述符。

    检查我对 LSH here 的回答(这指向一个很好的实现)。


    编辑

    LSH 期望 D 维度的输入 N 个向量,并给定一个查询向量(在 D 中)和一个范围 R,将从查询向量中找到位于此范围内的向量。

    因此,我们可以说每张图像仅由一个向量表示,例如SIFT 格式。

    你看,LSH 实际上并没有直接解决 k-NN 问题,但它在一个范围内搜索(并且可以给你 k-NN,如果它们在这个范围内)。在“实验”部分阅读更多关于 R 的信息,High-dimensional approximate nearest neighbokd-GeRaFFLANN直接解决k-NN问题。

    【讨论】:

    • 感谢您的回答,但我仍然不清楚一件事:每个描述符都与一个关键点相关联。每个描述符都以 D 维表示。由于有多个关键点,为了描述图像,我们需要一个矩阵 KxD,其中 K 是关键点的数量,其中 K(据我所见)即使使用相同的算法也可以在图像之间变化。所以看起来图像是由矩阵而不是由 vecotr 描述的(这是我们在 LHS 中使用的)。
    • 无论如何我也在考虑内核化局部敏感哈希,你知道最近的一些实现吗?
    • @justHelloWorld 是的,图像由 N x D 矩阵描述,其中 N 是(关键)点的数量,D 是维度!我不确定你所说的内核化 LSH 是什么意思。无论如何,我使用过并且我信任的唯一实现是我的答案中链接答案中指出的那个。顺便说一句,好问题。
    • 抱歉,恐怕我还不清楚:我们使用 LHS 来解决高维 向量 的 NN 问题,而不是矩阵!所以我不明白我们如何使用 LHS 来“找到最相似的图像”,因为从你的最后评论中,图像是通过 NxD 矩阵(而不是 D 向量)表示的!我哪里错了? :D
    • 你完全正确! Here is the question
    猜你喜欢
    • 2016-09-19
    • 2011-04-29
    • 2011-02-04
    • 2020-05-19
    • 2012-12-08
    • 2016-03-16
    • 2016-09-25
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多