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á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).
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.a č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 pxZá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. :