Search
If we represent the images as vectors of numbers, we need to compute the distance of two vectors. (Which does not sound that weird as “computing a distance of two images”, right?)
Using functions from numpy, we can compute the (Euclidean) distance in the following two ways (see d1 and d2):
numpy
d1
d2
from PIL import Image import numpy as np im1 = np.array(Image.open('train_data/img_1112.png')).astype(int).flatten() im2 = np.array(Image.open('train_data/img_1113.png')).astype(int).flatten() diff = im1 - im2 d1 = np.sqrt(np.sum(np.square(diff))) d2 = np.linalg.norm(diff)
Our images are grayscale with shades of gray ranging from 0 to 255 (represented by numpy.uint8 datatype). If we used them with their native datatype uint8, underflow errors may happen when computing the difference im1 - im2 (uint cannot represent negative numbers), and overflow errors may happen when computing the squares of differences. That's why it is better to transform all numbers to int which can represent both large and negative numbers (it is important to use .astype(int) after reading in the image.)
numpy.uint8
uint8
im1 - im2
uint
int
.astype(int)