指纹图像的有效方法(jpg,png等)?

时间:2009-08-11 17:01:23

标签: png jpeg fingerprint

是否有一种有效的方法来获取图像的指纹以进行重复检测?

也就是说,给定一个图像文件,例如jpg或png,我希望能够快速计算识别图像内容的值,并且对图像的其他方面具有相当的弹性(例如图像元数据) )改变。如果它涉及调整大小甚至更好。

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

9 个答案:

答案 0 :(得分:21)

如果你想要绕过元数据和大小相关的东西,那就在黑暗中刺伤:

  1. 边缘检测和与比例无关的比较
  2. 灰度/ RGB值的采样和统计分析(平均值lum,平均色彩图)
  3. FFT和其他变换(好文章Classification of Fingerprints using FFT
  4. 还有很多其他人。

    基本上:

    1. 将JPG / PNG / GIF转换为独立于编码的RGB字节数组
    2. 使用模糊模式分类方法在图像中生成“模式的散列”...而不是像某些建议那样的RGB数组的散列
    3. 然后,您需要一种基于封装散列的匹配阈值或模式编码的快速散列比较的分布式方法。 Erlang对此有好处:))
    4. 优点是:

      1. 如果您使用任何AI /培训,无论编码,大小,方面,色调和亮度修改,动态范围/子采样差异以及在某些情况下的透视,都会发现重复
      2. 缺点:

        1. 可能难以编码.. OpenCV之类的内容可能有帮助
        2. 概率......误报很可能,但可以通过神经网络和其他AI来减少
        3. 慢,除非您可以封装图案质量并分发搜索(MapReduce样式)
        4. 结帐图像分析书籍如:

          1. 模式分类2ed
          2. 图像处理基础
          3. 图像处理 - 原理和应用
          4. 和其他人

            如果要缩放图像,则事情会更简单。如果没有,那么你必须应对这样一个事实:缩放比样本减少更多地是有损的。

答案 1 :(得分:4)

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

  1. 删除元数据。
  2. 计算MD5(或其他合适的散列算法) 图像。
  3. 将其与潜在欺骗的MD5(或其他)进行比较 图像(如果你已经剥离了 该元数据也是如此)

答案 2 :(得分:3)

Robust Image Hashing上查看此论文。

答案 3 :(得分:3)

你可以使用像SIFT(尺度不变特征变换)这样的算法来确定图片中的关键点并匹配它们。

请参阅http://en.wikipedia.org/wiki/Scale-invariant_feature_transform

用于例如当拼接全景图像时,检测不同图像中的匹配点。

答案 4 :(得分:1)

您想要执行图像哈希。由于您没有指定特定语言,我猜您没有偏好。至少有一个Matlab工具箱(beta)可以做到:http://users.ece.utexas.edu/~bevans/projects/hashing/toolbox/index.html。谷歌的大部分结果都是研究结果,而不是实际的图书馆或工具。

MD5的问题在于MD5对输入的微小变化非常敏感,听起来你想做一些“更聪明”的事情。

答案 5 :(得分:0)

非常有趣的问题。最快和最简单的是计算内容字节数组的crc32,但这只适用于100%相同的图像。为了更智能地比较,您可能需要某种模糊的逻辑分析...

答案 6 :(得分:0)

我已经实现了至少一个简单的版本。我将所有图像转换并调整为非常小(固定大小)的黑白缩略图。然后我比较那些。它可以检测转换为黑白的精确,重新调整大小和重复的内容。它得到了很多重复,没有太多的成本。

答案 7 :(得分:0)

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

但是当图像本身被操纵时,包括缩放,旋转,这都不起作用。

要完全按照您的意愿行事,您必须使用图像水印,但它已获得专利并且价格昂贵。

答案 8 :(得分:0)

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