Rekonstrukce scény
2. laboratorní práce z předmětu PVI

Martin Kafka, Michal Poneš

Zadání

Z vybraných obrázků kostek sestavte 3D model - určete epipóly, epipoláry a proveďte zpětnou projekci rekonstruovaných bodů.

Postup

Scénu s kostkami vyfotíme z několika míst. Vybereme dva z obrázků a pomocí nástroje corrgui označíme nejméně osm korespondujících bodů.

Korespondující body splňují vztah

,

kde F je fundamentalní matice. Tuto matici získáme z matice korespondujících bodů, která má tvar

Pomocí SVD získáme z matice M fundamentální matici F o dimenzi 3. Potřebujeme, aby tato matice měla hodnost 2, ale díky nepřesnostem v určení korespondencí může získaná mít hodnost 3.

Pokud vynulujeme poslední prvek matice S a opět složíme matici F, získáme matici s hodností 2. Tím se dopouštíme nepřesnosti, která se projeví při výpočtu epipólů a epipolár. Ty vypočítáme z následujících rovnic

Epipoláry spočítané pomocí upravené matice F se protínají v epipólu, ale přesně neprocházejí označenými body. Epipoláry spočítané pomocí původní matice F sice procházejí body korespondence, ale neprotínají se v epipólu.

Epipóly jsou tedy:

Získané obrázky vzpadají nějak takto:

Dále jsme sestrojili projekční matici. V tomto případě je to matice dvou kamer.

Tato matice se dá rozložit jako , kde P je vektor projekčních matic kamer a X je vektor bodů v prostoru. Tento vztah se dá přepsat pomocí , kde matice H vyjadřuje transformaci, kterou se určuje báze světa, který byl na obrázku vyfocen. Existuje nekonečně mnoho takových matic H, ale jen jedna odpovídá světu vyfocenému na obrázku. Mohli bzchom ji získat tak, že bychom zaměřili v obrázku pravé úhly a tyto bychom zakomponovali do výše uvedeného vztahu.

Vypočítané matice kamer tedy jsou:

Nakonec jsme provedli reprojekci bodů určených jako korespondenční, abychom zjistili vizuální odchylky. V našem případě vyšli chyby 6,49 resp. 5,62 pixelů, což je ještě přijatelné.

Obrázky po reprojekci bodů vypadají nějak takto:

Skript pro výpočet lze nalézt zde