有没有一种有效的方法来获取图像指纹以进行重复检测?
也就是说,给定一个图像文件,比如 jpg 或 png,我希望能够快速计算一个值,该值标识图像内容并且对图像的其他方面(例如图像元数据)变化具有相当的弹性。如果它处理调整大小,那就更好了。
[更新] 关于 jpg 文件中的元数据,有人知道它是否存储在文件的特定部分吗?我正在寻找一种简单的方法来忽略它 - 例如。我可以跳过文件的前 x 个字节或从文件末尾获取 x 个字节以确保我没有获取元数据吗?
有没有一种有效的方法来获取图像指纹以进行重复检测?
也就是说,给定一个图像文件,比如 jpg 或 png,我希望能够快速计算一个值,该值标识图像内容并且对图像的其他方面(例如图像元数据)变化具有相当的弹性。如果它处理调整大小,那就更好了。
[更新] 关于 jpg 文件中的元数据,有人知道它是否存储在文件的特定部分吗?我正在寻找一种简单的方法来忽略它 - 例如。我可以跳过文件的前 x 个字节或从文件末尾获取 x 个字节以确保我没有获取元数据吗?
如果您想规避元数据和大小相关的事情,请在黑暗中刺伤:
还有许多其他人。
基本上:
优点是:
缺点:
查看图像分析书籍,例如:
和别的
如果您正在缩放图像,那么事情就更简单了。如果不是,那么您必须面对这样一个事实,即缩放比样本减少在更多方面是有损的。
使用图像的字节大小进行比较将适用于许多应用程序。另一种方法是:
您可以使用像 SIFT(尺度不变特征变换)这样的算法来确定图片中的关键点并进行匹配。
见http://en.wikipedia.org/wiki/Scale-invariant_feature_transform
它用于例如在全景图中拼接图像以检测不同图像中的匹配点。
您想要执行图像哈希。由于您没有指定特定的语言,我猜您没有偏好。至少有一个 Matlab 工具箱(测试版)可以做到这一点:http ://users.ece.utexas.edu/~bevans/projects/hashing/toolbox/index.html 。大多数谷歌结果都是研究结果,而不是实际的库或工具。
MD5ing 的问题在于 MD5 对输入的微小变化非常敏感,听起来你想做一些“更聪明”的事情。
很有趣的问题。最快和最简单的方法是计算内容字节数组的 crc32,但这仅适用于 100% 相同的图像。为了更智能的比较,您可能需要某种模糊逻辑分析......
我已经实现了至少一个简单的版本。我将所有图像转换并调整为非常小的(固定大小)黑白缩略图。然后我比较这些。它检测精确、调整大小和转换为黑白的副本。它可以在没有大量成本的情况下获得大量重复。
最简单的做法是对图像数据进行散列(如 MD5),忽略所有其他元数据。您可以找到许多可以解码常见图像格式的开源库,因此很容易剥离元数据。
但是,当图像本身被以任何方式操纵时,包括缩放、旋转,这不起作用。
要完全按照您的意愿行事,您必须使用图像水印,但它已获得专利并且可能很昂贵。
这只是一个想法:jpeg 的 DCT 中可能存在的低频分量可以用作大小不变的标识符。