Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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