一尘不染

可以使用哪种算法来识别图像是“相同”还是相似(无论大小)?

algorithm

TinEye是“反向图像搜索引擎”,它允许您上载/链接到图像,并且可以搜索已爬过的十亿张图像,并且它将返回指向已找到的图像的链接。

但是,它不是幼稚的校验和或与此相关的任何东西。它通常能够找到比您提供的原始图像更高分辨率,更低分辨率以及更大或更小的尺寸的图像。这是该服务的很好用处,因为我经常找到一张图像,并希望获得尽可能高分辨率的版本。

不仅如此,我还找到了相同图像集的图像,其中图像中的人物处于不同的位置,但是背景在很大程度上保持不变。

TinEye可以使用哪种类型的算法,使其能够将图像与其他各种大小和压缩率的图像进行比较,而仍然准确地确定它们是“相同”图像或集合?


阅读 201

收藏
2020-07-28

共1个答案

一尘不染

这些算法通常基于指纹。指纹是一个相当小的数据结构,类似于长哈希码。但是,指纹函数的目标与哈希函数的目标相反。一个好的哈希函数应该为非常相似(但不相等)的对象生成完全不同的代码。相反,指纹功能应该为相似的图像生成相同的指纹。

仅举一个例子,这是一个(不是特别好)的指纹功能:将图片调整为32x32正方形,对颜色进行标准化和量化,将颜色数量减少到256之类。然后,您拥有1024字节的指纹为图像。只需保留一张指纹表=>
[图像URL列表]。当您需要查看与给定图像相似的图像时,只需计算其指纹值并找到相应的图像列表即可。简单。

并非易事-
要在实践中有用,指纹功能必须对作物,仿射变换,对比度变化等具有鲁棒性。构建良好的指纹功能是一个单独的研究主题。通常,它们是手动调整的,并且使用了很多启发式方法(即,使用有关典型照片内容,图像格式/
EXIF中其他数据的知识等)。

另一种变化是使用多个指纹功能,尝试应用每个指纹功能并组合结果。实际上,这类似于查找相似的文本。图像相似性搜索使用“指纹袋”代替“单词袋”,并查找一个袋中的元素与另一个袋中的元素相同。如何提高搜索效率是另一个主题。

现在,关于文章/论文。我找不到一篇很好的文章来概述不同的方法。我知道的大多数公开文章都讨论了对特定方法的特定改进。我可以建议检查以下内容:

“使用小波的内容指纹识别”。本文是关于使用小波的音频指纹识别,但是相同的方法可以适用于图像指纹识别。

置换分组:用于音频和图像检索的智能哈希函数设计。有关局部敏感哈希的信息。

大规模部分重复Web图像搜索的捆绑功能。一篇非常好的文章,讨论了SIFT和捆绑功能以提高效率。最后还有一个不错的书目

2020-07-28