Semestrální práce z PVI : Rekonstrukce obrazu ze 2 snímků

Zpracoval Ondřej Šimánek

Letní semestr 2002

 

Zadání :

Proveďte rekonstrukci ze dvou zadaných obrazů.

 

Postup:

Nejprve je nutno pomocí MATLABu a modulu CORRGUI zjistit a zadat korespondující body. Z těchto bodů (uložených v matici) spočtu Fundamentální matici. Poté je možno pro jednotlivé obrázky vypočítat epipóly a epipoláry. Ze zadaných bodů sestavím matici R. Z té poté spočtu upravenou Projekční matici kamer + matici bodů X. Z nich po znormování dostaneme po zpětném převedení opět souřadnice rekonstruovaných bodů. Tyto body se liší od zadaných o odchylku L. Takže na závěr ještě spočtu průměrnou velikost této odchylky pro oba obrázky.

 

Použité obrázky :

Řešení :

Nejprve jsem pomocí modulu Corrgui zadal body koresponujicí v obou obrázcích. Tyto body (2D) jsem uložil do matice. Dále bylo nutno vypočítat fundamentální matici.

Označíme-li homogenní souřadnice i-tého bodu v prvním obraze ui a v druhém obraze vi. Musí pro všechny korespondující body platit: uiT.F.vi = 0. Tato podmínka vyplývá z požadavku na lineární závislost vektoru ui, vektoru vi a vektoru T (po převedení všech těchto vektorů do společné báze). Vektor T reprezentuje posunutí středu druhé kamery vůči středu první kamery. Na základě této podmínky získáme z každé korespondující dvojice bodů jednu řádku matice soustavy. Jelikož se jedná o homogenní soustavu s 9-ti neznámými je pro získání jediného řesení potřeba alespň 8 korespondujích dvojic. Vyřešením této soustavy získáme fundamentální matici.

Roznásobením uiT.F.vi = H . F=0 dostaneme :

Matici F získáme použitím SVD rozkladu matice H. Potom členy F budou obsaženy v posledním sloupci matice V. Pokud získaná matice F nemá hodnost 2, je nutné ji za pomoci SVD na tuto hodnost upravit.

 

Epipoláry

Epipolárou nazýváme takovou přímku, na kterou se do druhého obrazu promítá bod z prvního obrazu. Epipoláru představuje podprostor dimenze 2 a tudíž ji v projektivní rovině můžeme vyjádřit pomocí doplňkového vektoru. Jelikož na epipoláře musí ležet druhý bod z korespondující dvojice, musí být tento doplňkový vektor kolmý na vektor reprezentující bod v druhém obraze. Z toho vyplývá, že skalární součin vektoru reprezentujícího epipoláru a vektoru reprezentujícho bod ve druhém obraze musí být roven nule. Epipoláru ve druhém obraze odpovídající bodu v prvním obraze vypočítáme tudíž jako: l´= uiT.F a epipoláru v prvním obraze odpovídající bodu ve druhém obraze jako: l =F.vi. Kde l jsou vlastně parametry obecné rovnice přímky. Jejich hodnoty jsem poté znormoval a epipoláry vykreslil na výstup. (l1,l2, l3 ,l4).
 

Výpočet epipolu

Epipolem nazýváme takový bod obrazu, do kterého se promítá střed druhé kamery. Jedná se tedy o bod, který nemá v druhém obraze reprezentanta. Tudíž ve druhém obraze nemůže mít reprezentanta ani epipolára a má tedy homogenní souřadnice (0,0,0). Epipol prvního obrazu můžeme vypočítat z rovnice: euT.F = 0 a epipol druhého obrazu z rovnice F.ev = 0. Jedná se tedy o levý a pravý nulový prostor matice F.
 
Do každého obrázku jsem vykreslil,jednak původní body, tak i epipoláry (procházející body spočítané z neupravené fundamentální matice; i "spravné" epipoláry spočítané z upravené fundamentální matice F ) a nakonec i body zpětně promítnuté do obrázku.
 
Nejprve bylo nutno sestavit matici R obrazových bodů. Body xij jsou původní
body. členy zatím necháme na hodnotě 1.
 
 
;
 
Hotové obrázky :


>Zde hledáme hodnoty P´a Xˇ. ty je možno (až na projektivní transformaci ) přibližně získat pomocí SVD rozkladu.. Prostřední člen (D) upravíme tak,aby na diagonále byly 4 prvky. Podobně matici X´ Výsledkem je projekční matice, která by měla být stejná pro všechny obrázky. Matici bodů samozřejmě též znormuji.
 

Průměrná chyba na bod :

Nejprve si spočtu souřadnice jednotlivých bodů v obrázcích. Vlastní odchylka je už potom jen průměrna hodnota aritmetické vzdálenosti mezi vzoremi obrazem.
Výsledná chyba pro 1.obrázek : 5.2372 px , pro druhý : 4.8437 px

Závěr :

Doufám, že úlohu se mi podařilo splnit.Našel jsem Fundamentální matici, epipóly i epipoláry. Dále jsem nalezl i Projektivní matici a zpětně reprojektoval body na obrázcích Výsledná chyba kolem 5 pixelů byla zřejme zejména způsobena nepřesnostmi v zadání..
Zdrojový kód pro matlab je zde. :