u
v (0, 0)
(u0, v0)
Figura 8.2: Coordinate Immagine (Image coordinates)
x y
z
Figura 8.3: Coordinate Camera (Camera coordinates)
x y z
Figura 8.4: Esempio di coordinate “Veicolo” o “Mondo”: Front-Left-Up o ISO 8855 (World coordinates)
Quando si opera su problemi pratici risulta necessario passare da un sistema di riferimento solidale con la camera, dove il punto (0, 0, 0)> coincide con il fuoco (pin-hole), a un sistema di riferimento pi`u generico, che meglio si adatti alle esigenze dell’utilizzatore, dove la camera `e posizionata in un punto generico del “mondo” e orientata rispetto ad esso in modo arbitrario. Questo discorso si applica a qualsiasi sensore generico, anche non video, definendo delle relazioni che permettono di passare i punti da coordinate mondo a coordinate sensore e viceversa.
E necessario a questo punto fare una precisazione sulla terminologia legata ai sistemi di riferimento in questo libro: viene` definito come sistema di riferimento “mondo” il sistema che di volta in volta `e considerato assoluto e fisso, rispetto al quale viene posizionato il sensore. In figura8.4 per esempio l’origine del sistema “mondo” `e associato a un punto del veicolo (il punto frontale per esempio). In questo caso il sistema “veicolo” (body) o “mondo” (world ) sono sinonimi. Questa distinzione per`o viene meno nel caso in cui ci sia un veicolo in movimento rispetto a un “mondo” che nuovamente si pu`o definire il sistema di riferimento fisso. In tal caso avremo le coordinate sensore, quelle locali del veicolo/body e infine quelle del mondo.
Solitamente per`o il sistema di assi che contraddistingue sensore, veicolo e mondo viene mantenuto consistente.
Se in coordinate camera il ruolo speciale che assume la coordinata z `e dovuto a motivazioni puramente matematiche, ovvero all’uso di coordinate omogenee che in fase di proiezione obbliga la divisione delle prime due componenti per la terza, in coordinate “sensore” questo limite viene meno. Anche se non vincolante in nessuna maniera, in questo libro `e usato come
sistema “sensore”, “body” e “mondo” quello presentato in figura8.4(ISO 8855) che assegna all’asse z l’altezza del punto dal suolo.
Pertanto, per arrivare all’equazione definitiva della pin-hole camera si parte dall’equazione (8.4) e si applicano le seguenti considerazioni
• gli assi sono scambiati tra loro attraverso una permutazione Π (che `e comunque una rotazione) per ottenere il sistema di riferimento finale;
• il sensore deve essere ruotato attraverso una trasformazionewRbe di conseguenza non coincide con gli assi del sistema di riferimento “mondo”;
• il pin-hole non coincide ora con il punto (0, 0, 0)>ma giace in un generico punto t0= (x0, y0, z0)>espresso in coordinate mondo.
La conversione da coordinate “mondo” a coordinate “camera”, essendo una composizione di rotazioni, `e anche essa una rotazione di equazione R =cRw= ΠwR−1b .
Sia (xi, yi, zi)> un punto in coordinate “mondo” e (˜xi, ˜yi, ˜zi)> il medesimo punto in coordinate “camera”. La relazione che lega questi due punti si pu`o scrivere come
˜ xi
˜ yi
˜ zi
= R
xi yi
zi
− t0
= R
xi yi
zi
+ ˜t0 (8.15)
dove R `e una matrice 3 × 3 che converte da coordinate mondo a coordinate camera, tiene conto delle rotazioni e della variazione del segno degli assi tra coordinate mondo e coordinate camera (vedi appendiceA), mentre il vettore
˜t0= −Rt0 (8.16)
rappresenta la posizione del pin-hole t0 rispetto all’origine del sistema mondo, rappresentato per`o nel sistema di coordinate camera.
Va ricordato che le matrici di rotazione sono matrici ortonormali: hanno determinante 1, conservano pertanto distanze e aree, e l’inversa di una matrice di rotazione `e la sua trasposta.
La matrice R e il vettore t0possono venire accorpati in forma di matrice 3 × 4 sfruttando le coordinate omogenee. Grazie a questa rappresentazione, `e possibile scrivere in maniera estremamente compatta la proiezione di un punto, espresso in coordinate mondo, omogenee a (xi, yi, zi)>, in un punto di coordinate immagine, omogenee a (ui, vi)>:
λ
ui vi 1
= K[R|˜t0]
xi yi zi 1
(8.17)
Da questa equazione risulta abbastanza esplicito che ad ogni punto dell’immagine (ui, vi) sono associati infiniti punti del mondo (xi, yi, zi)> che vivono su una retta al variare del parametro λ.
Sottointendendo λ e raccogliendo le matrici si ottiene l’equazione finale della pin-hole camera (che non tiene, n´e deve tener conto, della distorsione):
ui
vi
1
= K[R|˜t0]
xi
yi
zi 1
= P
xi
yi
zi 1
(8.18)
avendo definito P = K[R|˜t0] matrice proiettiva (camera matrix ) che verr`a usata in seguito [Str87]. La matrice P `e una matrice 3 × 4 ed, essendo rettangolare, non `e invertibile.
E da sottolineare che ponendo un vincolo aggiuntivo sui punti, per esempio z` i= 0, la matrice P si riduce a una matrice 3 × 3, invertibile, che `e esattamente la matrice omografica (vedi sezione8.3.1) della trasformazione prospettica dei punti del suolo. La matrice Pz=0`e un esempio di trasformazione IPM (Inverse Perspective Mapping) per ottenere una vista dall’alto (Bird eye view ) della scena inquadrata [MBLB91].
La relazione inversa di quella di equazione (8.17), che trasforma punti immagine in coordinate mondo, si pu`o scrivere come:
xi
yi zi
= λR−1K−1
ui
vi 1
+ t0= λv(ui, vi) + t0 (8.19)
dove risulta ben evidente che a ogni punto dell’immagine corrisponde una retta (al variare di λ) nel mondo che passa per il pin-hole (t0) e diretta nella direzione
v(ui, vi) = R−1K−1
ui
vi
1
(8.20)
con v : R2 → R3 funzione che associa a ogni punto immagine il vettore che congiunge il pin-hole con il punto sensore corrispondente.
Usando direttamente la Camera Matrix P = [P3×3|p4] `e possibile ottenere un risultato equivalente all’equazione (8.19) nella forma
xi yi zi
= λP−13×3
ui vi 1
− P−13×3p4 (8.21)
in modo da non usare esplicitamente le matrici dei parametri intrinseci ed estrinseci. Le due formulazioni sono ovviamente equivalenti.
8.2.1 Propriet` a della matrice di rotazione
La matrice di rotazione verr`a spesso indicata nel testo, in modo da compattarne la scrittura, come array del linguaggio C:
R =
r0 r1 r2
r3 r4 r5
r6 r7 r8
La matrice di rotazione `e una matrice molto sovradimensionata: i suoi 9 parametri linearmente indipendenti sono di fatto generati da 3 variabili in modo non lineare (si veda appendice).
Senza esplicitare gli angoli da cui la matrice `e generata, risulta possibile fornire qualche vincolo aggiuntivo. La matrice di rotazione ha la propriet`a di non modificare le distanze essendo ortonormale e det(R) = 1. Ogni riga e ogni colonna devono avere modulo unitario, ed ogni riga e ogni colonna sono ortonormali tra loro, in quanto basi ortonormali dello spazio.
Conoscendo pertanto due vettori riga o colonna della matrice r1, r2 `e possibile determinare la terza base come prodotto vettoriale dei precedenti due:
r3= r1× r2 (8.22)
Allo stesso modo il prodotto scalare tra due vettori riga o due vettori colonna deve dare valore nullo, in quanto ortogonali tra di loro. Sotto tali vincoli, esistono due soluzioni esatte, di cui una `e:
R =
r0 r1 (1 − r02− r21)12 r3 r4 s(1 − r23− r42)12 (1 − r20− r23)12 s(1 − r21− r24)12 (r20+ r21+ r23+ r24− 1)12
(8.23)
dove s = sgn(r1r4+ r2r5), mentre l’altra soluzione ha esattamente i segni invertiti. Conoscendo una sottomatrice 2 × 2 `e possibile ricavare gli altri elementi della matrice stessa a meno di un segno, basandosi sempre sul fatto che ogni riga e colonna hanno norma unitaria.
8.2.2 Risultati Notevoli
Possiamo usare la matrice di rotazione e l’equazione della pin-hole (8.18) per mostrare qualche risultato notevole. Definiamo, dal sistema, la funzione fpmdi R3 in R2 chiamata perspective mapping definita come:
fpm(x, y, z) =
ku
r0x + r1y + r2z
r6x + r7y + r8z+ u0, kv
r3x + r4y + r5z r6x + r7y + r8z + v0
(8.24) funzione del modello della pin-hole camera scritta in maniera esplicita. Per semplicit`a si `e supposto il pin-hole coincidere con l’origine del sistema di riferimento.
I punti di fuga e calibrazione
Per ogni immagine esistono 3 punti di fuga, strettamente legati alla scelta degli assi di riferimento.
Prendiamo per esempio il primo asse. Nel nostro sistema di riferimento la coordinata x `e la distanza (per le altre 2 coordinate il discorso `e similare). Portiamo tale coordinata a infinito mantenendo le altre costanti. Quello che si ottiene `e il punto
lim
x→∞fpm(x, y, z) =
kur0
r6
+ u0, kvr3 r6
+ v0
(8.25) Usando le matrici omogenee `e possibile ottenere lo stesso risultato, con un formalismo pi`u compatto.
Prendendo la trasformazione prospettica (8.17) e mandando via via x → ∞, y → ∞ e z → ∞, i punti immagine (in coordinate omogenee) che si ottengono, rappresentati i punti di fuga nelle 3 direzioni, sono esattamente le colonne della matrice [vxvyvz] = K · R, ovvero :
vx = Kr1
vy = Kr2
vz = Kr3
(8.26)
avendo indicato con la sintassi ri le colonne della matrice R. Questo `e un primo esempio di calibrazione della camera che sfrutta una conoscenza dell’immagine, ovvero la posizione dei punti di fuga.
In particolare, ponendosi nel caso semplificato u0= 0, v0= 0 e kγ= 0, i punti di fuga si trovano in vx =
ku
r0 r6
, kv
r3 r6
vy =
kur1
r7
, kvr4 r7
vz =
kur2
r8
, kvr5 r8
(8.27)
E da notare che siccome le 3 colonne di R sono ortonormali basta conoscere 2 punti di fuga per ottenere sempre il terzo` (vedi sezione precedente).
Horizon Line
Se mandiamo a infinito non una variabile ma pi`u di una otteniamo pi`u di un punto. Per x → ∞ ma con y = mx il vanishing point degenera in una linea di equazione
kv(r3r7− r4r6)u + ku(r6r1− r7r0)v + kukv(r4r0− r3r1) = 0 (8.28) linea dell’orizzonte.
Punti e Linee degeneri
Come un punto nell’immagine proiettata degenera in una linea, una linea di equazione au + bv + c = 0 diventa nell’immagine proiettata
aku(r0x + r1y + r2z) + bkv(r3x + r4y + r5z) + c(r6x + r7y + r8z) = 0 ovvero
(aku r0+ bkvr3+ cr6)x + (akur1+ bkvr4+ cr7)y + (akur2+ bkvr5+ cr8)z = 0 (8.29) che rappresenta il piano degenere (con normale come da equazione) in tre dimensioni che passa per l’origine (il pin-hole).