VisionLab kamera jako měřidlo

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Homografie: rovina do roviny

Obecně jeden snímek hloubku neurčí. Ale když se ví, že body leží v jedné rovině, je situace jiná — a téměř celá tahle labka na tom stojí.

Osm čísel místo šesti

Zvol soustavu tak, aby rovina byla Z = 0. Třetí sloupec rotace pak násobí nulu a vypadne:

s·m̃ = K·[r₁ r₂ r₃ t]·[X Y 0 1]ᵀ = K·[r₁ r₂ t]·[X Y 1]ᵀ = H·M̃Zhang, rov. (2)

Zbyla matice 3×3 určená až na měřítko, tedy osm stupňů volnosti. Ta se dá spočítat ze čtyř bodů — a čtyři body jsou přesně to, co má rohatý marker.

Normalizace není volitelná. V soustavě rovnic se míchají pixely, milimetry a jejich součiny, takže je hrozně špatně podmíněná. Hartleyho normalizace (posunout těžiště do počátku a zvětšit tak, aby průměrná vzdálenost byla √2) to spraví a Zhang na ni v příloze A výslovně upozorňuje. Bez ní výsledek při reálných velikostech znatelně ujíždí a nikdo nepozná proč.

Co homografie umí a co ne

UmíNeumí
narovnat rovinný vzor na obrazříct cokoli o bodech mimo tu rovinu
dát pózu roviny vůči kameřefungovat, když se rovina ohne
složit panorama z čisté rotacesložit panorama, když se kamera posune

Z homografie na pózu

Když se K zná, jde z H vytáhnout rotace i posun:

r₁ = λK⁻¹h₁    r₂ = λK⁻¹h₂    r₃ = r₁ × r₂    t = λK⁻¹h₃λ = 1/‖K⁻¹h₁‖

Třetí sloupec rotace se neměří — dopočítá se. Vektorový součin ho dodá, protože rotační matice má ortonormální sloupce. Právě proto rovina stačí: chybějící informace o hloubce je nahrazená tím, co se o rotaci ví předem.

Z reálných dat vyjdou r₁ a r₂ jen přibližně kolmé, takže výsledek není přesně rotační matice. Zhang na to má přílohu C: nejbližší rotační matice se najde přes SVD jako R = UVᵀ. A pozor na znaménko — když vyjde determinant −1, je to zrcadlení, ne rotace, a celá póza je převrácená, přičemž reprojekce vypadá pořád v pořádku.

Vzorce v této kapitole

H — homografie roviny
H = K·[r₁ r₂ t] [—] Zhang, rov. (2)
r₃ — třetí sloupec rotace
r₃ = r₁ × r₂ [—] ortonormalita
R — nejbližší rotační matice
R = U·Vᵀ z SVD [—] Zhang, příloha C