Python 以最快的方式查找重复图像
我有2个包含10k和35k图像的图像文件夹。每个图像的大小约为(2k,2k)。Python 以最快的方式查找重复图像,python,c++,multithreading,image-processing,Python,C++,Multithreading,Image Processing,我有2个包含10k和35k图像的图像文件夹。每个图像的大小约为(2k,2k)。 我想删除完全重复的图像。 不同图像中的变化只是某些像素的变化。 我尝试过DHashing、PHashing和AHashing,但由于它们是有损图像哈希技术,因此它们也为非重复图像提供相同的哈希值。 我还试着用python编写了一个代码,它只会减去图像,结果数组不是处处为零的组合会使这些图像对彼此重复。 但是单个组合的时间是0.29秒,而总的3.5亿个组合的时间实在太长了。 是否有一种方法可以在不标记非重复图像的情况下
我想删除完全重复的图像。
不同图像中的变化只是某些像素的变化。
我尝试过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)
您应该找到如何删除重复文件(不仅仅是图像)的答案。然后您可以使用,例如,
fdupes
或找到一些替代软件:您应该找到如何删除重复文件(而不仅仅是图像)的答案。然后,您可以使用,例如,fdupes
或找到一些替代软件:在完成比较之前,使用有损哈希作为预过滤步骤。您还可以生成缩略图(例如12 x 8像素),并进行相似性比较
其思想是对非常不同的图像执行快速拒绝。在完全比较之前,使用有损哈希作为预过滤步骤。您还可以生成缩略图(例如12 x 8像素),并进行相似性比较
其思想是对任何文件执行快速拒绝非常不同的图像。。这将有助于删除完全相同的文件(无论什么格式),我会检查并返回给你。谢谢。我已经多次使用
fdupes
删除重复的dicom图像(医学成像中常用的格式)。需要注意的一点是,文件必须完全相同。如果您的文件在标题中有一些差异,即使图像相同,文件也会被视为不同。请注意,两个图像可能是像素对像素相同的,但大小和校验和不同。。。如果一个是TIFF,另一个是PNG。。。如果标题中的日期或注释不同。。。如果它们是由使用不同压缩或策略的不同编码器编写的…任何文件。这将有助于删除完全相同的文件(无论什么格式),我会检查并返回给你。谢谢。我已经多次使用fdupes
删除重复的dicom图像(医学成像中常用的格式)。需要注意的一点是,文件必须完全相同。如果您的文件在标题中有一些差异,即使图像相同,文件也会被视为不同。请注意,两个图像可能是像素对像素相同的,但大小和校验和不同。。。如果一个是TIFF,另一个是PNG。。。如果标题中的日期或注释不同。。。如果它们是由使用不同压缩或策略的不同编码器编写的…“我想删除完全重复的图像”-只有一种方法可以做到这一点;将每个图像的每个字节与其他图像进行比较。散列函数将发生冲突并给出误报。可靠地检测文件的精确副本的唯一方法是逐字节比较它们(当然,如果两个文件大小不同,那么它们显然不能相等,您可以通过检查文件大小来进行一些早期检查以加快速度)。“我想删除完全重复的图像”-只有一种方法可以做到这一点;将每个图像的每个字节与其他图像进行比较。散列函数将发生冲突并给出误报。可靠地检测文件的精确副本的唯一方法是逐字节比较它们(当然,如果两个文件大小不同,那么它们显然不能相等,您可以通过检查文件大小来进行一些早期检查以加快速度)。谢谢Yves,尽管fdupes方法起到了作用,但我也很想了解您的方法。请详细说明如何使用有损哈希作为预过滤步骤,因为它也包括非重复图像。@Bing:预过滤。谢谢Yves,虽然fdupes方法有效,但我也很想了解你的方法。请您详细说明如何使用有损哈希作为预过滤步骤,因为它还包括非重复图像。@Bing:预过滤。