Università degli Studi di Roma “Sapienza”
Facoltà di Ingegneria
Laurea Magistrale in Ingegneria Informatica
Tesina del Corso di Visione e Percezione A.A. 2008-09
Studenti:
Luciano Blasi
Redjan Shabani
matr. 321716
matr. 1013173
Scopo del lavoro:
Stimare una nuvola di punti 3D di una scena e la posa della camera
che effettua le riprese, prendendo in esame corrispondenze di
punti tra immagini successive.
Sequenza di elaborazione:
1) Lettura della sequenza immagini ed estrazione delle features per ogni immagine
2) Calcolo delle corrispondenze tra features in coppie di immagini
3) Calcolo delle matrici fondamentali associate ad ogni coppia di immagini
4) Calcolo delle matrici delle camere in base alle stime delle matrici fondamentali
5) Triangolazione dei raggi dei punti corrispondenti per ottenere i punti dello spazio
6) Correzione degli errori sulle stime delle matrici delle camere e sulle stime dei punti
3D e ricostruzione proiettiva.
7) Passaggio dalla ricostruzione proiettiva alla ricostruzione affine
8) Passaggio dalla ricostruzione affine alla ricostruzione metrica
Riferimenti:
[1] Hartley R , Zisserman “A Multiple View Geometry In Computer Vision”, 2Ed.,2003
[2] A. Fusiello “Visione Computazionale”, Appunti delle lezioni ed. 2009
[3] Peter Kovesi Peter’s functions for Computer Vision
1) Lettura della sequenza immagini ed estrazione delle
features per ogni immagine
Le immagini sono state prese con pose camera “vicine” al fine di ottenere
features che fossero più facilmente coniugabili tra immagini successive.
Le features sono rilevate con il seguente algoritmo di Harris
(§ Alg. 9.2 in [2])
1) Calcolo delle derivate dell’immagine:
2) Calcolo di
e loro filtraggio con gaussiana
3) Per ogni punto calcolano la matrice delle misure di Harris:
4) Si calcolano le quantità :
5) Si effettua la soppressione dei non massimi locali facendo scorrere una
finestra centrata sul punto in esame.
6) Sogliatura sulla base di una frazione del valore massimo.
7) I punti risultanti sono i corner, punti di interesse.
L’implementazione (extractCorners.m) riceve un set di immagini
e restituisce gli insiemi di corner
Nota: in questo algoritmo l’operatore deve scegliere due parametri che hanno
impatto da valutare sulla qualità delle features estratte:
1) Grandezza del kernel gaussiano (o sua deviazione standard) che fissa la
scala spaziale alla quale si vogliono determinare i punti salienti
2) Soglia o numerosità dei punti salienti ottenuti.
2) Calcolo delle corrispondenze tra features in coppie di
immagini
La ricerca delle corrispondenze tra features su immagini diverse, è
basata sulla similarità.
L’implementazione (correlation.m) riceve in input le immagini
e i relativi set di corner
e restituisce i set di corrispondenze nella forma
dove
contiene le coppie corrispondenti nelle immagini
e
La funzione usa il codice matchbycorrelation.m descritto in [3],
Risultato del Harris-Corner-Detector applicato a due immagini consecutive
Risultato del calcolo delle corrispondenze dalle
precedenti immagini.
3) Calcolo delle matrici fondamentali associate ad ogni
coppia di immagini
La matrice fondamentale descrive tutta la geometria epipolare del sistema
definito dalla coppia di camere che osservano la scena. Vale:
La matrice fondamentale viene calcolata con l’algoritmo degli 8 punti
(§ Alg. 11.1 di [1]). Dati in input 8 o più corrispondenze di punti provenienti
da due immagini correlate, si eseguono i seguenti passi:
1) Normalizzazione: si trasformano le coordinate immagine x in base a
Dove la
è una matrice di traslazione e scalatura che
sposta il baricentro del set dei punti, nell’origine e scala le
coordinate degli
in modo che la somma delle
loro norme sia
.
2) Calcolo di
. Il calcolo di F passa attraverso la soluzione del
seguente sistema lineare:
Trovate le soluzioni del sistema con la decomposizione
SVD otteniamo:
In generale il
a causa del rumore. Superiamo il
problema decomponendo in SVD la
e ponendo il più piccolo
valore singolare a 0.
3) Denormalizzazione. La matrice
finale è:
L’algoritmo degli 8 punti è implementato in fundmat8p.m.
In letteratura non è consigliato andare avanti con la F così
calcolata. Si controlla per ogni match la relazione:
Se il risultato è “molto” differente dallo zero si segna come
outlier e si scarta dai match di interesse.
La funzione ranscfitfundmatrix.m di P.Kovesi [2], calcola la
matrice fondamentale degli inlier con l’ausilio di RANSAC.
Tale funzione richiede anche un parametro soglia che è
determinante per distinguere inliers da outliers.
Lo script multipleFundMat.m
è la versione plurale di
ranscfitfundmatrix.m. In
input richiede una serie di
set di corrispondenze.
Il calcolo restituisce una
serie di matrici fondamentali:
Visualizzazione dei feature correlati e raffinati
dopo il calcolo della matrice fondamentale
4) Calcolo delle matrici delle camere in base alle stime delle
matrici fondamentali
Le matrici di proiezione prospettica delle camere, definiscono la
relazione che sussiste tra punti 3D nel mondo e immagine di tali
punti nella camere considerate.
Date due matrici P,P’ associate ad una coppia di camere, la
matrice fondamentale che le lega è unica ed è data da:
dove
è la pseudo-inversa di P,
, con
Data la matrice F la coppia di camere ad essa associata è:
.
Nel caso di N viste successive è necessario calcolare le N matrici
delle camere a partire dalle matrici fondamentali. Per ogni
si calcolano le coppie di camere in forma canonica
.
Il sistema di riferimento dell’i-esima coppia sta nell’i-esima
camera.Bisogna quindi rototraslare per spostare il sistema di
riferimento nella prima camera. La funzione cameras.m riceve
in input un insieme di matrici fondamentali e restituisce l’insieme
delle coppie di matrici delle camere come descritto in precedenza.
5) Triangolazione dei punti corrispondenti per ottenere
i punti dello spazio
Con le matrici delle camere, si possono stimare i punti 3D dello
spazio dati i punti nelle immagini. Conoscendo l’immagine x di un
punto dello spazio X e la posa della camera, si costruisce il raggio
passante per il centro della camera ed il punto x. Analogamente si
costruisce il raggio associato a x’. L’intersezione dei due raggi è il
punto 3D. Dato che le immagini del punto non sono quelle del caso
ideale, i raggi difficilmente si intersecheranno tra loro. Si pone cosi
il problema di quale punto dello spazio scegliere come proiezione
delle due immagini. In [2] si descrive uno dei possibili metodi per
la triangolazione, chiamato metodo linear-eigen. Le matrici P e P’
vengono scritte nella seguente forma:
mettendo cosi in evidenza i vettori riga di
ciascuna delle due. Partendo dalle relazioni
di proiezione prospettica, si arriva alla relazione:
Nel caso ideale la soluzione e data dal nucleo
della matrice dei coefficenti. In realta i dati sono
affetti da rumore e si è costretti a determinare la
soluzione per mezzo della decomposizione SVD.
Ricostruzione proiettiva basata sulla coppia di foto viste prima
6) Correzione degli errori sulle stime delle matrici delle
camere e sulle stime dei punti 3D e ricostruzione proiettiva.
In presenza di molteplici viste l’errore in fase di triangolazione si cumula, sia per la
stima fatta alle matrici delle camere sia nel calcolo dei punti nello spazio proiettivo.
E’ necessario raffinare i risultati minimizzando l’errore nell’immagine. La minimizzazione
dell’errore viene fatta intervenendo sia sulle coordinate dei punti ottenuti per
triangolazione, sia sui parametri delle telecamere. La procedura e chiamata bundle
adjustment, descritta in [2]. Si cerca di spostare sia le N fotocamere che gli n punti 3D
affinchè la somma delle distanze tra il j-esimo punto riproiettato nell’i-esima fotocamera
ed il punto misurato sia il più piccolo possibile:
Nella Ri sarà necessario parametrizzare in modo che compaiano solo tre incognite
(es. gli angoli di Eulero), invece che tutti i nove elementi. Sempre in [2] si consiglia
applicare una strategia in due passi alternati:
Prima si tengono fermi i punti e si risolve rispetto alle telecamere e poi si fissano le
telecamere e si calcolano i punti 3D. Finita la procedura di minimizzazione degli errori,
le camere
e i punti
costituiscono la ricostruzione
proiettiva. Più precisamente, si dispone di una stima di struttura e moto a meno
di una trasformazione proiettiva.
Da ricostruzione proiettiva ad affine
Dati di ingresso, ricostruzione proiettiva in P3:
Dati di uscita, ricostruzione affine in A3:
(Pp,P’p,{Xpi})
(Pa,P’a,{Xai})
Le due ricostruzioni sono legate da un’opportuna trasformazione
proiettiva H, incognita, ma costante per tutti i punti.
Un piano che si trova all’infinito nella “vera” ricostruzione1,
viene rappresentato in P3 (nella nostra ricostruzione proiettiva)
da un 4-vettore omogeneo finito ∏. Trovare questo vettore ci
consente di determinare H, infatti:
1) In qualche modo determino le coordinate di questo ∏ nella mia
ricostruzione proiettiva P3
2) ∏ in A3 ha posizione canonica (0,0,0,1)T
3) Una H trasforma il piano ∏ in: H-T. ∏
4) Trovare H tale che H-T. ∏= (0,0,0,1)T, quindi
 I | 0
H 




5) Applico H trovato a (Pp,P’p,{Xpi}) e trovo:
Pa=PpH-1, Pa’=Pp’H-1, Xai=HXpi.
Nei problemi di ricostruzione derivata da dati reali, esiste una “vera” ricostruzione che consiste nei
veri punti Xi e nelle vere camere P,P’ che hanno generato le osservazioni misurate. L’insieme dei punti
ricostruiti X’i differiscono dagli Xi da un’opportuna trasformazione (proiettiva nel presente caso).
1
1)
Determinazione delle coordinate di ∏ in P3
Il metodo per determinare le coordinate di ∏ in P3 cambia a seconda
di quali informazioni vogliamo (o possiamo) sfruttare (§ pag.268-271 di [1]).
Ci limitiamo a considerare qui il caso in cui l’informazione che
vogliamo sfruttare è il parallelismo di alcune linee della scena.
Selezioniamo “opportunamente” alcune coppie di linee che sappiamo
essere parallele nella realtà e determiniamo le coordinate in P3 del
loro punto di fuga V (prima le coordinate nelle immagini v e v’ e poi
triangolando con le P,P’ note, otteniamo le coordinate in P3 di V - §
pag.60 di [2]).
L’”opportunamente” evidenzia il fatto che i punti V non devono
essere allineati in P3 per poter determinare ∏ (§ eq. 3.3 di [1]).
E’ da notare che non è necessario trovare i punti di fuga in entrambe
le immagini. Infatti chiamando v un punto di fuga individuato nella
prima immagine e l’ la corrispondente linea nella seconda immagine,
dal momento che i punti di fuga soddisfano i vincoli epipolari posso
calcolare il corrispondente punto di fuga v’ nella seconda immagine
come l’intersezione di l’ e la linea epipolare Fv di v. La costruzione
del punto V dello spazio P3 può essere espresso algebricamente come
la soluzione delle due equazioni: ([v]x.P)V = 0 e (l’.P’)X = 0
queste equazioni esprimono il fatto che V mappa v nella prima
immagine e ad un punto su l’ nella seconda immagine.
2)
∏ in A3 ha posizione canonica (0,0,0,1)T
Dimostriamo ora che il vettore (0, 0, 0, 1)T rappresenta
il piano all’infinito, cioè quel piano contiene tutti e soli i
punti (vettori) ideali.
1)
Un punto all’infinito è rappresentato da un
vettore del tipo (x1, x2, x3, 0)T.
2)
La condizione che un punto appartenga ad un
piano è che sia nullo il prodotto scalare tra punto
e piano (che equivale a scrivere per esteso
l’equazione omogenea del piano passante per il
punto)
3)
(0,0,0,1)T.(x1, x2, x3, 0) = 0
c.d.d.
3)
Una H trasforma il piano ∏ in: H-T. ∏
Come dimostrato nella slide precedente, l’appartenenza del
punto x al piano ∏ si scrive:
∏.x=0
Sia H una matrice omogenea 4x4 non-singolare.
E’ immediato verificare che ∏.H-1.H.x= ∏.x=0
Quindi i punti H.x giacciono tutti sul piano ∏.H-1 (piano che
si può anche scrivere come H-T.∏)
Quindi se
H trasforma un punto x in punto Hx
H trasforma un piano ∏ in piano H-T.∏
4) Trovare H tale che H-T. ∏= (0,0,0,1)T
E’ immediato verificare che con
vale:
quindi:
 I | 0
H 

  
HT . (0,0,0,1) = ∏
H-T . ∏= (0,0,0,1)T
ATTENZIONE:
questa formula non funziona se la coordinata finale di ∏ è zero (§ A4.2-pag.580 di [1]).
Da ricostruzione affine a metrica
Dati in ingresso, ricostruzione affine in A3:
(Pa=[M|m],Pa'=[M'|m'],{Xai})
Dati di uscita, ricostruzione metrica in E3: (Pe,P’e,{Xei})
I passi dell’algoritmo, sono:
1) In qualche modo individuo su qualche immagine la conica
assoluta w
2) Calcolo A, partendo da w e M con la fattorizzazione di
Cholesky dall'equazione: AAT = (MTwM)-1 e trovo H
 A1 
H 

1

3) Applico H trovato a (Pa,P’a,{Xai}) e trovo:
Pe’=Pa’H-1, Xei=HXai.
Pe=PaH-1,
1) Individuazione della conica assoluta w
Per determinare i coefficienti della matrice simmetrica w che
rappresenta la conica (assoluta) si usano combinazione delle
possibili tre fonti di vincoli seguenti:
1) Vincoli che derivano da ortogonalità sulle scene:
Un esempio è il punto di fuga per la direzione verticale (una
persona in piedi) e la linea di fuga del piano terra orizzontale (tra
loro subortogonali). Oppure un piano della scena fotografato
contenente informazioni metriche come una griglia quadrata.
2) Vincoli che provengono dalla conoscenza dei parametri interni.
Se la matrice di calibrazione di una camera è uguale a K,
allora l’immagine della conica assoluta è w = K-T.K-1
3) Vincoli che si presentano dalle stesse camere in tutte le
immagini (viste multiple).
Una delle proprietà della conica assoluta è che la sua proiezione
nelle immagini dipende solo dalla matrice di calibrazione della
camera e non dalla posa della camera.
Scarica

Come passare da una ricostruzione proiettiva ad una affine e poi ad