让我们说我有一个庞大的SQL数据库索引图像文件和文件本身。某些文件可能会被索引两次或更多次,有些文件可能已损坏副本或与原始文件一起索引的更新版本。
通过计算文件的MD5哈希值可以轻松地检测确切的重复项,但是有一种类似的方法可用于检测近似重复项(具有强相似性而不是完全相同的文件),按顺序从数据库中删除它们?
要明确的是,我想不惜一切代价避免计算数据库中每个图像组合的欧几里德距离,这只需要很长时间。
答案 0 :(得分:1)
对于SQL中的搜索,最方便的方法是计算感知哈希并使用它来查找潜在重复项。为了获得更好的结果,您可以计算每个图像的感知哈希值的几种变体,并计算多少匹配(Jaccard距离)。
对于感知哈希,有专门的库。如果你想自己滚动,并且不需要检测被裁剪或旋转的变体,那么一个简单的方法是将所有图像的大小调整为32×32,最大化对比度,分色并散列生成的像素。
如果您不需要使用SQL,那么 可以快速查找仅基于图像对之间的欧几里德距离的重复项,即使您有数百万个 - 通过使用{{ 3}}。它大致是一个二进制树,在近端和远端之间划分节点,因此每次比较几乎将需要搜索的图像数量减半。