什么algorithm可以用来识别图像是“相同”还是相似,不pipe大小?

TinEye ,“反向图像search引擎”,允许你上传/链接到一个图像,它能够search它爬过的亿图像,它会返回到它发现的图像是相同的图像的链接。

但是,这不是一个天真的校验和或任何有关的。 通常能够find比您提供的原始图像更高分辨率和更低分辨率以及更大和更小尺寸的图像。 这是一个很好的使用服务,因为我经常发现一个图像,并希望它的最高分辨率的版本。

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

TinEye可以使用什么types的algorithm来比较一个图像和其他不同大小和压缩比的图像,但是仍然准确地发现它们是“相同的”图像或集合?

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

只是举个例子,这是一个(不是特别好)的指纹function:将图片大小调整为32×32的方块,对颜色进行归一化和量化处理,将颜色数量减less到256。然后,你有1024字节的指纹为图像。 只需保留一个指纹表格=> [图像URL列表]。 当您需要查看与给定图像相似的图像时,只需计算其指纹值并find相应的图像列表即可。 简单。

不容易的是,在实践中有用的指纹function需要对作物,仿射变换,对比度变化等具有鲁棒性。build立良好的指纹函数是一个单独的研究课题。 他们经常手动调整,并使用大量的启发式(即使用关于典型照片内容的知识,关于图像格式/ EXIF中的额外数据等)

另一个变化是使用多个指纹函数,尝试应用每个指纹函数并合并结果。 其实,这和find类似的文字很相似。 而不是“字袋”,图像相似性search使用“指纹袋”,并且发现一个袋子中的多个元素与另一个袋子中的元素相同。 如何使这种search高效率是另一个话题。

现在,关于文章/论文。 我找不到一篇好的文章来概述不同的方法。 我所知道的大多数公共文章都讨论了具体方法的具体改进。 我可以推荐检查这些:

“使用小波的内容指纹识别” 。 这篇文章是关于使用小波的audio指纹识别,但同样的方法可以适应图像指纹识别。

sorting分组:智能哈希functionaudio和图像检索devise 。 关于局部敏感哈希的信息。

捆绑大规模部分重复Web图像searchfunction 。 一篇非常好的文章,谈论SIFT和捆绑function以提高效率。 最后还有一个很好的参考书目

这可能是基于特征提取algorithm的改进,利用尺度不变的特征。

看一眼

  • 特征提取

  • SIFT , 其他网站

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

  • 特征提取与image processing

FotoForensics网站的创build者在这个主题上发布了这个博客文章,这对我非常有用,并且展示了可能对您来说足够好的algorithm,并且比小波和特征提取需要更less的工作。

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

aHash (也称为平均哈希或平均哈希)。 该方法将图像压缩成灰度8×8图像,并根据像素的值是否大于图像的平均颜色来设置哈希中的64位。

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

dHash和aHash和pHash一样,dHash实现起来相当简单,而且比它有任何权利要准确得多。 作为一个实现,dHash与aHash几乎相同,但是性能要好得多。 虽然aHash侧重于平均值,pHash会评估频率模式,但dHash会跟踪渐变。

霍夫变换是一个非常古老的特征提取algorithm,你介意find有趣的。 我怀疑这是什么tinyeye使用,但这是一个很好的,简单的学习function提取的起点。

还有一些幻灯片,来自多伦多的一些大学的人们关于他们在astrometry.net工作的整洁的谈话 。 他们开发了一种将夜空的可伸缩图像与星表目录中的位置进行匹配的algorithm,以便识别图像中的特征。 这是一个比tinyeye试图解决的问题更具体的问题,但我期望他们谈论的很多基本思想都适用于更一般的问题。

http://tineye.com/faq#how

基于此, Igor Krivokon的答案似乎在标志上。

他们可能会做一个傅里叶变换来表征图像的复杂性,以及一个直方图来表征色度分布,配合区域分类algorithm,以确保类似的复杂和彩色图像不会错误配对。 不知道这是他们正在使用,但似乎这样做会伎俩。

看看这个博客文章 (不是我的)的一个非常容易理解的描述非常容易理解的algorithm,似乎得到很好的结果,它是多么简单。 它基本上将相应的图片分成一个非常粗糙的网格,用红色对网格进行sorting:蓝色和绿色:蓝色比率,并检查sorting是否相同。 这自然适用于彩色图像。

使用更先进的algorithm,专家可能会得到更好的结果。 正如在博客的评论中提到的,一个主要的方法似乎是小波。

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