Warning
This page is located in archive.

Vzdálenost dvou obrázků

Pokud obrázky reprezentujeme jako číselné vektory, jedná se vlastně o vzdálenost dvou vektorů (což už nezní tak divně).

S využitím funkcí z numpy lze (Euklidovskou) vzdálenost spočítat např. následujícími dvěma způsoby (viz d1 a 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)
Oba by měly dát stejný výsledek.

Naše obrázky jsou šedotónové s odstíny šedi od 0 do 255 (datový typ numpy.uint8). Pokud bychom je načetli s jejich přirozeným datovým typem uint8, při počítání rozdílu im1 - im2 by mohlo dojít k podtečení, a naopak při umocnění rozdílu na druhou by mohlo dojít k přetečení. Proto raději hned po načtení odstíny šedi reprezentujeme jako obecný datový typ int (část .astype(int) je při načítání obrázku důležitá).

courses/b3b33kui/semestralni_ulohy/5_ml/dist.txt · Last modified: 2023/04/28 17:43 by xposik