首页 > 解决方案 > 以最快的方式查找重复图像

问题描述

我有 2 个包含 10k 和 35k 图像的图像文件夹。每个图像的大小约为(2k,2k)。
我想删除完全重复的图像。
不同图像的变化只是某些像素的变化。
我尝试过 DHashing、PHashing、AHashing,但由于它们是有损图像散列技术,因此它们也为非重复图像提供相同的散列。
我还尝试在 python 中编写代码,它只会减去图像,并且结果数组在任何地方都不为零的组合使这些图像对彼此重复。但是单个组合的时间是 0.29 秒,总共 3.5 亿个组合的时间真的很长。
有没有办法在不标记非重复图像的情况下以更快的方式做到这一点。我愿意用任何语言(C、C++)、任何方法(分布式计算、多线程)来准确解决我的问题。
如果我添加了一些不相关的方法,我深表歉意,因为我不是来自计算机科学背景。
下面是我用于 python 方法的代码 -

start = timeit.default_timer()
dict = {}
for i in path1:
    img1 = io.imread(i)
    base1 = os.path.basename(i)
    for j in path2:
        img2 = io.imread(j)
        base2 = os.path.basename(j)
        if np.array_equal(img1, img2):
            err  = img1.astype('float') - img2.astype('float')
            is_all_zero = np.all((err == 0))
            if is_all_zero:
                dict[base1] = base2
            else:
                continue
stop = timeit.default_timer()
print('Time: ', stop - start)  

标签: pythonc++multithreadingimage-processing

解决方案


您应该找到有关如何删除重复文件(不仅是图像)的答案。然后您可以使用,例如,fdupes或找到一些替代软件:https ://alternativeto.net/software/fdupes/


推荐阅读