Aubrecht Emil, Kocián Jan 8.4.2000
Pomocí MatLabu složte dva obrázky navazujících částí objektu focené z jednoho místa do jednoho společného.
dva vyhovující obrázky, pozice korelujících bodů v obou obrázcích (minimálně 4)
Řešení úlohy lze rozložit na následující tři části
1. Příprava dat
V této části je třeba načíst oba obrázky (případně je přetransformovat) a pozici korelujících bodů v obou obrázcích (případně je zobrazit).
Dále je nutno připravit si dostatečně velký výsledný obrázek (matici), zkopírovat do něj jeden z obrázků na vhodnou pozici a též určit pozici korelačních bodů kopírovaného obrázku v obrázku výsledném (zkopírování není nutné, ale značně se tím zjednoduší další postup – není nutno vytvářet transformační matice do obou obrázků).
2. Získání transformační matice
Tato část je v postupu nejpodstatnější, protože vytvořením pomocí transformační matice budeme schopni zobrazit libovolný bod ve výsledném obrázku do druhého (nezkopírovaného) obrázku a naopak.
Matice se samozřejmě tvoří ze zadaných bodů,
tedy víme, že pro všechny dvojice korelujících bodů platí, kde ui, vi jsou sloupcové vektory bodů (3x1 - hodnoty xi, yi,
1), je konstanta pro danou dvojici a H je transformační matice. Po několika úpravách získáme rovnici ve
tvaru , kde A je matice
2Nx9, h vektor 9x1 z matice H (h11, h12,
...), ,
xpi, ypi, jsou x-ové a y-ové souřadnice bodu pi.
Pro řešení výsledné rovnice (soustavy) nám postačí zadání 4 bodů, pro 5 bodů je již soustava přeurčená. Pro čtyři body lze tedy vyřešit zadanou soustavu, pro větší počet bodů je nutno použít přibližnou metodu výpočtu, která nám nalezne matici “co nejbližší“ matici k matici A s hodností 8 - například Singular Value Decomposition (SVD).
3. Převzorkování obrázků
V této části se pomocí transformační matice převedou pixely z druhého obrázku do obrázku výsledného. Pro urychlení se však používá opačný postup – pro jednotlivé pixely výsledného obrázku se hledá jejich originál ve druhém obrázku a jeho barva se poté použije.
Transformací samozřejmě nedostaneme přesnou polohu originálního pixelu, takže je třeba zvolit přibližnou metodu pro získání barvy. Jednoduchá je metoda nejbližšího souseda kdy použijeme pixel nejblíže získané polohy – souřadnice jednoduše zaokrouhlíme. Mnohem přesnější je metoda bilineární interpolace, kdy barvu pixelu určíme jako vážený průměr barev všech čtyř okolních pixelů.
Postup našeho výpočtu je uložen v souboru uloha1.m. Dále budou uvedeny pouze poznámky k tomuto postupu:
1. Pro zrychlení výpočtu jsme obrázky převedli do odstínů šedi.
2. Pro výpočet transformační matice byla použita funkce uu2homog, která používá přibližné řešení, je tedy možno zadat více bodů.
3. Pro převzorkování byla použita metoda nejbližšího souseda, je možno volit mezi verzí s použitím for-cyklů nebo maticovou verzí, která je v MatLabu podstatně rychlejší, ale mnohem hůře pochopitelná.
Použitím skriptu v souboru uloha1.m lze úspěšně složit zadané dva obrázky.