David Sedláček :: počítačové vidění

Úloha 1 - Panoramatický snímek

1 Zadání

Vytvořte ze dvou dodaných snímků (fotografií), které se překrývají, panoramatický snímek. Transformaci jednoho obrazu na druhý hledejte jak za pomoci bodových, tak i přímkových korespondencí.

Vybral jsem si tyto dvě fotografie Kampy
   


2 Vypracování


Ve všech následujících postupech budu levý obrázek považovat za referenční a pravý na něj budu transformovat.

a) Vytvoření transformační matice H z bodových korespondencí "body.m"

Programem na internetu jsem si nechal ve svých obrázcích najít korespondující body. Ty jsem poté všechny načetl a přímo z nich sestavil matici A. Aplikací metody svd(A), jsem dostal dílčí potřebné matice U,D,V. Z devátého sloupce matice V (tj. vektor h) jsem sestavil matici přechodu mezi obrázky H. Po jednotlivých složkách jsem provedl transformaci pravého obrázku a dal je dohromady. Viz. finální obrázek.

Kromě rozdílu jasu je patrný mírný skok nahoře u komína a také v dolní části (přechod mezi budovou a chodníkem). Tato nepřesnost je nejspíše způsobena absencí bodů v místě přechodu mezi obrázky, viz. obrázek s vyznačenými body.

mozaika z bodových korespondencí

b) Vytvoření transformační matice H z přímkových korespondencí "primky.m"

K daným dvěma obrázkům jsme již dostali matice, ve kterých byli přímky, ale korespondence mezi jednotlivými přímkami jsme si musel zjistit sám. Vybrané přímky jsou ty zelené na obrázku. Rozšířením krajních bodů přímek na homogenní souřadnice a jejich následným vektorovým součinem jsem dostal souřadnice přímek v afinním prostoru. Z těchto souřadnic se dala dohromady matice A a poté již stejným postupem jako v případě bodů se dali obrázky dohromady.

Odhadem mi připadá výsledek z přímkové korespondence mírně horší než u bodů. Nejspíše je to způsobeno nepřesností při hledání přímek případně jejich špatným výběrem. Jinak by tato metoda měla mít kvalitnější výsledky.

mozaika z korespondencí přímek

c) Vytvoření transformační matice H z přímkových i bodových korespondencí "body_primky.m"

Načítání bodů probíhalo jako v předchozích dvou příkladech. Rozdíl je pouze ve výpočtu matice H. V podstatě se z přímek spočte dílčí matice A (v souboru C2) a druhá se spočte z bodů (C1). Matice se dají dohromady (postaví nad sebe), vznikne mat. A, znormalizejeme a provedem aplikaci svd. Dále je již postup identický. Viz výsledek, tentokrát pouze jasová složka.

mozaika z bodů a přímek dohromady


3 Závěr

Obrázky se mi povedlo spojit dohromady všemi třemi metodami, ale myslím si, že by to šlo i lépe. Nejlepších výsledků bylo dosaženo prostřednictvím bodových korespondencí. Nejhůře dopadl pokus body-přímky. Tento obrázek se nerozjíždí pouze v krajích, ale také se mírně ve spoji roztahuje - vikýř a komín. Nedokáži s určitostí říci, kde je chyba. Nejspíše špatně zvolené body, případně mírná odchylka při normalizaci. Ale na druhou stranu bylo pro mě výkonem přemluvit Matlab, aby dělal to, co chci já :-)

David Sedláček ::