Vypracoval
: Tomáš Polcar 780104/0258
Zadání
Spojte dva navazující obrazy focené z jednoho místa pouze otočením kamery do jednoho pomocí zadaných korespondujících bodů.
Postup
Spojení provedeme na základě výpočtu transformační matice mezi obrazy. Pro transformaci obrazu s body o souřadnicích do obrazu s body o souřadnicích platí
(1)
je konstanta specifická pro každý bod
je sloupcový vektor souřadnic bodu i přetransformovaného do druhého obrazu
je transformační matice typu 3x3
je sloupcový vektor souřadnic bodu v prvním obraze .
Ze vztahu (1) sestavíme rovnice
(2)
Takto získáme z každých dvou korespondujících bodů dvě rovnice pro výpočet matice . Jelikož má matice 9 prvků, potřebujeme, aby matice měla hodnost 8. Tím získáme jednodimensionální prostor řešení. Nezáleží na tom, které konkrétní nenulové řešení si vybereme (podle vybraného řešení se nám bude měnit koeficient jednotlivých bodů.
Nyní se řešení dělí podle počtu zadaných korespondujících bodů.
Zadány 4 korespondující body po 3 LN:
V tomto případě máme k dispozici 8 potřebných rovnic a tudíž bez větších problémů vypočteme ze vztahu (2) matici .
Zadáno více než 4 korespondujících bodů:
Máme-li zadáno více jak 4 korespondující body, získáme příliš mnoho rovnic. Jelikož však měření není přesné, při přesném řešení rovnic se nám nepodaří nalézt řešení.
Potřebujeme snížit hodnost matice v rovnici (2) na 8, k čemuž použijeme techniku SVD. Sestrojíme matici , která bude „blízko“ matice , ale bude mít hodnost 8. „Blízko“ zvolíme tak, aby součet kvadrátů odchylek jednotlivých prvků matic byl minimální
Vycházíme z poznatku, že libovolnou reálnou matici typu , jde rozložit na součin tří matic
kde typu a typu jsou ortonormální a diagonální o prvcích , kde a .
zvolíme tak, že na diagonále matice necháme prvních 8 a ostatní vynulujeme.
Potom je a hodnost matice je 8. Nyní můžeme ze vztahu (2) vypočíst matici dosazením za . Před výpočtem matice , je vhodné vynásobit souřadnice normalizační transformací, abychom dosáhli co nejmenšího rozptylu velikosti souřadnic jednotlivých bodů
Nyní již stačí převzorkovat jeden obraz do druhého. To se z důvodu konečné velikosti rastru neprovádí maticí , ale maticí inverzní. Pro každý bod výsledného obrazu se ptám, jaký bod ze zdrojového obrazu mu odpovídá (abych nemusel procházet celý obraz, zjistím kam se transformují rohové body obrazu a procházím jen takto vymezenou oblast). Pro výpočet jasové funkce jsou pak dvě základní metody
Nejbližší soused
Hodnota jasu nového pixelu bude dána jasem nejbližšího pixelu po zpětné transformaci
Bilineární interpolace
Hodnotu jasu získám interpolací přes a následně přes .
Závěr
Na cvičeních jsem prakticky vyzkoušel spojování dvou obrazů pro
zadané 4 body a více. Při spojování s vhodně zvolenými body a při transformaci
2 obrazu do 1 jsem dosáhl velice pěkného výsledku.
Při při transformaci 1 obrazu do druhého, ale došlo k vzájemnému posunutí a na výsledném obrazu je patrný schodovytý přechod.
Další chyba se objevila při zvolení jiných bodů, kdy se jeden bod vyskytoval na výčnělku na střeše. Při této volbě bodů došlo ke značnému zkreslení transformovaného obrazu.
Zlepšení bychom možná dosáhli použítím normalizace obrazů. Kolegové, ale ověřili, že normalizace nemá zásadní vliv. Jedna z možných příčin zkreslení obrazů je lineární zkreslení kamery, kdy kamera nezobrazuje přímky na přímky, ale na oblouky. Toto se dá odstranit korekcí kamery, pro kterou však potřebujeme znát její parametry.