PVI - Úloha 1 spojování Mozaiky
Zadání :
Použité prostředky :
Použité vstupní obrázky :
|
|
Řešení :
Nejprve jsem použil CORRGUI a zadal korespondující body. Zde jsem se však setkal s problémem přesné lokalizace korespondujících bodů (třesoucí se ruka při zadávání bodů).
x-souřadnice v 1.obrazku |
y-souřadnice v 1.obrazku |
x-souřadnice ve 2.obrazku |
y-souřadnice ve 2.obrazku |
57.3387 |
55.8589 |
253.3065 |
52.2317 |
16.6935 |
232.1411 |
221.3710 |
223.4358 |
147.3387 |
50.0554 |
345.4839 |
38.4484 |
68.9516 |
275.6675, |
275.0806, |
266.9622 |
Ze zadaných bodů spočítal homografii pro transformaci bodů z obrázku B do obrázku A. Zdrojový kód pro matlab fora.m zde.
Každá dvojice korespondujících bodů definuje dva řádky homogenní soustavy lineárních rovnic. Homografii pro transformaci bodu z obrázku A do obrázku B získám jejím vyřešením. Nechť jsou souřadnice bodu v obrázku A [x a , ya ] a podobně v obrázku B [xb,yb ]. Potom jednotlivé rovnice soustavy mohu uspořádat do matice a to podle následujícího uspořádání dvojic řádků.
( |
-xa |
-ya |
-1 |
0 |
0 |
0 |
xa xb |
ya xb |
xb |
) |
( |
0 |
0 |
0 |
-xa |
-ya |
-1 |
xa yb |
ya yb |
yb |
) |
Obrázek A jsem netransformoval a zkopíroval do výsledné mozaiky. Pro uložení výsledn ého obrazu jsem použil obrázek, jehož velikost byla (pro zjednodušení) dvoj násobná oproti velikosti prvního zdrojového obrázku. Neboť výsledná velikost sloučených obrázků bude maximálně dvojnásobná.
Ke zjištění správné polohy bodů obrázku B jsem, muse l jeho body přepočítat na správné souřadnice. Při normální trasformaci A=H*B by ve výsledku vznikly prá zdná místa. Proto je nutno použít inverzní transformaci.
Pomocí homografie jsem spočítal transformované rohové body obrázku B. Tímto jsem získal čtyřúhelník, jehož vnitřní body jsem pomocí metody inverzní homografie transformoval zpět do souřadnic obrázku B. Toho je možno dosáhnout maticovým násobením inverzní homografie a souřadnic bodů B=IH*A.
Pro výpočet správné intenzity jsem použil metodu interpolace nejbližšího souseda.
Zdrojový kód pro matlab spojobr.m zde .
|
|
|
|
Závěr :
Pro řešení jsem použil 4 korespondující body.Je zřejmé, že jich není mnoho a výsledek tedy může být poměrně nepřesný. A s chybou. Na druhou stranu, i tak matlab pracoval celkem dlouho a při delších časových prodlevách by člověk mohl nabýt dojmu, že počítač umřel. Ze sloučeného obrázku je zřejmé,že došlo k určitým chybám (posunům).To je způsobeno maticí homografie, kterou jsem vypočetl z nepřesně zadaných korespondenčních bodů. Jedním možným řešením by bylo více se soustředit při zadávání, respektive zadávat body (v programu CORRGUI) ve větším zvětšení. Bohužel, i když jsem se o to snažil, nikdy jsem nedosáhl úplně uspokojivého vysledku.
Přesto se domnívám, že úlohu se mi podařilo, za pomoci cvičících, splnit celkem úspěšně .