Úloha první - Mozaika obrázků

vypracoval: Ludvík Pardubický

Zadání:

                    Vytvořte mozaiku spojením dvou na sebe navazujících obrázků, které byly nafoceny po otočení kamery bez jejího přemístění.

Teoretický základ:

                   Pokud vyfotíme scénu dvakrát tak, že kamera zůstane na místě a pouze se otočí, pak mezi korespondujícími body (body, které v obou snímcích  představují obraz stejného bodu ve skutečném světě) platí závislost

                       

Pokud máme takto získané dva obrazy, tato matice H je pro všechny dvojice bodů stejná. Abychom matici H určili, musíme vytvořit několik dvojic bodů (minimálně čtyři, lépe však o něco víc), které označíme (jejich souřadnice)

           

 a s jejich pomocí vyřešit soustavu která je daná maticí

                           

Tato soustava však není přesně určená a tak musíme pro její výpočet použít metody SVD (Single Value Decomposition). Výsledná matice H je potom poslední řádek matice V, která vznikne touto metodou.

Praktické vypracování:

                    Postup výše uvedený jsem realizoval za pomoci schopností programu Matlab. Nejprve jsem uvažoval o implementaci v jazyku C++, ale po zjištění, jak obtížná je v něm práce s bitovými mapami jsem byl nucen uznat, že bych nestihl termín odevzdání. Ale mám v plánu tuto implementaci přeci jen později udělat.

                    Nyní již ke skriptu v jazyce Matlab. Zdrojový text je komentován, takže snad jen uvedu jednotlivé kroky jak jdou za sebou.

  1. Nahrajeme souřadnice korespondujících bodů
  2. Vytvoříme matici pro řešení soustavy s cílem získání matice H
  3. Vyřešíme soustavu pomocí SVD, výsledek upravíme do podoby matice H
  4. Vytvoříme inverzní matici Hi, která nám poslouží při sestavování obrázků
  5. Načteme oba zdrojové obrázky, zjistíme jejich velikosti
  6. Vytvoříme černý patřičně veliký prostor pro výsledný obraz
  7. Pravý ze dvou obrázků nakopírujeme do výsledku
  8. Zjistíme rohy levého obrázku po spojení, abychom věděli kde počítat a vykreslovat, to uděláme pomocí násobení maticí H
  9. V ploše, kterou nám ohraničují body získané v minulém kroku provedeme vykreslení prvého obrázku. Bod cílové plochy vynásobíme maticí Hi a bod o těchto souřadnicích ze zdrojového obrázku nakopírujeme
  10. Zobrazíme cílový obrázek

Výsledky činnosti:

             

Závěr:

            Jak je z výsledku výše vidět, spojení se mi nepodařilo dokonale. Vypadá to, že velmi záleží na dobrém určení korespondujících bodů, a to jak na přesnosti, tak na jejich vhodném výběru. Samotná implementace by měla být v pořádku a neměla by výsledek v tomto směru ovlivnit. Úloha jako celek mě velmi potěšila, protože jsem se dozvěděl jak pracuje něco, co je na první pohled jednoduchá záležitost.

             Skript v Matlabu je zde.