12. December 2012 1
Aufgabe 1: Koordinatentransformation 1
a. Gegeben sind , , und . Gesucht ist die Transformation von einem Weltpunkt in einen Kamerapunkt
. Mit gilt:
b.
Aufgabe 2: Koordinatentransformation 2
Gegeben sind die beiden Transformationen:und
Transformation lokal in Welt: .
3. Übungsblatt zur Vorlesung CV-Integration (Lösung)
Wintersemester 2012/2013 Prof. Dr. Stefan Müller
AG Computergraphik
iw jw kw tw pw
pc Rwc = iw jw kw
pc = Rwc T⋅(pw–tw) = Rwc T⋅T(–tw)⋅pw pw = Rwc ⋅pc+tw = T t( )w ⋅Rwc ⋅pc
M T⋅ ( )–t
xT 0 yT 0 zT 0 0T 1
1 0 0 0 1 0 –t 0 0 1 0 0 0 1
⋅
xT –xT⋅t yT –yT⋅t zT –zT⋅t 0T 1
1 0 0 –xT⋅t 0 1 0 –yT⋅t 0 0 1 –zT⋅t 0 0 0 1
xT 0 yT 0 zT 0 0T 1
⋅ T M( ⋅–t)⋅M
= = = =
S M⋅
sx 0 0 0 sy 0 0 0 sz
z1T
z2T z3T
⋅
sx⋅z1T sy⋅z2T sz⋅z3T
M S⋅
≠ s1 s2 s3 sx 0 0 0 sy 0 0 0 sz
⋅ sx⋅s1 sy⋅s2 sz⋅s3
= = = =
T t( )⋅S
1 0 0 tx 0 1 0 ty 0 0 1 tz 0 0 0 1
sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1
⋅
sx 0 0 tx 0 sy 0 ty 0 0 sz tz 0 0 0 1
= =
S T t⋅ ( )
≠
sx 0 0 0 0 sy 0 0 0 0 sz0 0 0 0 1
1 0 0 tx
0 1 0 ty 0 0 1 tz 0 0 0 1
⋅
sx 0 0 sxtx 0 sy 0 syty 0 0 sz sztz 0 0 0 1
= =
Rwl = xwl ywl zwl Rwc = xwc ywc zwc
pw = Rwl ⋅pl+twl
M us
te rlö
su ng
12. December 2012 2
Transformation Welt in Kamera:
In Matrixnotation:
Aufgabe 3: Markertracking
Aus den Punkten A, B und C werden die normierten Achsen , und bestimmt. Der Punkt A bes- chreibt den Ortsvektor des Ursprungs des Weltkoordinatensystems (in Kamerakoordinaten). Die gesuchte Trans- formation erhalten wir durch:
Aufgabe 4: Rotation
Betrachten wir die Rotationsmatrix als Koordinatentransformation, so wird ein Punkt von einem Start-Koordina- tensystem in ein Ziel-Koordinatensystem transformiert mit:
wobei die Spalten der Matrix die s-Achsen (in z-Koordinaten) und die Zeilen die z-Achsen (in s-Koordinaten) definieren.
Aufgabe 5: Intrinsische Parameter
Bei Verwendung von gluPerspective und glViewport ergibt sich ausmultipliziert folgende Matrix, die in Anlehnung an die BV-Notation als K notiert wird. Diese würde die Kamerakoordinaten in die Pixelkoordinaten abbilden, wenn die Homogenisierung erst ganz am Ende erfolgen würde. (Tatsächlich erfolgt sie in OpenGL vor der Viewport-Trans- formation).
pc = Rwc T⋅(pw–twc) pc = Rwc T⋅T(–twc)⋅T t( )wl ⋅Rwl ⋅pl
xc zc yc = zc×xc tcw
pc = T t( )cw ⋅Rcw⋅pw = xcyczctcw
ps
pz
α
cos –sinα 0 α
sin cosα 0
0 0 1
ps
⋅ Rzs⋅ps RszT⋅ps
= = =
ps α
x y
pz
xs ys
xsz cosα α sin
–
= ysz sinα
α
cos
=
α α
ps
xzs cosα α
sin
α =
α
ps
yzs –sinα α
cos
=
yz
xz
Projektion Linearkombination
12. December 2012 3
mit
Es gibt damit 3 intrinsische Parameter:
• Auflösung B und H des Bildes
• Der volle vertikale Öffnungswinkel der Kamera (in Grad!).
(Voraussetzung ist, dass das aspect ratio bei gluPerspective nicht willkürlich sondern durch festgelegt wurde.)
Aufgabe 6: Rendering-Pipeline
a. Als Beispiel verwenden wir das einfache Kameramodell (symmetrisches Frustum). Vereinfacht lautet die Render- ing-Pipeline dann:
Variante 1: Erst perspektivische Division, dann Viewport:
,
Variante 2: Perspektivische Division am Schluß:
b. Gegeben sind die Koordinaten eines Pixels in (diskreten) Bildschirmkoordinaten x, y und sein Tiefenwert z.
. Weiterhin sind die Matrizen zur Viewporttransformation , Projektion und die Viewmatrix bekannt.
Die Abbildung von Welt erreichen wir durch , wobei in der letzten Aufgabe gezeigt wurde, dass es egal ist, wo die perspektivische Division durchgeführt wird.
Die Weltkoordinate für einen Pixelpunkte berechnet sich daher mit der inversen Abbildung:
K
F H⋅ ---2 0 B
2--- – 0 F H⋅
---2 H ----2 –
0 0 1
= F θ
2--- cot
=
θ
B H⁄
p˜p
B --- 02 B
---2 0 H
----2 H ----2 0 0 1
H
---- FB⋅ 0 0
0 F 0
0 0 –1
iT jT kT
pw–tw
( )
⋅ ⋅ ⋅
=
pm x, H F⋅
---B io(pw–tw) ko(pw–tw) ---
⋅ –
=
pm y, F jo(pw–tw) ko(pw–tw) ---
⋅ –
=
pp x, B ---2 H F⋅
---2 io(pw–tw) ko(pw–tw) ---
⋅ –
=
pm y, H ----2 H F⋅
---2 jo(pw–tw) ko(pw–tw) ---
⋅ –
=
p˜p
B 2--- 0 B
2--- 0 H
----2 H ----2 0 0 1
H F⋅
--- iB ⋅ o(pw–tw) F j⋅ o(pw–tw)
ko(pw–tw)
–
⋅
H F⋅
--- i2 ⋅ o(pw–tw) B
--- k2 ⋅ o(pw–tw) –
H F⋅
--- j2 ⋅ o(pw–tw) H
---- k2 ⋅ o(pw–tw) –
ko(pw–tw)
–
= =
pp x, B ---2 H F⋅
---2 io(pw–tw) ko(pw–tw) ---
⋅ –
=
pm y, H ----2 H F⋅
---2 jo(pw–tw) ko(pw–tw) ---
⋅ –
=
pp = (x y z 1, , , )T MViewport P
V
pp = MViewport⋅ ⋅ ⋅P V pw
12. December 2012 4
mit anschließender Division durch die homogene Koordinate.
Anmerkung: die rekonstruierten Kamerakoordinaten orientieren sich an der schlechten Diskretisierung der Tiefen- werte im Tiefenpuffer. Wichtig ist auch, dass nicht die Inverse der ModelView-Matrix von OpenGL verwendet wird (sonst erhält man die lokalen Koordinaten), sondern nur die View-Matrix.
Aufgabe 7: Quaternionen
Und damit:
pw = V–1⋅P–1⋅MViewport–1 ⋅pp
c s n, ⋅
( )⋅(0 p, )⋅(c,–s⋅n) = s n p( o ),cp+s n( ×p)
(– )⋅(c,–s⋅n) =
sc n( op)
– +(cp+s n( ×p))osn,–s n( op)⋅(–sn)+c cp( +s n( ×p))+(cp+s n( ×p))×(–sn)
( ) =
sc n( op)
– +sc n( op)+s2(n×p)on,s2(nop)⋅n+c2p+sc n( ×p)+sc n( ×p)+s2n×(n×p)
( ) =
0 c, 2p+s2(n po )⋅n+2sc n( ×p)+s2n×(n×p)
( ) =
0,(1–s2)p+2sc n( ×p)+s2[(nop)⋅n+n×(n×p)]
( ) =
0 p, +2sc n( ×p)+s2[(n po )⋅n–p+n×(n×p)]
( ) =
0 p, +2sc n( ×p)+2s2n×(n×p)
( )
p' = p+2sc n( ×p)+2s2n×(n×p)
p+sinϕ⋅(n×p)+(1–cosϕ)⋅n×(n×p)
=
p+sinϕ⋅(n×p)+(1–cosϕ)⋅((pon)⋅n–p)
= p no
( )⋅n+cosϕ⋅(p–(pon)⋅n)+sinϕ⋅(n×p)
=