【发布时间】:2021-03-09 23:01:59
【问题描述】:
我检查了诸如 Phasher 之类的方法来获取相似的图像。基本上是将图像大小调整为 8x8 灰度,获取平均像素并创建每个像素的二进制哈希,比较它是否高于或低于平均像素。
这个方法在这里解释得很好: http://hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
示例工作: - 桌子上电脑的图像 1 - 图 2,相同,但有一枚硬币
这会起作用,因为使用非常缩小的灰度图像的散列,它们两者几乎相同,甚至相同。因此,当 90% 以上的像素相同(在同一个地方!)时,您可以得出结论它们是相似的。
我的问题是从相同的角度但不同的角度拍摄的图像,例如这些:
在这种情况下,生成的哈希“指纹”相互偏移,我们无法逐位比较哈希,它会非常不同。
像素是“相似的”,但它们不在同一个地方,因为在这种情况下天空更多,房屋“开始”比第一个更下方。
所以哈希比较的结果是“它们是不同的图像”。
可能的解决方案:
我正在考虑为第一个图像创建一个更大的散列,然后为第二个图像获取 10 个随机“子散列”,并尝试查看这 10 个子散列是否位于第一个图像的“某个地方”大哈希(如果子字符串包含在另一个更大的字符串中)。
我认为这里的问题是处理数千张图像时的 CPU/时间,因为您必须将 1 张图像与 1000 张图像进行比较,并且在每张图像中,将 10 个子哈希与一个大哈希进行比较。
其他解决方案? ;-)
【问题讨论】:
-
我知道已经 3 年了,但您有没有找到一个好的解决方案?
标签: image hash comparison phash