用于在数据库中查找相似图像的指标
Posted
技术标签:
【中文标题】用于在数据库中查找相似图像的指标【英文标题】:Metric for finding similar images in a database 【发布时间】:2012-05-03 13:28:15 【问题描述】:有很多不同的算法可以计算两张图像之间的相似度,但我找不到任何关于如何将这些信息存储在数据库中以便快速找到相似图像的信息。
“相似”是指经过旋转(90 度增量)、颜色调整和/或重新保存(有损 jpeg 压缩)的完全相同的副本。
我正在尝试为图像提供“fingerprint”,以便我可以快速查找它们。
到目前为止我想到的最好的方法是generate a grayscale histogram。使用 16 个 bin 和 256 种灰度,我可以轻松创建一个 16 字节的指纹。这工作得相当好,但它没有我想要的那么健壮。
我尝试的另一个解决方案是调整图像大小,rotate them,使它们都以相同的方式定向,对它们进行灰度化,标准化直方图,然后将它们缩小到大约 8x8,并将颜色减少到 16 种色调灰色的。虽然微缩图像非常相似,但它们通常相差一两个像素,这意味着精确匹配无法正常工作。
如果没有精确匹配,我认为没有任何有效的方法可以对相似照片进行分组(无需将每张照片与其他每张照片进行比较,即 O(n^2))。
那么,(1) 我如何创建一个不符合上述要求的指纹/签名?或者,(2)如果这不可能,我可以使用什么其他指标,以便给定一个 single 图像,我可以在数千个数据库中找到它的最佳匹配?
【问题讨论】:
您需要线性哈希(因为您的数据库只支持 btree 索引吗?)还是可以使用 GiST 兼容的解决方案? (见:postgresql.org/docs/9.1/static/gist.html) @TokenMacGuy:我还没有确定任何事情。我更喜欢使用 EntityFramework ,我相信这限制了我:msdn.microsoft.com/en-us/data/dd363565 在动漫漫画社区中,实际上有一个解决方案可以让您以百分比形式接近图像。 saucenao.com 和 iqdb 项目 iqdb.org 使用它。你也许可以问他们。不过他们使用的是 CUSTOM 数据库! 嗨,我也遇到了同样的问题。你找到解决办法了吗?如果没有,您能告诉我生成灰度直方图的完整代码吗? @Leon:不,我还没有找到解决方案。我使用 OpenCV 和 C# 绑定来制作灰度直方图。 【参考方案1】:您的问题中有一点令人困惑:您链接到的“指纹”明确不是用于查找相似图像(引用):
TinEye 通常不会找到相似的图像(即具有相同主题的不同图像);它会找到完全匹配的内容,包括那些被裁剪、编辑或调整大小的内容。
现在,也就是说,我只是假设您知道自己在问什么,并且您实际上希望能够找到所有相似的图像,而不仅仅是经过编辑的精确副本。
如果您想尝试详细了解它,我建议您查找Sivic, Zisserman 和Nister, Stewenius 的论文。这两篇论文(以及最近的许多其他论文)一直在使用的想法是尝试将文本搜索技术应用于图像数据库,并以与谷歌搜索其文档(网页) 数据库。
我链接到的first 论文是这种方法的一个很好的起点,因为它主要解决了一个大问题:图像中的“单词”是什么?。文本搜索技术都专注于单词,并将其相似性度量基于包括单词计数在内的计算。因此,将图像成功表示为 视觉词 的集合是将文本搜索技术应用于图像数据库的第一步。
second 论文随后扩展了使用文本技术的想法,提出了更合适的搜索结构。有了这个,它们允许更快的图像检索和更大的图像数据库。他们还提出了如何基于底层搜索结构构建图像描述符。
两篇论文中用作视觉词的特征应该满足您的不变性约束,而第二篇论文绝对应该能够适应您所需的数据库大小(甚至第一篇论文中的方法也可以工作)。
最后,我建议查找来自同一作者的新论文(我很肯定 Nister 做了一些新的事情,只是链接论文中的方法对我来说已经足够了),查找他们的一些参考文献和只是一般地搜索有关基于内容的图像(索引和)检索(CBIR)的论文——它现在是一个非常流行的主题,所以应该有很多。
【讨论】:
如果您阅读我的第二段,我会说同样的事情(如 TinEye)。这正是我所说的“相似”的意思(与相同的相反,这意味着 不 裁剪、编辑、调整大小,更不用说“相同的主题”)。这里的 TinEye 有点模棱两可,因为它们也不是“精确”匹配;这就是为什么我没有选择这个词并选择详细说明的原因。 另外,我不想要基于文本的搜索。至少目前不是。稍后我得看看那些论文,看看我能不能找到任何相关的东西,但从你所说的来看,这听起来不像我想要的。 @Mark 为什么你会因为在不同领域使用类似的方法而厌恶一种方法,如果它适合你的问题?如果该程序给出的结果不是您需要的类型,那么我理解,但是如果该程序的输入是您正在使用的结果(图像,非常大的 img 数据库)并且输出是所需的结果(即部分供您考虑)而不是我不明白为什么不信任与 CBIR 打交道并尝试其方式的领先计算机视觉专家。 我并不反对它,我当然会研究您所说的更多内容,但在我看来,基于文本的搜索和基于图像的搜索是两个截然不同的东西。在我深入研究之前,我不确定这是否相关。 @Mark 你绝对应该更多地研究它——这两部作品背后的主要思想都来自文本文档搜索,但经过专门调整和重新定制以适应新的背景,即图像检索。我从来没有在文本方面做过很多工作,但我每天都在使用计算机视觉和图像处理,这种对其他领域已知技术的重新应用最近非常流行和成功以上是关于用于在数据库中查找相似图像的指标的主要内容,如果未能解决你的问题,请参考以下文章