PVI - Úloha 1 spojování Mozaiky


zpracoval Ondřej Šimánek
letní semestr 2002

Zadání :


Dvě fotografie byly vyfotografovány z jednoho místa pouhým pootočením kamery. Mým úkolem je spojit je do jednoho obrázku pomocí určení korespondujících bodů.


Použité prostředky :

Pro řešení jsem použil program Matlab. Pro zadání korespondujících bodů jsem použil matlab modul CORRGUI.


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ů).

použité korespondující body :

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.


Výpočet homografie

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 .


Výsledný dobrý složený obraz :

Obraz složený při špatném zadání bodů:


najdete 10 rozdilu :-)


najdete 10 rozdilu



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ě .