PVI, 2.Úloha - Rekontrukce

Tomáš Doležal (dolezat2@fel.cvut.cz), Petr Leitner (leitnep@fel.cvut.cz)

Zadání
    Pro dvě fotografie zachycujících stejnou 3D scénu nalézt projektivní matice kamer, epipóly, epipoláry a změřit chybu při zpětném promítnutí korespondujících bodů pomocí nalezených projektivních matic kamer.

Postup řešení
    Pro zjištění epipólů a epipolár je třeba nalézt fundamentální matici F, která určitým způsobem spojuje korespondující body na obou obrázcích a platí vztah
uiT.F.vi = 0, kde ui jsou souřadnice bodu v prvním obrázku a vi souřadnice v obrázku druhém.

Pomocí osmi korespondujících bodů je možné matici F vypočítat (viz. následující rozepsaná rovnice)

Image36.gif (4833 bytes)

    Takto získaná matice by měla mít v ideálním případě hodnost 2. Vlivem nepřesností při označování korespondujících bodů však vychází matice s  plnou hodností. Tento drobný nedostatek opravíme pomocí rozkladu matice F metodou SVD, následnému vynulování třetího singulárního čísla v matici D a opětovnému složení matice F. Tato uprava matice F je nutná, protože jinak by nešly vypočítat epipóly. Na vypočtených epipolárách se tato úprava projeví tak, že epipoláry spočtené pomocí matice s hodností 3 prochází korespondenčními body, ale neprotínají se v jednom bodě (epipólu), naproti tomu epipoláry spočtené pomocí matice s hodností 2 procházejí epipólem, ale neprochází přesně korespondenčními body (viz. obrázky).

epopóly

Epipóly lze vypočíst pomocí fundamentální matice z následujících rovnic: euT.F = 0, F.ev = 0

Tyto rovnice vycházejí z rovnice předešlé a použije se předpoklad, že epipól je zobrazení středu jedné kamery do kamery druhé, a tudíž takový bod nelze v jedné kameře naměřit - má tam homogení souřadnice (0,0,0)

epipoláry

Epipolára je přímka svázaná s bodem z protějšího obrazu a to tak, že se tento bod musí zobrazit někam na tuto přímku. Epipoláru v protějším obraze lze vypočíst z fundamentální matice a jednoho z dvojice korespondujících bodů podle vztahu l =F.vi, l´= uiT.F

 

Obrázky: Zeleně jsou zobrazené epipoláry vypočtené pomocí neupravené fundamentální matice F s hodností 3, modře epipoláry vypočtené pomocí upravené fundamentální matice F s hodností 2. Kolečky jsou označené zpětně promítnuté rekonstruovanné body, křížky původní naklikané korespondence.

epipol01.gif (39687 bytes)

 

epipol02.gif (30954 bytes)

 

Rekonstrukce

V této čísti úlohy jsme se pokusili pomocí dvou obrázků a faktorizační metody rekonstruovat body. Cílem je získat projekční matice kamer a rekonstruované body (3D). Metoda se opírá o rozklad matice R (matice ve která jsou uspořádány korespondující body) pomocí SVD a následné získíní projektivních matic kamer P a rekonstruovaných bodů X. Pro náš případ dvou obrázků vypadá situace takto

obr4.gif (1729 bytes)

Pomocí SVD provedeme rozklad matice R. Z diagonální matice D ponecháme pouze první 4 singulární čísla a zbytek vynulujeme. Matici U3mx4.D4x4 s dimenzí 3mx4 můžeme považovat za projektivní matici kamer P a matici V4xnT za matici rekonstruovaných bodů X. V tomto případě neuvažujeme projektivní hloubky v matici R (afinní kamera).

RSVD= U3mx4.D4x4.V4xnT

Tímto postupem získáme jednu dvojici (z mnoha možných) matic P a  X. Kdybychom chtěli rekonstruované body zobrazit do 3D modelu museli bychom ještě nalázt matici homografie H4x4 pomocí znalostí o bodech (případně i vzdálenostech) v rekonstruované scéně.

R= P.H-1.H.X

Body takto získané matice X by již bylo možno zobrazit do 3D modelu

Závěr

Úspěšně se nám podařilo nalézt epipóly a epipoláry pro oba vstupní obrázky. Při zpětné projekci rekonstruovaných bodů jsme naměřily chybu 5,8261 pixelu pro první obrázek a 4,9481 pixelu pro obrázek druhý. Tato chyba je způsobena úpravou matice D při SVD rozkladu matice R.

Zkoušeli jsme dopočítat projektivní hloubky v matici R, pomocí metody prezentované na poslední přednášce. Při použití projektivních hloubek se vždy chyba zpětné projekce v jednom obrázku zhoršila až na desítky pixelů a v druhém obrázku klesla téměř na 0 (*10-5). Nevím zda toto chování bylo způsobeno špatnou implementací metody nebo nevhodností při použití pouze na dvojici obrázků.

Zdrojový kód