David Kašpar, 428

Vladislav Němec, 433

 

Počítačové vidění pro informatiku – úloha 1 – slučování obrazů

Úkolem této úlohy bylo složení dvou fotografii scény pořízených z různých pozic do jednoho obrazu. Problém řešíme v programu Matlab.
Ke sloučení obrazů v první řadě potřebujeme znát dvojice navzáhem si odpovídajících bodů v obou obrazech (tyto body jsme obdrželi společně se vstupními obrázky). Poté (pomocí postupu uvedeného dále) vypočítáme matici (označena H) pro převod bodu ze souřadného systému prvního obrazu do souřadného systému druhého obrazu.


Pro výpočet této matice použijeme dvojice bodů ze zadání. Pro každou z dvojic bodů( [xi, ui] = [[x, y], [u, v]] ) musí platit:

Z této rovnice získame pro každou dvojici bodů tyto dvě rovnice:

Pro jednodušší řešení převedeme matic H o rozměrech 3x3 na matici H9 o rozměrech 1x9, tedy H9 = (h11 h12 ... h33). Výsledkem budou tyto rovnice:

které jsou ve tvaru A * H9 = 0. Abychom dostali jedno řešení potřebujeme matici A o hodnosti 8 – musíme tedy mít zadány 4 dvojice bodů v každé rovině. Výslednou matici H9 převedeme zpět na tvar matice H o rozměrech 3x3.

Slučovací operaci provádíme na námi vytvořené „virtuální“ ploše. Velikost této plochy volíme s ohledem na velikost vstupních obrázků. Protože korespondující body jsou v obrázku číslo 1 umístěny v jeho levé polovině, umístíme ho do virtuální plochy vertikálně vycentrován u pravého okraje. 

Pomocí matice H nejprve převedeme krajní body druhého obrázku. Tyto body poté ohraničíme opsaným obdélníkem (respektive nejm,enším možným obdélníkem, který ještě obsahuje všechny čtyři body) – tato operace se provádí hlavně kvůli zrychlení výpočtu, protože body ležící mimo tento obdélník nemůžou patřit do druhého obrázku.

Nyní začneme vkládat druhý obrázek do plochy – body obsažené ve vzniklém obdélníku postupně (pomocí inv(H)) převádíme na body v obrázku číslo 2. Barvou získaného bodu obarvíme bod virtuální plochy. Tímto způsobem dokreslíme celý obrázek. (Výběr bodu je složitější – protože body krajní body ohraničujeme obdélníkem, některé body neleží v obrázku číslo 2, musíme vytvořit pomocné pole, které pomocí hodnoty 0 nebo 1 indikuje, zda zadaný bod skutečně leží v obrázku číslo 2.).

Postup algoritmu je dostatečně popsán v komentářích obsažených ve zdrojovém souboru z programu Matlab.


Vstupní obrazy

Výstupní obraz

Na závěr bychom mohli navrhnout několik malých úpráv. Například pro zlepšení kvality přidávaného obrazu můžeme při výběru barvy bodu použít lineární interpolaci barev dvou sousedních bodů. Tato změna se projeví především při zvětšování vkládaného obrazu. Dalším rozšířením by mohlo být měnění jasu obrazů tak, aby byl přechod co nejméně jasově odlišný.