是否有一种有效的方法来获取图像的指纹以进行重复检测?
也就是说,给定一个图像文件,例如jpg或png,我希望能够快速计算识别图像内容的值,并且对图像的其他方面具有相当的弹性(例如图像元数据) )改变。如果它涉及调整大小甚至更好。
[更新]关于jpg文件中的元数据,有谁知道它是否存储在文件的特定部分?我正在寻找一种忽略它的简单方法 - 例如。我可以跳过文件的前x个字节,或者从文件末尾取x个字节以确保我没有获得元数据吗?
答案 0 :(得分:21)
如果你想要绕过元数据和大小相关的东西,那就在黑暗中刺伤:
还有很多其他人。
基本上:
优点是:
缺点:
结帐图像分析书籍如:
和其他人
如果要缩放图像,则事情会更简单。如果没有,那么你必须应对这样一个事实:缩放比样本减少更多地是有损的。
答案 1 :(得分:4)
使用图像的字节大小进行比较将适用于许多应用程序。另一种方式是:
答案 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中可能存在的低频成分可以用作尺寸不变的标识符。