如何高效获取图像的指纹以进行重复检测?
也就是说,给定一个图像文件,比如jpg或png,我想快速计算一个值来标识图像内容,并且对于图像的其他方面(例如图像元数据)的更改具有相当强的弹性。如果它能处理调整大小,那就更好了。
[更新] 关于jpg文件中的元数据,是否有人知道它存储在文件的特定部分中吗?我正在寻找一种简单的方法来忽略它-例如,我可以跳过文件的前x个字节或取文件末尾的x个字节,以确保我没有获取元数据?
如何高效获取图像的指纹以进行重复检测?
也就是说,给定一个图像文件,比如jpg或png,我想快速计算一个值来标识图像内容,并且对于图像的其他方面(例如图像元数据)的更改具有相当强的弹性。如果它能处理调整大小,那就更好了。
[更新] 关于jpg文件中的元数据,是否有人知道它存储在文件的特定部分中吗?我正在寻找一种简单的方法来忽略它-例如,我可以跳过文件的前x个字节或取文件末尾的x个字节,以确保我没有获取元数据?
如果您想绕过元数据和大小相关问题,以下是一些可供参考的方法:
基本上:
优点是:
缺点是:
请查阅有关图像分析的书籍,例如:
还有其他书籍可供参考。
如果您要缩放图像,则事情就更简单了。如果不是,则必须面对缩放在多种方面上的信息损失问题。
将图像的字节大小用于比较适用于许多应用程序。另一种方法是:
您想要执行图像哈希。由于您没有指定特定的语言,我猜测您没有偏好。至少有一个Matlab工具箱(beta)可以完成此操作:http://users.ece.utexas.edu/~bevans/projects/hashing/toolbox/index.html。大多数谷歌搜索结果都是研究结果,而不是实际的库或工具。
使用MD5进行哈希的问题在于,MD5对输入中的小变化非常敏感,而且听起来您想做一些更“聪明”的事情。
我已经实现了至少一个简单版本。我将所有图像转换并调整大小为非常小的(固定大小)黑白缩略图。然后我进行比较。它可以检测到完全相同、调整大小和转换为黑白的重复项。它可以在不花费太多成本的情况下获取大量重复项。
最简单的方法是对图像数据进行哈希(如MD5),忽略所有其他元数据。您可以找到许多开源库,可以解码常见的图像格式,因此很容易剥离元数据。
但是,当图像本身以任何方式进行操作时,包括缩放、旋转等,这种方法就不起作用了。
要实现您想要的精确效果,您必须使用图像水印技术,但它是受专利保护的,可能会很昂贵。