TinEye http://tineye.com/,“反向图像搜索引擎”,允许您上传/链接到图像,它能够搜索它已抓取的十亿张图像,并将返回到它发现的相同图像的图像的链接。
然而,它不是一个幼稚的校验和或与之相关的任何东西。它通常能够找到比您提供的原始图像更高分辨率和更低分辨率以及更大和更小的尺寸的图像。这是该服务的一个很好的用途,因为我经常找到图像并想要它的最高分辨率版本。
不仅如此,我还让它找到同一图像集的图像,其中图像中的人处于不同的位置,但背景基本上保持不变。
什么类型的算法可以TinEye http://tineye.com/使用它可以将图像与不同尺寸和压缩比的其他图像进行比较,但仍然准确地确定它们是“相同”图像或集合?
这些算法通常是基于指纹的。指纹是一种相当小的数据结构,类似于长哈希码。然而,指纹函数的目标与哈希函数的目标相反。一个好的哈希函数应该为非常相似(但不相等)的对象生成非常不同的代码。相反,指纹功能应该为相似的图像生成相同的指纹。
举个例子,这是一个(不是特别好的)指纹功能:将图片大小调整为 32x32 正方形,对颜色进行标准化和量化,将颜色数量减少到 256 种左右。然后,你就有了 1024 字节的指纹对于图像。只需保留一个指纹表 => [图像 URL 列表]。当您需要查找与给定图像相似的图像时,只需计算其指纹值并找到相应的图像列表即可。简单的。
不容易的是——为了在实践中有用,指纹函数需要对裁剪、仿射变换、对比度变化等具有鲁棒性。构建良好的指纹函数是一个单独的研究课题。它们通常是手动调整的,并使用大量启发式方法(即使用有关典型照片内容、图像格式/EXIF 中的附加数据等的知识)
另一种变化是使用多个指纹函数,尝试应用每个函数并组合结果。实际上,这类似于查找相似文本。只是代替“词袋”,图像相似性搜索使用“指纹袋”并查找一个袋子中有多少元素与另一袋子中的元素相同。如何使这种搜索高效是另一个话题。
现在,关于文章/论文。我找不到一篇好文章来概述不同的方法。我所知道的大部分公开文章都是讨论针对具体方法的具体改进。我可以建议检查这些:
“使用小波进行内容指纹识别” http://www.mangolassi.org/covell/pubs/cvmp_BalujaCovell.A4color.pdf。本文介绍的是使用小波的音频指纹识别,但相同的方法也适用于图像指纹识别。
排列分组:
用于音频和图像检索的智能哈希函数设计 http://www.esprockets.com/papers/balujaCovellIoffe.pdf。有关局部敏感哈希的信息。
用于大规模部分重复网络图像搜索的捆绑功能 http://research.microsoft.com/pubs/80803/CVPR_2009_bundle.pdf。一篇非常好的文章,讨论了 SIFT 和捆绑功能以提高效率。最后还有一个很好的参考书目
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)