TinEye,“反向图片搜索引擎”,允许您上传/链接到图片,它能够搜索它已抓取的十亿个图像,它将返回指向已找到的图像的链接是相同的形象。
然而,这不是一个天真的校验和或与此相关的任何事情。它通常能够找到比您提供的原始图像更高分辨率和更低分辨率以及更大和更小尺寸的图像。这是一个很好的服务用途,因为我经常找到一个图像,并希望它的最高分辨率版本。
不仅如此,我已经找到了相同图像集的图像,图像中的人处于不同的位置,但背景基本保持不变。
TinEye可以使用什么类型的算法,以便将图像与各种大小和压缩比的图像进行比较,但仍能准确地判断出它们是“相同”的图像还是设置?
答案 0 :(得分:38)
这些算法通常是基于指纹的。指纹是一种相当小的数据结构,类似于长哈希码。但是,指纹功能的目标与哈希函数的目标相反。一个好的哈希函数应该为非常相似(但不相等)的对象生成非常不同的代码。相反,指纹功能应该为类似图像生成相同的指纹。
举个例子,这是一个(不是特别好)的指纹功能:将图片大小调整为32x32平方,对颜色进行标准化和量化,将颜色数量减少到256个。然后,你有1024个图像的字节指纹。只需保留一张指纹表=> [图片网址列表]。当您需要查看与给定图像类似的图像时,只需计算其指纹值并找到相应的图像列表。容易。
有什么不容易 - 在实践中有用,指纹功能需要对作物,仿射变换,对比度变化等具有强大的功能。良好指纹功能的构建是一个单独的研究课题。通常他们是手动调整并使用大量的启发式(即使用关于典型照片内容的知识,关于EXIF中的图像格式/附加数据等)。
另一种变体是使用多个指纹功能,尝试应用每个指纹功能并组合结果。实际上,它类似于找到类似的文本。图像相似性搜索使用“指纹袋”代替“文字袋”,并且发现一个袋子中的多少元素与另一个袋子中的元素相同。如何提高搜索效率是另一个话题。
现在,关于文章/论文。我找不到一篇能够概述不同方法的好文章。我所知道的大多数公开文章都讨论了具体方法的具体改进。我可以建议检查这些:
"Content Fingerprinting Using Wavelets"。本文是关于使用小波的音频指纹识别,但同样的方法可以适用于图像指纹识别。
PERMUTATION GROUPING: INTELLIGENT HASH FUNCTION DESIGN FOR AUDIO & IMAGE RETRIEVAL。关于地方敏感哈希的信息。
Bundling Features for Large Scale Partial-Duplicate Web Image Search。一篇非常好的文章,讨论了SIFT和捆绑功能以提高效率。它最后还有一个很好的参考书目
答案 1 :(得分:8)
它可能基于特征提取算法的改进,利用了规模不变的特征。
看看
或者,如果您真的感兴趣,可以支付约70美元(或至少查看Google预览版)
答案 2 :(得分:7)
FotoForensics网站的创建者发布了关于此主题的博客文章,它对我非常有用,并且显示的算法可能对您来说足够好,并且需要比小波和特征提取少得多的工作。
http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html
aHash (也称为平均哈希值或平均哈希值)。这种方法将图像压缩为灰度8x8图像并设置64位 哈希基于像素的值是否大于 图像的平均颜色。
pHash (也称为“Perceptive Hash”)。该算法类似于aHash,但使用离散余弦变换(DCT)并基于比较 在频率而不是颜色值上。
dHash 与aHash和pHash一样,dHash实现起来非常简单,并且比任何权利都要准确得多。作为一个 实现,dHash几乎与aHash相同,但它执行 好多了。虽然aHash专注于平均值和pHash评估 频率模式,dHash跟踪渐变。
答案 3 :(得分:4)
The Hough Transform是一种非常古老的特征提取算法,您会发现它很有趣。我怀疑它是tinyeye使用的,但它是学习特征提取的一个好的,简单的起点。
多伦多大学的一些人还有slides to a neat talk关于他们在astrometry.net的工作。他们开发了一种算法,用于将夜空的伸缩图像与星形目录中的位置相匹配,以识别图像中的特征。这是一个比tinyeye试图解决的更具体的问题,但我希望他们谈论的很多基本想法都适用于更普遍的问题。
答案 4 :(得分:4)
基于此,Igor Krivokon's answer似乎已经出现了。
答案 5 :(得分:1)
他们可能正在进行傅立叶变换来表征图像的复杂性,以及用于表征色度分布的直方图,与区域分类算法配对,以确保类似的复杂和彩色图像不会错误地配对。不知道这是不是他们正在使用的东西,但似乎可以做到这一点。
答案 6 :(得分:1)
查看this blog post(不是我的)有一个非常容易理解的算法,这个算法似乎可以很简单地得到很好的结果。它基本上将相应的图片划分为非常粗糙的网格,按红色:蓝色和绿色:蓝色比例对网格进行排序,并检查排序是否相同。这自然只适用于彩色图像。
使用更高级的算法,专业人士最有可能获得更好的结果。正如该博客评论中所提到的,一种领先的方法似乎是小波。
答案 7 :(得分:0)
如何将图片大小调整为标准小尺寸并检查SSIM或仅限亮度的PSNR值?这就是我要做的。