40

TinEye,“反向图片搜索引擎”,允许你上传/链接到一个图片,它能够搜索它已经抓取的十亿张图片,它会返回它找到的相同图片的链接。

但是,它不是一个简单的校验和或与之相关的任何东西。它通常能够找到比您提供的原始图像更高分辨率和更低分辨率以及更大和更小的尺寸的图像。这是该服务的一个很好的用途,因为我经常找到一张图像并想要它的最高分辨率版本。

不仅如此,我还让它找到了相同图像集的图像,其中图像中的人处于不同的位置,但背景基本保持不变。

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

4

8 回答 8

40

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

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

不容易——要在实践中有用,指纹函数需要对裁剪、仿射变换、对比度变化等具有鲁棒性。构建良好的指纹函数是一个单独的研究课题。很多时候,它们是手动调整的并使用大量启发式方法(即使用有关典型照片内容、图像格式/EXIF 中的附加数据等的知识)

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

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

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

排列分组:音频和图像检索的智能哈希函数设计。有关位置敏感哈希的信息。

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

于 2009-06-17T05:01:19.547 回答
13

FotoForensics 网站的创建者在此主题上发布了这篇博文,它对我非常有用,并展示了可能对您来说足够好的算法,并且比小波和特征提取需要更少的工作。

http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html

aHash(也称为平均哈希或平均哈希)。这种方法将图像粉碎成灰度 8x8 图像,并根据像素值是否大于图像的平均颜色来设置散列中的 64 位。

pHash(也称为“感知哈希”)。该算法类似于 aHash,但使用离散余弦变换 (DCT) 并基于频率而不是颜色值进行比较。

dHash与 aHash 和 pHash 一样,dHash 实现起来非常简单,而且比它有任何权利要准确得多。作为一种实现,dHash 与 aHash 几乎相同,但性能要好得多。aHash 专注于平均值,pHash 评估频率模式,而 dHash 跟踪梯度。

于 2013-02-06T08:11:01.610 回答
7

它可能基于对特征提取算法的改进,利用了尺度不变的特征。

看一眼

或者,如果你真的很感兴趣,你可以花大约 70 美元(或者至少看看谷歌预览)

于 2009-06-17T04:40:20.887 回答
4

http://tineye.com/faq#how

基于此,Igor Krivokon 的回答似乎是对的。

于 2009-06-17T12:45:20.203 回答
3

Hough 变换是一种非常古老的特征提取算法,你会觉得它很有趣。我怀疑这是 tinyeye 使用的东西,但它是学习特征提取的一个很好、简单的起点。

还有一些来自多伦多大学的人在astrometry.net上关于他们工作的精彩演讲的幻灯片。他们开发了一种算法,用于将夜空的伸缩图像与星表中的位置进行匹配,以识别图像中的特征。这是一个比 tinyeye 试图解决的更具体的问题,但我希望他们谈论的许多基本思想都适用于更普遍的问题。

于 2009-06-17T06:17:10.493 回答
0

查看这篇博文(不是我的),对一个非常容易理解的算法进行非常容易理解的描述,该算法的简单性似乎得到了很好的结果。它基本上将各个图片划分为一个非常粗略的网格,按红蓝绿蓝比例对网格进行排序,并检查排序是否相同。这自然只适用于彩色图像。

专业人士最有可能使用更先进的算法获得更好的结果。正如该博客的评论中所提到的,一种主要的方法似乎是小波。

于 2009-06-17T05:10:41.483 回答
-1

他们很可能正在做一个傅里叶变换来表征图像的复杂性,以及一个直方图来表征色度分布,并与区域分类算法配对以确保相似的复杂和彩色图像不会被错误地配对。不知道这是否是他们正在使用的东西,但似乎这样可以解决问题。

于 2009-06-17T04:32:15.540 回答
-1

如何将图片调整为标准的小尺寸并检查 SSIM 或仅亮度 PSNR 值?这就是我要做的。

于 2009-06-17T06:31:40.097 回答