【问题标题】:Compute similarity between images using a hash to detect near-duplicates使用哈希计算图像之间的相似度以检测近似重复
【发布时间】:2018-02-05 14:25:24
【问题描述】:
假设我有一个庞大的 SQL 数据库索引图像文件和文件本身。有些文件可能会被索引两次或更多次,有些文件可能有损坏的副本或与原始文件一起索引的更新版本。
通过计算文件的 MD5 哈希可以轻松检测完全重复,但是否有类似的方法可用于检测近似重复(具有很强的相似性但不是完全相同的文件),以便从数据库中删除它们?
需要明确的是,我想不惜一切代价避免为数据库中的每个图像组合计算欧几里得距离之类的事情,这需要很长时间。
【问题讨论】:
标签:
image-processing
hash
【解决方案1】:
对于 SQL 中的搜索,最方便的方法是计算一个感知散列并使用它来查找 潜在 个重复项。为了获得更好的结果,您可以计算每张图像的感知散列的几种变体,并计算有多少匹配(Jaccard 距离)。
对于感知散列,有专门的库。如果您想自己滚动,并且不需要检测被裁剪或旋转的变体,那么一种简单的方法是将所有图像调整为 32×32、最大化对比度、分离和散列结果像素。
如果您不需要使用 SQL,那么 可以通过使用 @987654321 仅基于图像对之间的欧几里德距离快速查找重复项,即使您有数百万个图像@。它大致是一棵二叉树,将节点划分为近节点和远节点,因此每次比较几乎都会使您需要搜索的图像数量减半。