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