Как я могу определить, похожи ли два изображения?

У меня есть папка с изображениями. Некоторые изображения имеют дубликаты или аналогичные (изображения одной и той же сцены под другим углом) или модификации (изображения, которые различаются по размеру, уровню размытия или шумовым фильтрам). Моя задача - определить, имеют ли некоторые из этих изображений похожие изображения.

Я нахожу этот код, но я не могу понять, как выходной номер описывает сходство двух изображений, когда одно из них модифицировано или та же сцена под другим углом.

def compare(file1, file2): im = [None, None] # to hold two arrays for i, f in enumerate([file1, file2]): im[i] = (np.array( Image.open('C:/Users/taras/Downloads/dev_dataset/dev_dataset/'+f+'.jpg') .convert('L') # convert to grayscale using PIL .resize((32,32), resample=Image.BICUBIC)) # reduce size and smooth a bit using PIL ).astype(np.int) # convert from unsigned bytes to signed int using numpy return np.abs(im[0] - im[1]).sum() 

Всего 1 ответ


Код преобразует изображение в оттенки серого и изменяет его размер до 32x32 пикселей. Это означает, что все детали будут потеряны, и вы просто получите общее представление о цвете / яркости при 1024 точках независимо от формы или размера исходного изображения.

Затем он делает это и для второго изображения, а затем имеет 1024 яркости для каждого изображения. Он вычитает абсолютную разницу между каждой парой яркостей путем вычитания, а затем суммирует все различия.

Если изображения идентичны, различия будут равны нулю, а результат будет низким. Если изображения очень разные, они будут иметь разную яркость в каждой области, и сложение этих различий приведет к большому количеству.

Это похоже на «перцептивный хэш», если вы чувствуете, что гуглите.

Вот мистер Бин и 8x8 серая версия - представьте, что это вектор из 64 чисел:

введите описание изображения здесь введите описание изображения здесь

Вот цифры:

255 253 255 207 124 255 254 255 255 252 255 178  67 245 255 254 255 255 255 193 154 255 255 255 255 249 183 142 192 253 251 255 255 216  92 180 156 215 254 255 255 181  96 179 115 194 255 254 255 153  95 175  92 102 246 255 255 112  98 163  97  50 195 255

Вот Паддингтон и 8x8 серая версия - у него тоже сейчас всего 64 номера:

введите описание изображения здесь введите описание изображения здесь

Вот цифры:

247 244 166 123 114  65   0   2 223 235 163  65  30  48  20   0 218 197  59  61 110  37  32   0 140  67  14 149 183  65   7   2 57  25  64 175 169  69   0   2  51  29  57 131 112  31   3   0 60  63  59  38  14  51  32   0  59  87  61  13  11  53  46   0

Тогда математика легко:

abs(255-247) + abs(253-244) + abs(255-166) ...

Есть идеи?

10000