高效的图像指纹识别方法(jpg,png等)是什么?

20

如何高效获取图像的指纹以进行重复检测?

也就是说,给定一个图像文件,比如jpg或png,我想快速计算一个值来标识图像内容,并且对于图像的其他方面(例如图像元数据)的更改具有相当强的弹性。如果它能处理调整大小,那就更好了。

[更新] 关于jpg文件中的元数据,是否有人知道它存储在文件的特定部分中吗?我正在寻找一种简单的方法来忽略它-例如,我可以跳过文件的前x个字节或取文件末尾的x个字节,以确保我没有获取元数据?


这将用于防止某种形式的图像洪水吗? - Aiden Bell
几个用途 - 在大型语料库中检测重复图像是基本用例,但也与使用图像相关的各种垃圾邮件搜索有关。 - Parand
1
是的...我敢打赌阅读我帖子中提到的那些书是值得的。不要走数据哈希的路线...那就像对文本电子邮件进行哈希以防止垃圾邮件!我们使用人工智能来处理垃圾邮件是有原因的 :) - Aiden Bell
8个回答

21

如果您想绕过元数据和大小相关问题,以下是一些可供参考的方法:

  1. 边缘检测和无关比例的比较
  2. 对灰度/RGB值进行采样和统计分析(平均亮度,平均颜色映射)
  3. 使用FFT和其他变换方法(参考文章:利用FFT进行指纹分类

基本上:

  1. 将JPG/PNG/GIF等图像转换为独立于编码的RGB字节数组
  2. 使用模糊的图案分类方法生成图像中的“图案哈希”...而不是一些人建议的RGB数组的哈希
  3. 然后您需要一种分布式的快速哈希比较方法,基于匹配阈值在封装的哈希或图案的编码上。这方面Erlang会很好 :)

优点是:

  1. 如果您使用任何AI/训练,则可以识别出无论编码、大小、长宽比和亮度、动态范围/子采样差异以及某些情况下的透视,都会出现重复项

缺点是:

  1. 编码可能会比较困难...像OpenCV这样的工具可能会有所帮助
  2. 概率性强...可能会出现误报,但可以通过神经网络和其他AI进行减少
  3. 速度较慢,除非您能够封装图案特征并分布式搜索(类似MapReduce)

请查阅有关图像分析的书籍,例如:

  1. 《模式分类》第2版
  2. 《图像处理基础》
  3. 《图像处理原理与应用》

还有其他书籍可供参考。

如果您要缩放图像,则事情就更简单了。如果不是,则必须面对缩放在多种方面上的信息损失问题。


4

将图像的字节大小用于比较适用于许多应用程序。另一种方法是:

  1. 剥离元数据。
  2. 计算图像的MD5(或其他适当的哈希算法)。
  3. 将其与潜在的重复图像的MD5(或其他哈希值)进行比较(前提是您也剥离了该图像的元数据)。

编码/重新编码/缩放/色调修改或者单个像素的修改都会使其无效。 - Aiden Bell
@Aiden Bell - 我认为我们在比较几乎相同的图像,除了元数据。 - karim79
如果你缩放、修改色调或改变单个像素,那么它就不再是同一张图片了... - Thomas Owens
@Aiden Bell @Thomas Owens - 我明白 :) 如果图像除元数据外的任何方面发生了变化,这显然是行不通的 - 但这就是我理解的问题。 - karim79
2
karim79:我完全同意你的观点。根据我对问题的了解,这是我会这样做的方式,尽管我也会考虑其他哈希算法(例如SHA-2系列)。 - Thomas Owens

3

1

您想要执行图像哈希。由于您没有指定特定的语言,我猜测您没有偏好。至少有一个Matlab工具箱(beta)可以完成此操作:http://users.ece.utexas.edu/~bevans/projects/hashing/toolbox/index.html。大多数谷歌搜索结果都是研究结果,而不是实际的库或工具。

使用MD5进行哈希的问题在于,MD5对输入中的小变化非常敏感,而且听起来您想做一些更“聪明”的事情。


0
相当有趣的问题。最快最简单的方法是计算内容字节数组的crc32,但这只适用于完全相同的图像。要进行更智能的比较,可能需要某种模糊逻辑分析...

0

我已经实现了至少一个简单版本。我将所有图像转换并调整大小为非常小的(固定大小)黑白缩略图。然后我进行比较。它可以检测到完全相同、调整大小和转换为黑白的重复项。它可以在不花费太多成本的情况下获取大量重复项。


更好的实现方式是对颜色/动态范围进行块平均。 - Aiden Bell

0

最简单的方法是对图像数据进行哈希(如MD5),忽略所有其他元数据。您可以找到许多开源库,可以解码常见的图像格式,因此很容易剥离元数据。

但是,当图像本身以任何方式进行操作时,包括缩放、旋转等,这种方法就不起作用了。

要实现您想要的精确效果,您必须使用图像水印技术,但它是受专利保护的,可能会很昂贵。


0
这只是一个想法:可能可以利用JPEG的DCT中存在的低频分量作为尺寸不变的标识符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接