Aubrecht Emil, Kocián Jan                                                                                                         17.5.2000

 

PVI - úloha 2

Rekonstrukce scény

Úkoly

Pomocí MatLabu rekonstruujte scénu ze dvou obrázků objektu sejmutých kamerami, když mezi body je známá korespondence.

Potřebná data

dva vyhovující obrázky

Obecný postup

Řešení úlohy lze rozložit na následující části:

1.   Příprava dat

Pomocí modulu corrgui jsme ve dvou vstupních obrázcích vybrali několik (15) korespondujících bodů a jejich souřadnice uložili k dalšímu zpracování. Máme tedy obrazové body (u=( ui, vi, 1), u’=( ui‘, vi‘, 1)). (v obrázku vypadají takto: *****)

2.   Výpočet fundamentální matice Q

Fundamentální matice nám poskytuje korespondenci mezi oběma prostory: uT.Q.u’=0. Po úpravách získáme rovnici ve tvaru A.q=0, kde A je matice nx9, q vektor 9x1 z matice Q (Q11, Q12, ...), ,
Pro řešení výsledné rovnice (soustavy) nám postačí zadání 8 bodů, pro a více bodů je již soustava přeurčená. Pro 8 bodů 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).
V praxi se nám osvědčilo k výpočtu použít co nejvíce bodů (všechny).

3.   Výpočet epipolár l, l‘ a epipólů e, e

Epipoláry určíme pomocí fundamentální matice Q a souřadnic naklikaných (obrazových) bodů: l=Q.u’, l‘=uT.Q. Získané epipoláry zobrazíme jako úsečky do zdrojových obrázků (jeden bod zvolíme druhý na základě l resp l‘ dopočítáme) (v obrázku: -----).
Homogenní souřadnice epipólů e, e’ nalezneme ve třetích sloupcích matic U, V, získaných SVD fundamentální matice Q ([U.S.V] = svd(Q))(v obrázku: *****).

4.   Rekonstrukce geometrie skutečné scény ze zadaných P, P

Použity jsou předem známé projekce kamer P, P’ ze souboru pointcal_mat.mat. Víme, že obrazový a reálný prostor jsou svázány projekčními maticemi: a.u=PX, a’.u’=P’X, kde X jsou souřadnice rekonstruované scény a a, a’ nějaká nenulová reálná čísla.
Označíme P=(A | b) a P‘=(A‘ | b‘), kde matice A, A’ mají velikost 3x3 a sloupcový vektor b, b’ 3x1. Hledané X’, X’’ získáme jako řešení následujících rovnic: (nejprve určíme a, a’ a poté zpětným dosazením X’, X’’)

Výsledné souřadnice skutečné scény X vypočítáme jako průměr X’, X’’ a zobrazíme ve 3D (v obrázku: ****).
V praxi se průměrování (které nemá fyzikální opodstatnění) patrně projeví na chybě při rekonstrukci!

Nyní provedeme zpětnou projekci skutečných bodů do obrazu, tedy newu=P.X, newu’=P’X, po normalizaci zobrazíme (v obrázku: ****)

5.   Výpočet vlastních projekčních matic myP, myP’ a rekonstrukce scény pomocí nich
Provedeme volbu: myP=(I(3,3) | O(3,1)), kde I je jednotková matice a O je nulová matice. Druhá projekční matice má tvar: myP’=(A | b), kde matice A=(a1, a2, a3) má velikost 3x3 a b je sloupcový vektor 3x1 (jedná se o jiné proměnné než v bodě 4!), b má hodnotu b=e’.
Z rovnosti Q.A=-AT.QT (Q.A je antisymetrická matice) dostáváme 6  rovnic o 9 neznámých: W.a=0, matice W (6x9), koeficienty f1, f2, f3 jsou řádky fundamentální matice Q:

Provedením SVD matice W ([U D V] = svd(W)), se v 6 až 9 sloupci vzniklé matice V nalézají a1 a2, a3, a4, (báze jádra W). Naše hledané a je jejich lineární kombinací (s koeficienty a1, a2, a3, a4). Nyní se pokusíme najít takovou kombinaci a1, a2, a3, a4, aby požadovaná matice A bylo co nejvíce regulární (zjistíme opět pomocí SVD, kdy ve vzniklé matici D, chceme maximalizovat poměr posledního prvku na diagonále ku prvnímu). Z matice A a sloupcového vektoru b sestavíme myP’.

Analogicky s bodem 4 pomocí nových projekčních matic myP, myP’ vypočteme souřadnice v (projektivně) rekonstruované scéně myX (ty ovšem nemá smysl zobrazovat) a opět provedeme zpětnou projekci do obrazu a zobrazíme (v obrázku: oooo).

6.   Výpočet transformační matice H
Transformační matice H (4x4) nám svazuje souřadnice (projektivně) rekonstruované scény (myXi) se souřadnicemi skutečné scény (Xi): mi.myXi=H.X i. Po dosazení myXiT=(xi yi zi wi), XiT=(), mi  jsou reálná čísla, a přepisu soustavy dostáváme:

velká matice Z je pro 5 bodů velikosti 20x21. Vyřešením soustavy pro naše body (opět využijeme též SVD) získáme požadované H.
V praxi byl patrný vliv počtu použitých bodů na „kvalitu“ pozdější rekonstrukce, bohužel se nám nepodařilo „vyřadit nepovedené“ body, které vnášejí chybu.

Provedeme transformaci souřadnic námi (projektivně) rekonstruované scény na souřadnice v reálné („skutečné“) scéně: Xi=H-1. mi.myXi a zobrazíme ve 3D (v obrázku: oooo).

Analogicky s bodem 4, 5 pomocí nových projekčních matic myP, myP’ provedeme zpětnou projekci „skutečné“ scény do obrazu a zobrazíme (v obrázku: oooo).

 

Naše implementace

1.   Postup našeho výpočtu je uložen v souboru uloha2.m.

Ukázka postupu

Vstupní obrazy

K1.jpg (34441 bytes) K1.jpg (34441 bytes)

 

 

Vstupní obrazy s korelujícímy body, epipolárami, epipóly a všemi zpětnými projekcemi

sc1.jpg (88454 bytes)

sc2.jpg (93444 bytes)

 

Skutečná a (projektivně) rekonstruovaná scéna

sc3d.jpg (66611 bytes)

Závěr

Použitím skriptu v souboru uloha2.m lze předvést všechny požadované funkce týkající se rekonstrukce scény.

Kvalita rekonstrukce bohužel není nejlepší, neboť celkový výsledek poškodí několik „špatných“ bodů, které se nám nepodařilo (zcela) odstranit.