Lab 1 Kamerageometri med Eigen 26.01.2017
Del 1: Introduksjon til Eigen 2
Eigen 3 C++ bibliotek for lineær algebra http://eigen.tuxfamily.org/ «Template bibliotek» «Header only» Flerplatform, Ingen linking! Godt dokumentert! https://eigen.tuxfamily.org/dox/ https://eigen.tuxfamily.org/dox/asciiquickreference.txt https://eigen.tuxfamily.org/dox/group TutorialMatrixClass.html 3
Bli kjent med Eigen Lag deg noen vektorer og matriser tt = 1.0 0.0 3.0 AA = 1.0 0.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 II = TT = 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 AA tt 0 1 BB = AA TT 4
Bli kjent med Eigen Lek litt med koeffisientindeksering tt = 1.0 0.0 3.0 Sett til 2.0 AA = 1.0 0.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 5
Bli kjent med Eigen Blokkoperasjoner Lag en vektor fra en rad i AA = 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Lag en vektor fra en kolonne i AA = 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Lag en matrise fra den midterste 2x2 submatrisen i TT Hva skjer med AA og TT om dere endrer disse vektorene/matrisene? 6
Bli kjent med Eigen Matrise- og vektoraritmetikk Legg to vektorer/matriser sammen Multipliser to matriser sammen Ta prikkproduktet av to vektorer Ta kryssproduktet av to vektorer Ta koeffisientvis multiplikasjon mellom to matriser 7
Bli kjent med Eigen Reduksjonsoperasjoner Ta summen av alle koeffisientene i en matrise Beregn minimumsverdien i en matrise Finn posisjonen til denne koeffisienten Lag en vektor som gir minimumsverdien i hver kolonne i en matrise Finn L1- og L2-normen til en vektor Finn antall koeffisienter i en matrise som er større enn en gitt verdi 8
Bli kjent med Eigen Mer avansert bruk Ta en titt på Map https://eigen.tuxfamily.org/dox/group TutorialMapClass.html Lag en std::vector med tall, og bruk dette minnet som en Eigen matrise Ta en titt på select() https://eigen.tuxfamily.org/dox/classeigen_1_1densebase.html#aaec49d2 1e1bf32797180e5d21a489f98 Lek litt med lineær algebra https://eigen.tuxfamily.org/dox/group DenseLinearSolvers chapter.html 9
Del 2 Kamerageometri 10
Pose Posen til BB relativt til AA kan representeres med en projektiv transformatsjon AATT BB SSSS 3 Egenskaper ξ T A A R t = 0 1 A A B B B B p= ξ p p = T p A A B A A B B B A A B A A B ξc = ξb ξc TC = TB TC A A 1 ξb TB
Pose En av egenskapene til pose er å transformere punkter (husk homogen representasjon) p = T A A B B p A B x x A A A B y RB t B y = A B z 0 1 z 1 1
Euler vinklene yaw, pitch, roll Euler vinkler brukes gjerne til å beskrive hvordan et referansesystem er orientert relativt til et annet Mange alternativer f.eks yaw-pitch-roll From http://en.wikipedia.org/wiki/euler_angles
Euler vinklene yaw, pitch, roll Yaw = Rotasjon mot klokka en vinkel αα om z-aksen Pitch = Rotasjon mot klokka en vinkel ββ om y-aksen Roll = Rotasjon mot klokka en vinkel γγ om z-aksen 1 0 0 cos β 0 sin β cosα sinα 0 Rx( γ) = 0 cosγ sinγ Ry( β) = 0 1 0 Rz( α) = sinα cosα 0 0 sinγ cosγ sin β 0 cos β 0 0 1 Orienteringen til body-frame BB relativt til en referanse-frame WW W ( αβγ,, ) = ( α) ( β) ( γ) R R R R B z y x cosαcos β cosαsin βsinγ sinαcosγ cosαsin βcosγ + sinαsinγ = sinαcos β sinαsin βsinγ + cosαcosγ sinαsin βcosγ cosαsinγ sin β cos βsinγ cos βcosγ
Problem
Det vi vet om BB Kjøretøyet er 6m langt, 3m bredt og 2m høyt. Body frame BB er plassert i sentrum av kjøretøyet med Body x-aksen peker fremover Body y-aksen peker til venstr Body z-aksen peker oppover Pose til BB relative til WW er gitt ved xx = 15.0mm yy = 10.0mm zz = 1.5mm yaaaa = 210.0 rrrrrrrr = 0.0 ppppppppp = 0.0
Det vi vet om CC Kameraet står fast på kjøretøyet Kamera framen CC er som vanlig Kamera x-aksen peker til høyre Kamera y-aksen peker nedover Kamera z-aksen peker fremover Pose til CC relativt til BB er gitt ved xx = Half of vehicle length yy = 0.0 zz = Half of vehicle height yaaaa = 90.0 ppppppppp = 0.0 rrrrrrrr = 90.0 The camera captures images with rrrrrrrr = 120 cccccccc = 160 The camera intrinsics are known ff uu = 80 ff vv = ff uu ss = 0 cc uu = cccccccc/2 cc vv = rrrrrrrr/2
Hvordan løse problemet Bruk perspektiv kamera modellen til å projisere punktene inn i bildet WW uu = PP XX WW uu = KK RR tt XX ff uu ss cc uu WW uu = 0 ff vv cc vv RR tt XX 0 0 1 Husk at RR tt 00 1 = CC TT WW 1 WW = TT CC WW Bestem TT CC ut fra de angitte posene WW WW BB TT CC = TT BB TT CC WW Bestem TT BB ut fra beskrivelsen av pose til til BB relative til WW BB Bestem TT CC ut fra beskrivelsen av pose til til CC relative til BB Beregn kameramatrisen P = KK RR tt og bruk den til å projisere verdenspunkter inn i bildet
Hvordan løse problemet Tips Rotasjonsmatrisen RR xx γγ kan genereres ved Eigen::AngleAxisd( γγ * M_PI / 180, Eigen::Vector3d::UnitX()) Rotasjonsmatrisen RR yy ββ kan genereres ved Eigen::AngleAxisd( ββ * M_PI / 180, Eigen::Vector3d::UnitY()) Rotasjonsmatrisen RR zz αα kan genereres ved Eigen::AngleAxisd( αα * M_PI / 180, Eigen::Vector3d::UnitZ()) BB Represent the pose of CC relative to BB by a Euclidean projective transformation TT CC WW Compute the pose of CC relative to WW as TT CC Compute the camera matrix P = KK RR tt and use it to project points into the image