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`

):

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)Variables

`d1`

and `d2`

should contain the same result.
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.)

courses/be5b33kui/semtasks/05_ml1/distance.txt · Last modified: 2024/02/18 20:07 by xposik