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.