Contents — find the section you need
Spostando leggermente la telecamera lateralmente e riprendendo la stessa scena, gli oggetti vicini si spostano maggiormente rispetto allo sfondo rispetto a quelli più distanti. Questa parallasse permette di ricostruire la forma 3D e il movimento della telecamera a partire da immagini 2D. Tuttavia, non basta semplicemente far corrispondere "lo stesso punto fisico" tra le immagini. Nelle immagini reali, ricche di discrepanze, distorsioni dell'obiettivo, rotazioni pure, piani e oggetti in movimento, è necessario determinare quali coppie di punti siano coerenti con un singolo movimento della telecamera. La geometria epipolare è il linguaggio comune per fare proprio questo.
Non si tratta solo di misurazione stereoscopica. Structure from Motion (SfM), Visual Odometry, Visual SLAM, AR plane tracking, autolocalizzazione dei robot e la ricostruzione sparsa di COLMAP si basano tutti su corrispondenze e geometria proiettiva. Questo articolo mantiene un linguaggio univoco per quanto riguarda i sistemi di coordinate, spiegando il significato di ciascuna matrice, quale stimatore scegliere e quando non ci si deve fidare del risultato.
Esempio di veicolo con telecamera stereoImmagine: Subaru WRX S4 2.0GT-S EyeSight (Tokumeigakarinoaoshima, CC BY-SA 4.0), Wikimedia Commons. Vista esterna, non un primo piano dei componenti interni della telecamera.
0. Riepilogo di 30 secondi
-
Il piano formato dai centri di due telecamere e da un punto 3D è chiamato piano epipolare. Questo piano taglia ogni immagine come una linea, quindi un punto corrispondente in un'immagine può apparire solo su quella linea — la linea epipolare — nell'altra immagine.
-
Per le immagini non calibrate, la matrice fondamentale F soddisfa \mathbf{x}'^\mathsf{T}F\mathbf{x}=0. In coordinate normalizzate con parametri intrinseci noti, viene utilizzata la matrice essenziale E=[\mathbf{t}]_\times R. E recupera la rotazione R e la direzione della traslazione, ma una singola coppia monoculare a due viste non può recuperare la scala assoluta della traslazione.
-
L'algoritmo normalizzato a 8 punti è una stima iniziale lineare di facile implementazione; l'algoritmo a 5 punti è un risolutore minimale che richiede meno corrispondenze per una telecamera calibrata. Entrambi sono sensibili alle discrepanze, quindi in pratica si rimuovono i valori anomali con RANSAC/USAC e si valuta con l'errore di riproiezione.
-
La triangolazione trova l'intersezione di due linee della vista, ma la profondità diventa instabile quando la parallasse è piccola, la linea di base è corta o il rumore dell'immagine è elevato. Dopo la stima, la regolazione a fascio affina congiuntamente le pose della telecamera e i punti 3D.
Per una scena solo planare o una telecamera quasi puramente rotante, un'omografia H descrive bene le immagini e il recupero della traslazione/profondità tramite F/E degenera. La selezione del modello non dovrebbe basarsi solo sul conteggio degli inlier: verificare insieme residui, parallasse, distribuzione spaziale e chiralità.
1. Scrittura della proiezione a due viste dalle coordinate
Sia un punto di coordinate del mondo la coordinata omogenea \mathbf{X}=(X,Y,Z,1)^\mathsf{T}. La proiezione della telecamera a foro stenopeico, fino alla scala, è scritta
Qui \tilde{\mathbf{x}}=(u,v,1)^\mathsf{T} è la coordinata omogenea dell'immagine, K è la matrice intrinseca, mentre R\in SO(3) e \mathbf{t} sono le coordinate estrinseche tra il sistema di riferimento del mondo e quello della telecamera. Tipicamente:
dove f_x,f_y sono le lunghezze focali in pixel, (c_x,c_y) è il punto principale e s è l'inclinazione. Una volta corretta la distorsione, la coordinata normalizzata dell'immagine è \mathbf{x}=K^{-1}\tilde{\mathbf{x}}. Da qui in poi, si consideri la telecamera sinistra come riferimento con P_1=K[I\mid\mathbf{0}] e la telecamera destra come P_2=K[R\mid\mathbf{t}].
Nella figura, C,C' sono le telecamere centri, e il segmento CC' è la linea di base. Il piano definito dal punto X e dai due centri interseca il piano dell'immagine sinistra come la linea epipolare l e il piano dell'immagine destra come l'. Una volta trovato il punto corrispondente \mathbf{x} nell'immagine sinistra, la regione di ricerca 2D nell'immagine destra si riduce a una singola linea. Per una coppia stereo rettificata, tale linea è orizzontale e la ricerca di corrispondenza diventa una ricerca 1D lungo la stessa linea di scansione.
2. La matrice essenziale e la matrice fondamentale
Concentrandoci esclusivamente sulla posa estrinseca, consideriamo le coordinate calibrate e normalizzate (\mathbf{x},\mathbf{x}'). La direzione della linea di vista dalla telecamera sinistra al punto è \mathbf{x}, e nel sistema di riferimento della telecamera destra è R\mathbf{x}. Il fatto che il vettore di traslazione \mathbf{t} e le due linee di vista giacciano sullo stesso piano può essere espresso come un triplo prodotto scalare nullo:
Qui [\mathbf{t}]_\times è la matrice antisimmetrica del prodotto vettoriale.
Questa E=[\mathbf{t}]_\times R è chiamata Matrice Essenziale. E non è una matrice 3\times3 arbitraria: ha rango 2, con il vincolo che i suoi due valori singolari non nulli siano uguali. Proiettando tramite SVD nella forma E=U\operatorname{diag}(s,s,0)V^\mathsf{T} si recupera questo vincolo fisico.
Nel caso non calibrato, utilizzando direttamente le coordinate dei pixel grezzi,
e F è la matrice fondamentale. F\tilde{\mathbf{x}} fornisce la linea epipolare l' nell'immagine a destra, e F^\mathsf{T}\tilde{\mathbf{x}}' fornisce la linea l nell'immagine a sinistra. Poiché F assorbe i parametri intrinseci, è utile per la verifica geometrica di coppie di immagini, ma l'interpretazione della posa in unità metriche richiede la calibrazione.
| Matrice | Coordinate | Quantità nota richiesta | Vincolo di forma | Risultato | Utilizzo principale |
|---|---|---|---|---|---|
| F | Coordinate omogenee dei pixel grezzi | Nessuna | rango 2, 7 gradi di libertà | Linee epipolari | SfM non calibrato, verifica della corrispondenza |
| E | K^{-1}\tilde{\mathbf{x}} | K di entrambe le telecamere | rango 2, valori singolari (s,s,0) | Direzione di R e \mathbf{t} | VO, SLAM, stereo calibrato |
| H | Pixel su un piano o sottoposti a pura rotazione | Modello planare o di rotazione | Generalmente 8 gradi di libertà | Deformazione planare | Piani AR, unione di immagini |
Cosa ci dice l'epipolo
Il punto in cui il centro della telecamera destra si proietta nell'immagine sinistra è l'epipolo sinistro \mathbf{e}, che soddisfa F\mathbf{e}=0. Analogamente F^\mathsf{T}\mathbf{e}'=0. Se l'epipolo si trova all'interno dell'immagine, le linee epipolari convergono radialmente, indicando che la telecamera si è spostata approssimativamente in avanti o indietro. Se si trova all'infinito, le linee sono quasi parallele, indicando un movimento quasi laterale. Questa è una diagnosi utile, ma una stima errata da sola può anche produrre una posizione dell'epipolo innaturale, quindi non si dovrebbe mai determinare il movimento basandosi solo su questo.
3. Stima della matrice dalle corrispondenze: l'algoritmo a 8 punti
Una singola corrispondenza \tilde{\mathbf{x}}=(u,v,1)^\mathsf{T} e \tilde{\mathbf{x}}'=(u',v',1)^\mathsf{T} fornisce un vincolo lineare sui nove elementi di F. Ad esempio, con \mathbf{f}=\operatorname{vec}(F)
Sovrapponendo otto o più corrispondenze nella matrice A, l'algoritmo a 8 punti seleziona il vettore singolare più piccolo di A\mathbf{f}=0. Il nome deriva dal fatto che otto corrispondenze soddisfano i gradi di libertà, ma nel caso reale e rumoroso, con il metodo dei minimi quadrati si utilizzano molti più punti.
La risoluzione con le coordinate dei pixel grezze porta a un malcondizionamento dovuto all'entità dei valori delle coordinate. L'algoritmo di Hartley a 8 punti normalizzato normalizza l'insieme di punti di ciascuna immagine con trasformazioni di similarità T,T' in modo che il baricentro sia zero e la distanza media sia \sqrt{2}, risolve in quello spazio e infine recupera
Inoltre, calcolando la decomposizione ai valori singolari (SVD) del risultato F e azzerando il valore singolare più piccolo, si impone il rango 2. Questo può sembrare un dettaglio di implementazione minore, ma influisce fortemente sulla stabilità della soluzione.
Se calibrato, lo stesso principio permette di costruire una stima iniziale di E a partire dalle corrispondenze normalizzate. Tuttavia, la soluzione lineare a 8 punti non soddisfa automaticamente il vincolo più stringente sui valori singolari della Matrice Essenziale. Si calcola E=U\operatorname{diag}(\sigma_1,\sigma_2,\sigma_3)V^\mathsf{T} e lo si sostituisce con \operatorname{diag}((\sigma_1+\sigma_2)/2,(\sigma_1+\sigma_2)/2,0) per proiettarlo.
4. L'algoritmo a 5 punti: Riduzione del campione minimo dopo la calibrazione
La matrice essenziale ha 5 gradi di libertà. L'algoritmo a 5 punti è un risolutore minimale che trova un insieme finito di candidati E a partire da 5 corrispondenze; il metodo di Nistér sostituisce lo spazio nullo nei vincoli polinomiali, enumerando fino a 10 candidati di soluzione reali. Sia la derivazione che l'implementazione sono più complesse rispetto all'algoritmo a 8 punti, ma il vantaggio di necessitare di soli 5 punti per ipotesi RANSAC è molto elevato.
Dato un rapporto di inlier pari a w, una probabilità che un singolo campionamento contenga solo inlier pari a w^s, una probabilità di fallimento pari a p e una dimensione minima del campione pari a s, la stima del numero di iterazioni necessarie è:
Per w=0.5,p=0.01: s=8 richiede circa 1177 iterazioni, mentre s=5 ne richiede circa 145. In pratica, questo confronto non è diretto, poiché metodi come PROSAC estraggono campioni in ordine di qualità di corrispondenza e terminano in modo adattivo. Tuttavia, il valore dell'algoritmo a 5 punti è evidente in ambienti con un basso rapporto di inlier.
La funzione findEssentialMat di OpenCV fornisce gli algoritmi RANSAC/LMEDS insieme alle implementazioni della famiglia a 5 punti, mentre recoverPose gestisce la decomposizione dei candidati e il controllo di chiralità. Per gli sviluppatori, confermare se l'input è non distorto/normalizzato e quali unità di coordinate utilizza la soglia è più importante del fatto che "abbiamo chiamato l'algoritmo a 5 punti".
5. RANSAC: Utilizzo della geometria assumendo valori anomali
Algoritmi di corrispondenza come SIFT, ORB, SuperPoint e LoFTR producono discrepanze dovute a texture ripetute, riflessi, griglie ripetitive e occlusioni. L'adattamento di F a tutte le corrispondenze tramite il metodo dei minimi quadrati consente a un piccolo numero di errori di compromettere l'intera matrice. RANSAC ripete i seguenti passaggi:
-
Selezionare casualmente un insieme minimo di corrispondenze e formulare un'ipotesi F o E.
-
Calcolare il residuo per ogni corrispondenza, contrassegnando quelle entro una determinata soglia come inlier.
-
Mantenere l'ipotesi con il supporto maggiore, ovvero quella con il punteggio di robustezza migliore.
-
Ristimare utilizzando tutti gli inlier finali e, se necessario, affinare con l'ottimizzazione non lineare.
Non è consigliabile impostare la soglia del vincolo epipolare utilizzando solo l'errore algebrico \mathbf{x}'^\mathsf{T}F\mathbf{x}, poiché dipende dalla scala di F. In pratica, si utilizza comunemente la distanza di Sampson
in alternativa. Si tratta di un'approssimazione di primo ordine dell'errore geometrico, ovvero una misura normalizzata della distanza di ciascuna corrispondenza dalla sua linea epipolare. La soglia in coordinate pixel dipende dalla risoluzione dell'immagine, dalla precisione della localizzazione dei punti chiave, dalla distorsione residua e dalla sfocatura. Non esiste un valore universale di "1 px". La si regola visualizzando l'istogramma dei residui e la distribuzione spaziale dei punti anomali nell'immagine.
L'attuale versione di OpenCV offre anche la stima robusta della famiglia USAC. Combinando il campionamento ordinato per qualità, l'ottimizzazione locale e i controlli di degenerazione, può essere più veloce e stabile del semplice RANSAC. Tuttavia, il rifiuto statistico dei punti anomali non può mai superare l'assunto che "la maggior parte segua un singolo movimento statico di corpo rigido". Se la maggior parte dell'immagine è occupata da un veicolo in movimento o da una persona, è necessario aggiungere altre informazioni come maschere semantiche, segmentazione del movimento, IMU o profondità.
6. Decomposizione di E in posa e scelta del candidato corretto
Per una E=U\operatorname{diag}(s,s,0)V^\mathsf{T} corretta, utilizzando
si ottengono i candidati di rotazione R=UWV^\mathsf{T} o UW^\mathsf{T}V^\mathsf{T} e i candidati di direzione di traslazione \pm U_{:,3}. Ci sono 4 combinazioni di segno e rotazione. Ciò che conta qui è che il solo vincolo delle due viste le renda tutte algebricamente coerenti con la stessa E.
La selezione utilizza la chiiralità (profondità positiva). Per ogni candidato, si triangola un piccolo numero di inlier e si sceglie quello che fornisce Z>0 per il maggior numero di punti in entrambi i frame della telecamera. Inoltre, verificare se il determinante della matrice di rotazione è +1, se l'errore di riproiezione è piccolo e se la parallasse è sufficiente. Un limite da ricordare in particolare: \mathbf{t} può essere recuperato solo a meno di una direzione. Scalando \mathbf{t} e tutti i punti 3D con lo stesso fattore, la proiezione rimane invariata. Una base stereo nota, l'odometria delle ruote, l'IMU, un oggetto di dimensioni note o il GNSS possono fornire la scala.
7. Triangolazione: da due raggi a un punto 3D
L'equazione di proiezione \mathbf{x}\times(P\mathbf{X})=\mathbf{0} produce due equazioni indipendenti per vista. La triangolazione DLT risolve il sistema lineare A\mathbf{X}=0, ottenuto dalla sovrapposizione di due viste, tramite SVD; è semplice e triangulatePoints di OpenCV è simile a questa forma. Ad esempio, indicando con \mathbf{p}_{ij}^\mathsf{T} la riga j di P_i, un punto (u_i,v_i) fornisce
Prima di dividere per la componente omogenea alla fine, verificare che w non sia estremamente piccolo.
Per una coppia stereo orizzontale rettificata, questo è più intuitivo. Con disparità d=u_L-u_R (la differenza di coordinate orizzontali tra sinistra e destra), lunghezza focale f e linea di base B,
L'errore di profondità è approssimativamente \delta Z\simeq \frac{Z^2}{fB}\delta d. Più un oggetto è distante e più corta è la lunghezza focale o la linea di base, maggiore sarà l'errore di profondità derivante dallo stesso errore di disparità di 1 pixel. Pertanto, anziché limitarsi a "corrisponde, quindi aggiungiamolo alla nuvola di punti", è preferibile utilizzare l'angolo di triangolazione, la disparità, l'errore di riproiezione e la profondità positiva come criteri di qualità.
La triangolazione lineare fornisce solo una stima iniziale: non minimizza correttamente il rumore dell'immagine. L'ottimizzazione a fasci (bundle adjustment), che ottimizza congiuntamente le pose della telecamera P_i e i punti \mathbf{X}_j, risolve
dove \rho è una funzione di perdita robusta come Huber o Cauchy, e \pi è la divisione prospettica. Questo è il motivo per cui le ricostruzioni ottenute con COLMAP, Theia o Ceres Solver risultano più precise. Per fissare il grado di libertà, posizionare la prima telecamera all'origine e, se necessario, fissare una scala nota.
8. Scelta tra geometria epipolare e omografia
Quando ogni punto della scena giace su un singolo piano \pi , o la telecamera subisce una rotazione pura, la corrispondenza tra le immagini è ben descritta da un'omografia 3×3 \tilde{\mathbf{x}}'\sim H\tilde{\mathbf{x}} . Se calibrata, con la normale \mathbf{n} e la distanza d del piano,
In caso di rotazione pura, il termine di traslazione si annulla e H=KRK^{-1} . Per un poster, una scrivania, la facciata di un edificio o una ripresa panoramica di una scena lontana, H diventa un modello eccellente ed è la prima scelta naturale per gli ancoraggi planari AR e la composizione di immagini.
Tuttavia, la stima di F/E da dati esclusivamente planari può generare molti punti di riferimento apparenti senza riuscire a separare stabilmente la struttura 3D dalla traslazione. Al contrario, forzare una scena generica non planare in un singolo H comporta distorsioni incoerenti tra oggetti vicini e lontani. In pratica, è consigliabile stimare sia F/E che H con RANSAC e confrontare i residui, il numero di punti spiegati, la distribuzione dei punti e la parallasse dopo la ricostruzione. Se si decide se accettare un modello basandosi solo sul conteggio delle corrispondenze, si rischia di essere attratti da una grande parete planare o da un piano che domina il centro dell'immagine.
Situazione | Primo candidato | Risultato | Avvertenze |
|---|---|---|---| | Calibrato, 3D generale, traslazione presente | E + algoritmo a 5 punti | Posa relativa, profondità sparsa | Scala indeterminata, instabile a bassa parallasse | | Coppia di immagini non calibrate | F + algoritmo normalizzato a 8 punti | Linee epipolari, verifica della corrispondenza | Non interpretare la posa fisica senza K | | Quasi planare, poster, scrivania | H + algoritmo a 4 punti | Deformazione planare, candidati per posa planare | Nessuna profondità fuori dal piano | | Rotazione pura / panorama | H | Allineamento e rotazione dell'immagine | Traslazione e profondità non osservabili |
Mappa 3D nota con osservazioni 2D | PnP + RANSAC | Posa assoluta | Dipende dalla qualità e dalla scala della mappa |
9. La calibrazione non è una fase di pre-elaborazione, ma parte integrante del modello
Scatta una griglia a scacchiera, Charuco o AprilTag a diverse distanze, inclinazioni e posizioni dell'immagine per stimare K e i coefficienti di distorsione. La distorsione radiale di Brown-Conrady è approssimativamente espressa, per un raggio normalizzato r^2=x^2+y^2, come
Per obiettivi grandangolari e fisheye, non forzare un modello standard di distorsione a foro stenopeico: scegli il modello fisheye di OpenCV o uno adattato all'obiettivo in uso. Anche quando l'errore medio di riproiezione della calibrazione è piccolo, la struttura dell'errore può variare ai bordi dell'immagine, a diverse lunghezze focali, con la temperatura, con la messa a fuoco o con le variazioni di risoluzione.
Prima di procedere con l'elaborazione a due viste, verificare che i valori di calibrazione siano stati ottenuti con la stessa risoluzione, ritaglio e zoom digitale dell'immagine acquisita. È facile confondere la stima di E da punti normalizzati tramite undistortPoints con la stima di F da immagini non distorte. Verificare sempre se un'API utilizza internamente la lunghezza focale, il punto principale e la distorsione, oppure se si aspetta coordinate già corrette. Per una configurazione stereoscopica, oltre ai parametri intrinseci di entrambe le telecamere, calcolare la posa relativa con stereoCalibrate e raddrizzare le linee epipolari in orizzontale con stereoRectify.
10. Una pipeline minimale in OpenCV
Di seguito è riportato lo schema per ottenere la posa relativa e un set di punti 3D sparsi e filtrati in base alla qualità da due fotogrammi di una telecamera monoculare calibrata. Utilizza ORB per l'estrazione delle caratteristiche, ma può essere sostituito con SIFT o un algoritmo di corrispondenza basato sull'apprendimento automatico a seconda delle condizioni di acquisizione. In pratica, si dovrebbero registrare anche l'esposizione, gli oggetti in movimento e la sincronizzazione temporale.
import cv2 as cv
import numpy as np
# K, dist are values calibrated for this capture resolution and lens
orb = cv.ORB_create(nfeatures=3000)
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
matches = cv.BFMatcher(cv.NORM_HAMMING).knnMatch(des1, des2, k=2)
good = [m for m, n in matches if m.distance < 0.75 * n.distance]
p1 = np.float32([kp1[m.queryIdx].pt for m in good])
p2 = np.float32([kp2[m.trainIdx].pt for m in good])
# threshold is in pixel units. Decide it from the residual distribution, not an initial guess.
E, mask = cv.findEssentialMat(p1, p2, K, method=cv.USAC_MAGSAC,
prob=0.999, threshold=1.0)
in1, in2 = p1[mask.ravel() != 0], p2[mask.ravel() != 0]
count, R, t, pose_mask = cv.recoverPose(E, in1, in2, K)
# P1, P2 are for normalized coordinates. Scale is arbitrary, so t's length is not a physical unit.
n1 = cv.undistortPoints(in1.reshape(-1, 1, 2), K, dist).reshape(-1, 2)
n2 = cv.undistortPoints(in2.reshape(-1, 1, 2), K, dist).reshape(-1, 2)
P1 = np.hstack([np.eye(3), np.zeros((3, 1))])
P2 = np.hstack([R, t])
X4 = cv.triangulatePoints(P1, P2, n1.T, n2.T)
X = (X4[:3] / X4[3]).T
# Further filter by positive depth in both views, reprojection error, and triangulation angle.
z1 = X[:, 2]
z2 = (R @ X.T + t).T[:, 2]
valid = (z1 > 0) & (z2 > 0) & np.isfinite(X).all(axis=1)
Questo esempio passa i pixel grezzi e K direttamente a findEssentialMat, ma se la distorsione non è trascurabile, è necessario prima passare i punti normalizzati da undistortPoints e poi passare alla forma API corrispondente. È inoltre un errore trattare \mathbf{t} restituito da recoverPose come una "distanza percorsa". Le applicazioni che necessitano di una scala devono vincolarla con una linea di base nota, VIO, odometria delle ruote, un sensore di profondità o simili.
COLMAP implementa l'estrazione delle caratteristiche, la corrispondenza, la verifica geometrica, la mappatura incrementale e il bundle adjustment come un'unica pipeline connessa. Per set di dati di piccole dimensioni, è possibile esaminare il modello della telecamera e la ricostruzione tramite l'interfaccia grafica. Dalla riga di comando, la scelta del modello della telecamera, la gestione della lunghezza focale EXIF, la strategia di corrispondenza (esaustiva/sequenziale/ad albero del vocabolario) e l'intervallo di tempo tra le coppie di immagini influenzano sia la precisione che il costo computazionale. Dopo la ricostruzione, verificare non il conteggio dei punti, ma il numero di immagini registrate, l'errore medio di riproiezione, il conteggio delle osservazioni per immagine e le lacune nella nuvola di punti.
11. Condizioni di errore comuni e come diagnosticarle
Parallasse ridotta, assenza di linea di base
Con un movimento in avanti, una scena distante o un intervallo tra i fotogrammi breve, è possibile ottenere corrispondenze senza ottenere la profondità. Se le linee epipolari appaiono plausibili ma l'angolo di triangolazione è prossimo allo zero, è meglio non aggiornare la profondità forzatamente. Le soluzioni fondamentali consistono nell'aumentare la distanza tra i fotogrammi chiave, acquisire osservazioni con movimento laterale o utilizzare un sistema stereo con una linea di base nota.
Rotazione pura o degenerazione planare
Nelle panoramiche o in un campo visivo contenente solo una parete, H ha un potere esplicativo. Un elevato numero di punti inlier per E non significa necessariamente che sia stata osservata una traslazione. Registra la competizione tra H e E e applica il gate al tasso di profondità positivo e alla parallasse mediana dopo la triangolazione. Nel tracciamento di poster AR, questo non è un errore, ma la corretta selezione del modello.
Discrepanze, pattern ripetitivi, riflessi
Finestre, piastrelle, librerie, schermi LCD e superfici d'acqua producono descrittori locali simili. Sovrapponi il test del rapporto, la corrispondenza del vicino più prossimo reciproco e il RANSAC geometrico e verifica se i punti inlier sono distribuiti su tutta l'immagine. Le immagini speculari e gli oggetti trasparenti violano l'assunto di riflettanza lambertiana del corpo rigido, quindi nessuna regolazione della soglia vi salverà.
Oggetti dinamici e movimenti multipli
RANSAC seleziona solo il movimento più grande. Se lo sfondo è minoritario, potrebbe finire per stimare il movimento di un'auto. A seconda dell'applicazione, è possibile scegliere tra l'esclusione semantica di persone/veicoli, il raggruppamento del flusso ottico, l'esecuzione di una stima multi-modello o l'allineamento con la profondità/IMU.
Distorsione dell'obiettivo, rolling shutter, asincronia
L'utilizzo di un bordo grandangolare non corretto lascia una curvatura sistematica nelle linee epipolari. Con il rolling shutter durante i movimenti rapidi, l'assetto cambia all'interno di un singolo fotogramma, quindi un singolo E è solo un'approssimazione. Anche un leggero scostamento nella temporizzazione dell'esposizione sinistra/destra per una coppia stereo produce una disparità spuria per gli oggetti in movimento. Considera l'otturatore globale, la breve esposizione, un modello di temporizzazione per riga, la correzione basata su IMU e la sincronizzazione hardware.
Errori numerici e di sistema di coordinate
Confondere le coordinate pixel con quelle normalizzate, confondere il sistema di coordinate mondo-camera con quello camera-mondo per R,\mathbf{t}, invertire l'ordine dei punti sinistra/destra e dimenticare di aggiornare K dopo aver ridimensionato un'immagine sono tutti errori comuni. Non accettare i valori stimati passivamente: sovrapponi le corrispondenze e le linee epipolari e automatizza i controlli per la profondità positiva in entrambe le telecamere, l'errore di riproiezione, \det R=1 e R^\mathsf{T}R\simeq I.
12. Metriche di valutazione pratiche e una checklist di progettazione
Non considerare la stima a due viste un successo solo perché "è stata restituita una matrice". Il conteggio delle corrispondenze è falsato dalla quantità di texture e il solo errore medio può nascondere alcuni punti positivi. Salvare i seguenti dati per ogni fotogramma consente di distinguere in seguito dove si è verificato un errore nella catena sensore/matcher/stima della posa:
- Conteggio dei rilevamenti, conteggio dei superamenti del test di rapporto, conteggio/rapporto degli inlier RANSAC, distribuzione tra le celle della griglia dell'immagine
- Distanza di Sampson mediana e percentile superiore ed errore di riproiezione, tasso di profondità positiva, distribuzione dell'angolo di triangolazione
- Conteggio del supporto e punteggio di robustezza per H rispetto a E/F e motivo per cui un modello è stato accettato o rifiutato
- Ampiezza della rotazione stimata, continuità temporale della direzione di traslazione, coerenza con un sensore esterno scalato
- Tempo di esposizione, guadagno, velocità angolare dell'IMU, offset temporale sinistra/destra, metrica di sfocatura, rapporto della maschera dell'immagine
Per la ricerca o la valutazione del prodotto con dati di riferimento disponibili, riportare separatamente l'errore di rotazione relativo, l'errore di direzione di traslazione, l'ATE/RPE della traiettoria e l'errore di profondità assoluto/relativo. Poiché la traslazione monoculare a due viste presenta ambiguità di scala, è necessario specificare chiaramente se l'errore si verifica dopo la normalizzazione o dopo l'allineamento Sim(3). Piuttosto che escludere i frame non riusciti dalla media, indicare in quale condizione di degenerazione o visiva si è verificato ciascun errore comunica in modo più onesto i limiti del sistema.
13. Sviluppi recenti: l'apprendimento ha sostituito la geometria?
Punti chiave e descrittori basati sull'apprendimento (SuperPoint), algoritmi di corrispondenza dal generale al particolare (LoFTR) e stima di corrispondenza generica (LightGlue e simili) possono produrre un numero maggiore di corrispondenze candidate rispetto ai descrittori classici in presenza di texture ridotte o variazioni di punto di vista. Tuttavia, le corrispondenze restituite da una rete possono comunque essere errate e le ambiguità fisiche del movimento della telecamera, dei piani, del rolling shutter e della scala non scompaiono. Nell'ambito pratico di SfM/SLAM, una configurazione ibrida che verifica l'output di un algoritmo di corrispondenza basato sull'apprendimento tramite una stima robusta di E/F/H più il bundle adjustment rimane la scelta più pratica.
A un livello più ampio, le rappresentazioni di scene neurali/esplicite come NeRF e 3D Gaussian Splatting sfruttano anch'esse la coerenza tra più viste. Queste consentono una sintesi di viste innovative e interessanti, ma sono sensibili alla qualità della posa della telecamera e alla geometria di osservazione, e molte implementazioni si inizializzano con pose derivate da COLMAP. La ricerca continua a concentrarsi sulla stima congiunta di corrispondenze, profondità, segmentazione, dati inerziali e modelli di temporizzazione per ambienti dinamici, riflessivi e su larga scala.
Pertanto, la decisione di adottare un modello più recente non dovrebbe basarsi solo sul "il numero di corrispondenze è aumentato rispetto a ORB?", ma dovrebbe anche considerare la distribuzione degli inlier post-stima, l'errore di posa, la latenza di calcolo, i requisiti della GPU, i guasti al di fuori delle condizioni di addestramento e le licenze. La geometria non è una fase di pre-elaborazione obsoleta; rimane il verificatore che controlla l'output di un modello appreso rispetto alla struttura 3D reale.
14. Conclusione
La geometria epipolare è il framework che eleva le corrispondenze tra due immagini da "punti che sembrano più simili" a "punti spiegabili da un singolo movimento della telecamera". Se le proprietà intrinseche sono note, si procede alla posa relativa tramite E=[\mathbf{t}]_\times R; in caso contrario, si verificano le linee epipolari e le corrispondenze con F. L'algoritmo a 8 punti è il fondamento per la comprensione e l'inizializzazione, l'algoritmo a 5 punti è un efficiente risolutore minimale per una stima robusta, RANSAC è il meccanismo che presuppone la presenza di valori anomali e la triangolazione più il bundle adjustment sono il ponte verso il 3D.
Tuttavia, in assenza di parallasse, con un solo piano, pura rotazione, molti oggetti in movimento o forte distorsione/asincronia, la matrice restituita non garantisce una profondità o una traslazione fisicamente significative. Progettare la selezione del modello in base all'omografia, gestire le condizioni di calibrazione, verificare l'errore di riproiezione e la profondità positiva e fondere i dati con la scala esterna in un'unica pipeline è ciò che porta a una visione artificiale riproducibile.
Una linea epipolare determina in modo univoco una corrispondenza?
Restringe la ricerca a una linea. Le immagini devono comunque localizzare il punto e la ripetizione o l'occlusione possono generare ambiguità.
## Riferimenti (Fonti primarie e documentazione ufficiale) - [Hartley & Zisserman, Multiple View Geometry in Computer Vision (pagina ufficiale dell'autore)](https://www.robots.ox.ac.uk/~vgg/hzbook/) - [Longuet-Higgins, A computer algorithm for reconstructing a scene from two projections (1981, Royal Society)](https://royalsocietypublishing.org/doi/10.1098/rspa.1981.0136) - [Hartley, In Defense of the Eight-Point Algorithm (IEEE TPAMI, 1997)](https://doi.org/10.1109/34.601246) - [Nistér, An Efficient Solution to the Five-Point Relative Pose Problem (IEEE TPAMI, 2004)](https://doi.org/10.1109/TPAMI.2004.17) - [Fischler & Bolles, Random Sample Consensus (Communications of the ACM, 1981)](https://doi.org/10.1145/358669.358692) - [OpenCV — Tutorial sulla geometria epipolare](https://docs.opencv.org/4.x/da/de9/tutorial_py_epipolar_geometry.html) - [OpenCV — calib3d: findEssentialMat / recoverPose](https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html) - [Documentazione ufficiale COLMAP](https://colmap.github.io/) - [Schönberger & Frahm, Structure-from-Motion Revisited (CVPR 2016)](https://openaccess.thecvf.com/content_cvpr_2016/html/Schoenberger_Structure-From-Motion_Revisited_CVPR_2016_paper.html) - [Sarlin et al., LightGlue (ICCV 2023)](https://openaccess.thecvf.com/content/ICCV2023/html/Lindenberger_LightGlue_Local_Feature_Matching_at_Light_Speed_ICCV_2023_paper.html)
Commenti
Accedi per continuare.
Nessun dato disponibile.