Contents — find the section you need
SLAM visivo, odometria visiva, geometria epipolare e PnP presuppongono tutti una mappatura corretta dalle coordinate dei pixel allo spazio 3D. Ma la luce che attraversa una lente non forma mai un'immagine come farebbe un foro stenopeico ideale. Qual è la lunghezza focale, in pixel? Quanto dista il punto principale dal centro dell'immagine? Quanto si incurva una linea retta sull'immagine? La calibrazione della telecamera è il processo di calcolo numerico di queste grandezze. Se la calibrazione è approssimativa, per quanto sofisticato sia l'algoritmo SLAM o SfM applicato, un errore sistematico si propaga a partire dalle fondamenta.
0. Riepilogo di 30 secondi
-
La calibrazione della fotocamera è il processo di stima dei parametri intrinseci (lunghezza focale, punto principale, inclinazione) e dei coefficienti di distorsione a partire da corrispondenze note tra punti 3D e punti immagine. I parametri estrinseci (la posizione della fotocamera in ogni scatto) vengono recuperati contemporaneamente.
-
Gli obiettivi presentano distorsione geometrica sia radiale che tangenziale. La rappresentazione standard è il modello Brown-Conrady, che esprime la distorsione radiale come k_1,k_2,k_3 e la distorsione tangenziale come p_1,p_2. Gli obiettivi grandangolari e fisheye richiedono un modello diverso.
-
Il metodo di Zhang – che consiste nello scattare foto di un pattern planare (come una scacchiera) da diverse angolazioni, risolvere linearmente i parametri intrinseci dall'omografia di ciascuna vista e poi perfezionare il risultato includendo la distorsione tramite ottimizzazione non lineare – è il metodo di calibrazione standard nella pratica.
-
La qualità della calibrazione viene valutata in base all'errore di riproiezione. Osservare solo il valore medio non è sufficiente: è necessario anche verificare la distribuzione spaziale dell'errore all'interno dell'immagine e la varianza tra le diverse pose, altrimenti si rischia di non rilevare distorsioni localizzate non completamente catturate.
La calibrazione non è una costante, valida per sempre una volta trovata. Zoom, messa a fuoco, temperatura, urti e variazioni di risoluzione o ritaglio possono alterare i parametri intrinseci. Le tecnologie Visual SLAM, VO e PnP a valle subiscono un degrado silenzioso quando questa ipotesi viene meno.
1. Riconsiderazione del modello a foro stenopeico a partire dalle coordinate
Un punto di coordinate del mondo \mathbf{X}=(X,Y,Z,1)^\mathsf{T} (coordinate omogenee) viene proiettato sull'immagine, in scala, nel modello a foro stenopeico come:
R\in SO(3) e \mathbf{t} rappresentano la rotazione e la traslazione dalle coordinate del mondo alle coordinate della telecamera (i parametri estrinseci), e K è la matrice intrinseca.
Qui f_x,f_y sono le lunghezze focali in pixel, (c_x,c_y) è il punto principale (dove l'asse ottico interseca il piano dell'immagine) e s è l'inclinazione (quasi zero sulla maggior parte dei sensori moderni). La calibrazione è il problema inverso del recupero di questo K, dei coefficienti di distorsione e di R,\mathbf{t} di ogni scatto, esclusivamente a partire dai dati osservati.
Come mostra il diagramma, una singola ripresa non è sufficiente a separare i parametri intrinseci da quelli estrinseci. Solo raccogliendo diverse osservazioni in diverse pose (inclinazione, distanza) è possibile definire K in modo quasi univoco — e questo è Esattamente l'idea centrale del metodo di Zhang, che tratteremo in seguito.
2. Una lente non è un foro stenopeico ideale: il modello di distorsione
Le lenti reali presentano distorsione radiale e tangenziale. Scrivendo le coordinate normalizzate dell'immagine come (x,y)=(X_c/Z_c,\,Y_c/Z_c) e il raggio come r^2=x^2+y^2, il modello di distorsione di Brown-Conrady può essere scritto come segue:
k_1,k_2,k_3 sono i coefficienti di distorsione radiale e p_1,p_2 sono i coefficienti di distorsione tangenziale. La distorsione radiale è un fenomeno per cui l'immagine si restringe o si incurva a seconda della distanza dal centro della lente, manifestandosi come la pronunciata distorsione a "barilotto" che si osserva con le lenti grandangolari o come la distorsione a "cuscino" che si osserva con i teleobiettivi. La distorsione tangenziale è una componente asimmetrica minore derivante dall'implementazione. Imperfezioni laddove il gruppo di lenti e il sensore di immagine non sono perfettamente paralleli. Le coordinate finali dei pixel si ottengono come \tilde{\mathbf{x}}_{px}=K(x_d,y_d,1)^\mathsf{T}.
3. Metodo di Zhang: Calibrazione con un pattern planare
Il metodo più diffuso oggi è quello di calibrazione con pattern planari, pubblicato da Zhengyou Zhang nel 2000. Non è necessario alcun sistema di calibrazione 3D speciale: basta fotografare un pattern planare, come ad esempio una scacchiera stampata, da diverse angolazioni, spostando la fotocamera o il pattern stesso.
La mappatura dal piano del pattern (considerando Z=0) in una data angolazione i all'immagine può essere scritta come un'omografia utilizzando la prima e la seconda colonna \mathbf{r}_1,\mathbf{r}_2 della matrice di rotazione e la traslazione \mathbf{t}.
Qui, la H_i di ciascuna posa può essere stimata linearmente a partire dai punti noti della griglia sul pattern e dalle loro corrispondenze con l'immagine, utilizzando il metodo DLT descritto nel Manuale di Omografia. Utilizzando il vincolo che le colonne della matrice di rotazione siano ortonormali — \mathbf{r}_1^\mathsf{T}\mathbf{r}_2=0,\ \|\mathbf{r}_1\|=\|\mathbf{r}_2\| — si ottiene un'equazione lineare in B=K^{-\mathsf{T}}K^{-1}:
che fornisce due equazioni di questo tipo per posa (\mathbf{h}_1,\mathbf{h}_2 sono la prima e la seconda colonna di H_i). Poiché B è una matrice simmetrica con 6 gradi di libertà, date 3 o più pose, B può essere trovata tramite il metodo dei minimi quadrati lineari, e successivamente K può essere trovata in forma chiusa attraverso una procedura equivalente alla decomposizione di Cholesky. Questo è il motivo per cui il metodo di Zhang richiede solo "poche inquadrature di un piano". Tuttavia, se tutte le pose sono quasi parallele al piano dell'immagine (fronto-parallele), le equazioni degenerano, quindi sono necessarie pose con diverse inclinazioni.
La soluzione in forma chiusa è solo un valore iniziale che ignora la distorsione. Da qui, l'approccio standard a due fasi in pratica affina tutti i parametri, inclusi i coefficienti di distorsione, tramite ottimizzazione non lineare (solitamente Levenberg-Marquardt) utilizzando l'errore di riproiezione descritto nella sezione successiva come funzione obiettivo.
- Errore di riproiezione e ottimizzazione dei parametri
La funzione obiettivo della calibrazione è minimizzare, per ogni posizione e per ogni punto della griglia, la differenza tra il pixel osservato e la posizione proiettata calcolata con i parametri stimati. Indicando con \mathbf{u}_{ij} l'osservazione nella posizione i, punto j, e con \mathbf{X}_j il corrispondente punto 3D noto sul piano,
è ciò che viene minimizzato. \boldsymbol{\kappa}=(k_1,k_2,k_3,p_1,p_2) è il vettore dei coefficienti di distorsione e \pi_d è la funzione di proiezione che include la distorsione. Le incognite sono numerose: K (4-5 gradi di libertà), \boldsymbol{\kappa} (3-5 gradi di libertà) e R_i,\mathbf{t}_i per posa (6 gradi di libertà × numero di pose), ma con un numero sufficiente di punti osservati, il problema è ben definito. Questa formulazione può essere vista come un caso speciale del framework "ottimizzazione congiunta della posa della telecamera e della struttura 3D" descritto nel Bundle Adjustment Primer. Poiché le coordinate dei punti 3D sono note e fisse nella calibrazione, si tratta di un sottoproblema più semplice rispetto al normale bundle adjustment.
È comune riportare il valore quadratico medio (RMS) dell'errore di riproiezione \left\|\mathbf{u}_{ij}-\hat{\mathbf{u}}_{ij}\right\| come "accuratezza della calibrazione", ma è rischioso considerare la calibrazione completata basandosi solo sul valore medio. Verificate sempre anche quanto segue:
- Se vi è varianza nell'errore medio di ciascuna posa (una posa con un errore particolarmente elevato a un angolo specifico suggerisce distorsione del pattern, sfocatura da movimento o illuminazione non uniforme)
- La distribuzione spaziale dell'errore all'interno dell'immagine (un errore sistematico che persiste ai bordi suggerisce che l'ordine o il tipo del modello di distorsione potrebbero essere insufficienti)
- La precisione sub-pixel del rilevamento dei punti della griglia (se il rilevamento degli angoli è instabile, nessuna ottimizzazione può distinguerlo dall'errore del modello)
5. Scheletro di implementazione in OpenCV
La tipica procedura di calibrazione con una singola fotocamera è la seguente. Fissare le condizioni di ripresa (risoluzione, zoom, messa a fuoco) e fotografare il pattern ai quattro angoli dell'immagine, al centro e con diverse inclinazioni, rappresenta il 90% di una buona calibrazione.
import cv2 as cv
import numpy as np
pattern_size = (9, 6) # number of internal corners
objp = np.zeros((pattern_size[0]*pattern_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)
objp *= square_size_m # measured side length of one square [m]
obj_points, img_points = [], []
for gray in calibration_images: # multiple frames shot at different poses
found, corners = cv.findChessboardCorners(gray, pattern_size)
if found:
corners = cv.cornerSubPix(gray, corners, (11, 11), (-1, -1),
(cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001))
obj_points.append(objp)
img_points.append(corners)
ret, K, dist, rvecs, tvecs = cv.calibrateCamera(
obj_points, img_points, gray.shape[::-1], None, None)
# ret is the RMS reprojection error [px]. Also compute per-pose error separately to check.
Per obiettivi grandangolari o fisheye, utilizzare la famiglia di API cv.fisheye.calibrate anziché la normale calibrateCamera. Per una configurazione stereo, utilizzare cv.stereoCalibrate per determinare la posizione relativa, oltre ai parametri intrinseci di entrambe le telecamere, e cv.stereoRectify per allineare le immagini sinistra e destra alle linee epipolari orizzontali. Questa procedura si collega direttamente al progetto di base descritto in Come funzionano le telecamere stereo e Come funzionano le telecamere di profondità.
6. Perché la deriva della calibrazione compromette i sistemi a valle
Gran parte dei calcoli matematici in Visual SLAM, VO e PnP si basa sul presupposto che i valori di calibrazione rimangano costanti finché le condizioni di ripresa non cambiano. La stima della matrice essenziale nel Manuale di geometria epipolare presuppone coordinate normalizzate K^{-1}\tilde{\mathbf{x}}; anche la minimizzazione dell'errore di riproiezione nel Manuale PnP considera K come nota. Se K o i coefficienti di distorsione non corrispondono più al sistema ottico reale, ognuno di questi calcoli viene di fatto eseguito con "il righello sbagliato".
Nello specifico, i valori di calibrazione si degradano silenziosamente per motivi quali i seguenti:
-
Variazioni di zoom/messa a fuoco: con un obiettivo la cui lunghezza focale varia, f_x,f_y cambia da uno scatto all'altro. Consentire il funzionamento dell'autofocus implica che i parametri intrinseci al momento della calibrazione e in fase di esecuzione non corrisponderanno.
-
Temperatura e urti meccanici: un leggero spostamento di posizione nel barilotto dell'obiettivo o nel supporto del sensore modifica il punto principale e i coefficienti di distorsione. Questo è particolarmente rilevante per applicazioni in esterni, automobilistiche e con droni.
-
Variazioni di risoluzione, ritaglio o zoom digitale: poiché K è un parametro in pixel, se l'immagine viene ridimensionata o ritagliata, anche f_x,f_y,c_x,c_y deve essere aggiornato in base alla scala. Dimenticare di farlo è un errore estremamente comune.
-
Deformazione di un rig di telecamera sinistra/destra: nelle configurazioni stereo, se la posa relativa (calibrazione estrinseca) – e non solo i parametri intrinseci – si sposta leggermente nel tempo, un errore sistematico si insinua nella profondità calcolata dalla disparità.
Questi errori sono difficili da notare in una singola stima di posa isolata. Ma nei sistemi che integrano sequenzialmente la posa nel tempo, come VO o SLAM, l'errore sistematico di riproiezione si accumula come deriva, producendo una mappa distorta che la chiusura del ciclo non può correggere completamente. Nei sistemi di produzione, è consigliabile monitorare la deriva di calibrazione online utilizzando punti di riferimento 3D fissi e noti (linee rette su un edificio, insegne di dimensioni note) o implementare una routine di ricalibrazione periodica.
7. Guasti comuni e contromisure
| Schema di guasto | Cosa succede | Contromisure |
|---|---|---|
| Insufficiente varietà di pose (solo scatti frontali) | K e la distorsione risultano mal determinate, in particolare k_3 e il punto principale | Scattare ai quattro angoli dell'immagine, al centro e con diverse angolazioni di inclinazione |
| Il pattern si deforma rispetto a un piano | Il presupposto stesso della calibrazione viene meno, diffondendo un errore sistematico | Montare l'immagine su un pannello rigido e piatto; correggere gli errori di scala di stampa tramite misurazione fisica |
| Scarsa precisione nel rilevamento degli angoli | Aumenta il livello minimo di errore di riproiezione indipendentemente dal potere espressivo del modello | Correzione sub-pixel, risoluzione sufficiente, gestione della messa a fuoco e dell'esposizione |
| Applicazione di un normale modello di distorsione a foro stenopeico a un obiettivo grandangolare | Errore divergente ai bordi dell'immagine, ottimizzazione instabile | Scegliere un modello adatto al campo visivo, come un modello fisheye |
Mancato aggiornamento di K dopo il ridimensionamento/ritaglio | Il punto principale e la lunghezza focale non sono sincronizzati con la scala, causando un errore sistematico nella stima della posa | Convertire K alla scala corrispondente ad ogni trasformazione dell'immagine |
Ignorare il rolling shutter | Il centro di proiezione effettivo differisce riga per riga, anche all'interno di un singolo fotogramma | Adottare un otturatore globale o correggere con un modello di temporizzazione per riga |
8. Riepilogo
La calibrazione della telecamera è il primo passo che trasforma un'immagine da "una semplice matrice 2D" in "un'osservazione geometricamente interpretabile". I parametri intrinseci ed estrinseci del modello a foro stenopeico, insieme ai coefficienti di distorsione radiale e tangenziale, vengono ricavati da osservazioni in diverse pose, come nel metodo a pattern planare di Zhang, e il tutto viene perfezionato con l'ottimizzazione non lineare dell'errore di riproiezione. La qualità di questa calibrazione non si riflette nella metrica di accuratezza di un singolo algoritmo, ma è il presupposto alla base di ogni equazione in ogni fase successiva: geometria epipolare, PnP, Visual SLAM, SfM, bundle adjustment. La calibrazione non è un rituale da eseguire una sola volta, ma fa parte di un processo che deve essere costantemente monitorato al variare delle condizioni di ripresa.
Un piccolo errore su una singola immagine di calibrazione è sufficiente?
L'adattamento potrebbe favorire questa interpretazione.
Verifica inclinazioni variabili, bordi dell'immagine e immagini di convalida separate.Riferimenti
- Zhang, A Flexible New Technique for Camera Calibration (IEEE TPAMI, 2000)
- Heikkilä & Silvén, A Four-step Camera Calibration Procedure with Implicit Image Correction (CVPR 1997)
- Hartley & Zisserman, Multiple View Geometry in Computer Vision (pagina ufficiale degli autori)
- OpenCV — Camera Calibration and 3D Reconstruction
- OpenCV — Camera Calibration tutorial
- OpenCV — fisheye calibration module
- Kalibr (strumento di calibrazione per fotocamera/IMU, repository ufficiale)
-
Commenti
Accedi per continuare.
Nessun dato disponibile.