有很多不同的算法用于计算两个图像之间的相似性,但我找不到任何关于如何将这些信息存储在数据库中的信息,以便您可以快速找到类似的图像。
“类似”是指已经旋转(90度增量),颜色调整和/或重新保存(有损jpeg压缩)的完全重复。
我正在努力想出一个“fingerprint”的图片,以便我可以快速查找它们。
到目前为止,我提出的最好的是generate a grayscale histogram。使用16个箱和256个灰色阴影,我可以轻松创建一个16字节的指纹。这种方法运行得相当不错,但它并不像我想的那么强大。
我尝试的另一个解决方案是调整图像大小rotate them,使它们都以相同的方式定向,对它们进行灰度化,对直方图进行标准化,然后将它们缩小到大约8x8,并将颜色减少到16灰色阴影。尽管微缩图像非常相似,但它们通常偏离一两个像素,这意味着精确匹配不起作用。
如果没有精确匹配,我不相信有任何有效的方法可以对相似的照片进行分组(不将每张照片与其他所有照片进行比较,即O(n ^ 2))。
那么,(1)我如何创建我创建一个与上述要求不变的指纹/签名?或者,(2)如果不可能,我可以使用哪个其他指标,以便给定单个图像,我可以在数千个数据库中找到它的最佳匹配?
答案 0 :(得分:4)
你的问题中有一个令人困惑的事情:你链接到的“指纹”明确地不意味着找到类似的图像(引用):
TinEye通常不会找到相似的图像(即具有相同主题的不同图像);它会找到完全匹配,包括已经裁剪,编辑或调整大小的匹配。
现在,那就是说,我只是假设你知道你在问什么,并且你真的希望能够找到所有类似的图像,而不仅仅是编辑精确的副本。
如果您想尝试详细介绍,我建议您按Sivic, Zisserman和Nister, Stewenius查找论文。这两篇论文(以及最近的其他一些论文)一直在使用的想法是尝试将文本搜索技术应用于图像数据库,并以与Google搜索文档相同的方式搜索图像数据库(网页) )数据库。
我链接到的first论文是这种方法的一个很好的起点,因为它主要解决了一个大问题:图像中的“单词”是什么? 。文本搜索技术都集中在单词上,并将它们的相似性度量基于包括单词计数在内的计算。因此,成功将图像表示为视觉词语的集合是将文本搜索技术应用于图像数据库的第一步。
然后,second论文扩展了使用文本技术的想法,提出了更合适的搜索结构。通过这种方式,它们可以实现更快的图像检索和更大的图像数据库。他们还提出了如何基于底层搜索结构构建图像描述符。在两篇论文中用作视觉词的特征应该满足你的不变性约束,第二个肯定应该能够使用你所需的数据库大小(甚至第一篇论文中的方法也可以工作)。
最后,我建议查找同一作者的新论文(我很肯定Nister做了一些新的东西,只是链接论文的方法对我来说已经足够了),查看他们的一些参考文献和只是一般地搜索有关基于内容的图像(索引和)检索(CBIR)的论文 - 它现在是一个非常受欢迎的主题,所以应该有很多。