Transformace je popsána funkcí , která váže souřadnice v původním obrázku a souřadnice v novém obrázku:
(1) |
Obrazovou funkci původního obrázku již máme značenou . Označíme-li
obrazovou funkci nového obrázku , pak platí:
(2) | |||
(3) |
Tyto vztahy můžeme přepsat do kompaktnějšího tvaru:
kde , a jsou řádky matice
tvořené koeficienty ze vztahů (4) a (5):
(7) |
V této části si ukážeme, jak vypočítat matici , která reprezentuje projektivní transformaci mezi dvěma obrazy. V těchto dvou obrazech mějme tzv. lícovací body, tj. body které si v obrazech vzájemně korespondují (označeny červeným křížkem):
Lícovacích dvojic nech<< je . Pro každou dvojici lícovacích bodů mají platit vztahy (6), kam za dosadíme a za dosadíme . Pak hledáme matici takovou, aby (6) byla splněna pro všechny lícovací dvojice.
Nalezení je obzvláště jednoduché, nebo<< vztahy (6) jsou v prvcích lineární. Úpravou vztahů totiž dostaneme:
Utvoříme z prvků matice vektor a zapíšeme lineární soustavu rovnic pro tento vektor:
Soustavu vyřešíme a tím dostaneme vektor , který pak jen přeskládáme do matice a tím jsme hotovi.
(11) |
V praxi se používá korespondencí více než 4, aby se zmenšil vliv chyby
při určení korespondujících bodů. Kvůli chybám je však také nulový
prostor matice [] prázdný a vektor [] se hledá ve
smyslu nejmenších čtverců, tj. určí se jako
(12) |
Nalezení vektoru se v takovém případě udělá pomocí SVD (Singular Value Decomposition). Lze použít následující MATLAB kód:
% vypocitej vektor a [u,d,v]=svd(C); a=v(:,end);
Při použití metody nejmenších čtverců se chyba "rovnoměrně rozdělí" do všech sloupců, někde představuje zanedbatelnou změnu, jinde změnu velmi výraznou. Tomu je možné zabránit normalizací. Body v každém souřadném systému zvlášť se transformují tak, aby jejich težiště bylo v počátku a průměrná vzdálenost od počátku byla rovna sqrt(2), pro výpočet normalizační transformace lze použít funkci Tu=normu(u). Homografii An vypočtenou na normalizovaných bodech je pak nutné převést zpět A = inv(Tx)*An*Tu.