可以使用什么算法来识别图像是“相同的”还是相似的,而不管大小如何?
computer-vision
image-processing
5
0

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

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

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

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

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

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

看一眼

或者,如果您真的很感兴趣,则可以花70美元(或至少看看Google预览版)

收藏
评论

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跟踪梯度。

收藏
评论
收藏
评论

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

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

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

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

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

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

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

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

收藏
评论

霍夫变换是一种非常古老的特征提取算法,您会发现它很有趣。我怀疑这是tinyeye所使用的东西,但这是学习特征提取的一个好而简单的起点。

还有幻灯片整齐的谈话从加拿大多伦多大学的一些关于他们的工作乡亲astrometry.net 。他们开发了一种算法,用于将夜空的伸缩图像与星空目录中的位置进行匹配,以识别图像中的特征。这是比tinyeye尝试解决的问题更具体的问题,但是我希望他们谈论的许多基本思想都适用于更一般的问题。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号