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:
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ře | fungovat, když se rovina ohne |
| složit panorama z čisté rotace | složit panorama, když se kamera posune |
Z homografie na pózu
Když se K zná, jde z H vytáhnout rotace i posun:
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.