Modello di correzione dell'obiettivo - PanoTools.org Wiki
Keywords: Lens correction model,Barrel distortion,Chromatic aberration,Clens,Cylindrical Projection,Depth of Field,EXIF,Field of View,Fisheye Projection,Fisheyes,Focal Length

# Modello di correzione dell'obiettivo

I panorama tools forniscono un modello molto flessibile per correggere gli errori geometrici più diffusi delle lenti. Per di più, sono anche spesso in grado di stimare i parametri di correzione direttamente dalle immagini del panorama.

In totale, i parametri che permettono di correggere un obiettivo, sono 6:

- il primo tra tutti è il campo inquadrato (FoV); non si tratta esattamente di un errore, ma di un parametro che determina la distorsione della prospettiva dell'immagine;
- gli effettivi parametri di correzione a, b e c che sono utilizzati per correggere la distorsione a barilotto, la distorsione a cuscinetto e anche la distorsione ondulata;
- i parametri di spostamento dell'obiettivo d ed e che permettono di correggere il decentramento dell'asse ottico dell'obiettivo rispetto al centro dell'immagine.

Due ulteriore parametri, intervengono sugli errori d'immagine che non sono causati da un obiettivo ma, per esempio, da uno scanner o da una fotocamera a scansione: si tratta dei i parametri di deformazione f e g.

### campo inquadrato

La lunghezza focale è una proprietà fisica delle lenti. Insieme alla dimensione effettiva della pellicola (o del sensore) e alla distanza focale, è possibile ricavare il valore approssimativo del campo inquadrato dell'immagine (esistono anche altri fattori che lo influenzano). ATTENZIONE: ritagliando un'immagine, se ne varia anche il campo inquadrato. Se si rende necessario ritagliare le immagini di partenza per la creazione di un panorama, lo si faccia con la stessa dimensione per tutte!

Il campo inquadrato insieme alla proiezione dell'obiettivo (rettilineare, fisheye o cilindrica per le fotocamere con obiettivi "swing") determinano la distorsione della prospettiva; quest'ultima diminuisce al diminuire del campo inquadrato. Consultare la pagina [1] di Helmut Dersch per informazioni sulle prospettive in funzione di diversi grandangoli.

### Parametri a, b e c di distorsione dell'obiettivo

Per un'ottica della fotocamera perfettamente rettilineare, sarebbe necessario conoscere esclusivamente il campo inquadrato. Risultati così perfetti possono essere raggiunti semplicemente mappando i pixel dell'immagine sul piano tangente. Gli obiettivi reali deviano da questa proiezione perfetta sul piano tangente. Le deviazioni spostano i punti fissi nella scena in una posizione diversa rispetto a dove dovrebbero ricadere. Fortunatamente, invece di essere casuali, le distorsioni si manifestano radialmente rispetto a un centro comune e la loro ampiezza è pressoché identica fissato il valore della distanza rispetto al centro stesso. Quindi, un modello che corregge questa deviazione in funzione del raggio, fornisce dei buoni risultati.

I parametri di distorsione dell'obiettivo a, b e c sono associato a una funzione polinomiale di terzo grado che descrive la distorsione radiale dell'obiettivo:

dove rdest e rsrc indicano la distanza normalizzata dal centro di un pixel dell'immagine. Il punto centrale da cui è calcolata questa distanza è quello in cui l'asse ottico incontra il piano dell'immagine: generalmente il centro dell'immagine. Normalizzato significa semplicemente che il cerchio più grande inscritto nell'immagine, ha un raggio pari all'unità (in altre parole, raggio=1,0 è la metà del lato più corto dell'immagine). Un obiettivo perfetto fornirebbe a=b=c=0,0 e d=1,0 che equivale a rsrc = rdest.

A volte la formula precedente è scritta come

che è equivalente.

Valori tipici per a, b e c sono inferiori a 1,0; nella maggior parte dei casi inferiori a 0,01. Valori troppo elevati indicano che è stato scelto un tipo errato di obiettivo, per esempio fisheye fisheye invece di rettilineare o viceversa. Naturalmente ci si sta riferendo ai valori assoluti dato che a, b e c possono essere positivi o negativi (per esempio sia 4,5 che -4,5 sono considerati valori troppo elevati).

Il quarto parametro (d) è disponibile solamente nel filtro di correzione dello spostamento radiale del plugin dei Panorama Tools. Questo parametro controlla la dimensione dell'immagine risultante ed è calcolato implicitamente da pano12 (utilizzato da PTOptimizer, PTStitcher e dalle interfacce grafiche) al fine di mantenere le stesse dimensioni d'immagine:

  d = 1 − (a + b + c)

Questo parametro non è quindi disponibile nelle diverse interfacce grafiche (è possibile trovarlo nello script creato da PTOptimizer).

Sfortunatamente esiste un altro parametro, denominato anch'esso d, che si riferisce allo spostamento dell'immagine negli script di PTStitcher, PTOptimizer e nelle interfacce grafiche. Questo causa a volte confusione (vedere l'approfondimento nel seguito).

L'approccio polinomiale così come è stato descritto, non è mai esatto ma fornisce una buona approssimazione del reale comportamento di uno specifico obiettivo. Se si necessita di correzioni più precise, si consiglia l'utilizzo di una matrice di distorsione, come quella utilizzata da Distortion Remove (vedere il collegamento più sotto).

#### Distorsione dell'obiettivo e proiezione fisheye

A differenza degli obiettivi rettilineari, quelli fisheye non seguono la geometria del piano tangente; presentano invece delle distorsioni incorporate e progettate per raggiungere degli ampi campi inquadrati. I parametri di distorsione radiale dell'obiettivo, sono utilizzati allo stesso modo sia per le lenti fisheye, sia per quelle rettilineari, ma non dovrebbero mai essere utilizzati interscambiabilmente (cioè per mappare un'immagine rettilineare in una fisheye e viceversa). Questo avviene selezionando la proiezione di partenza e quella di destinazione in modo appropriato. La geometria della proiezione fisheye, segue una funzione trigonometrica che varia rapidamente e che può essere essere approssimata con difficoltà da un polinomio di terzo grado.

Per le proiezioni fisheye, i parametri di correzione dell'obiettivo intervengono sulla deviazione tra una lente reale e la geometria ideale della proiezione fisheye.

### Parametri di decentramento d ed e dell'obiettivo o dell'immagine

A volte, può accadere che obiettivo e sensore non siano centrati l'uno rispetto all'altro. In questa eventualità, l'asse ottico non ricade nel centro dell'immagine. Questo è particolarmente frequente per le immagini acquisite con uno scanner e per le quali non è dato di sapere se la carta è centrata o meno nell'apparecchio.

Se il precedente algoritmo di correzione è utilizzato per immagini di quest'ultimo tipo, sia la correzione dell'obiettivo, sia la correzione della prospettiva, agiscono sul centro sbagliato. I parametri di decentramento d (spostamento orizzontale) ed e (spostamento verticale) compensano il problema; essi rappresentano il valore, espresso in pixel, che indica lo spostamento del centro di correzione rispetto al centro geometrico dell'immagine.

### Parametri di deformazione g e t

La deformazione dell'immagine non è una distorsione dell'obiettivo ma fa comunque parte del modello di correzione dell'obiettivo fornito dai panotools: agisce sulla distorsione indotta da scanner o da fotocamere a scansione che causa la deformazione a parallelogramma (un lato dell'immagine è spostato parallelamente a quello opposto) un'immagine rettangolare.

### Calcolo della correzione dell'obiettivo

Le grandezze a, b, c e FoV rappresentano delle proprietà fisiche di un obiettivo o di una combinazione di fotocamera e obiettivo a una specifica distanza di messa a fuoco. Se si scatta sempre con le stesse impostazioni della messa a fuoco, per esempio a infinito o alla distanza iperfocale, allora è possibile riutilizzare tranquillamente i parametri. A diverse impostazioni della messa a fuoco, il FoV varia notevolmente, ma in genere è comunque possibile riutilizzare i parametri a, b e c.

Esistono diversi metodi per determinare i parametri a, b, c e il fov per una particolare combinazione di obiettivo e fotocamera:

- scattando una foto singola di un oggetto che possiede delle linee rette, definendo poi una o più coppie di punti di controllo su linea retta (tipo t3, t4, ecc...), e ottimizzando solamente i parametri a, b e c. È necessario impostare il formato di output in proiezione rettilineare perché questa tecnica funzioni. Tale metodo è utilizzato dall'autore di PTLens;

- scattando una singola fotografia di un oggetto rettangolare; selezionando poi diversi punti di controllo orizzontali e verticali e ottimizzando rollio, inclinazione, imbardata, fov, a, b e c. È necessario impostare il formato di output in proiezione rettilineare perché questa tecnica funzioni. Il procedimento è simile a questo esempio di fotografia architettonica con hugin:

- scattando due o più immagini sovrapposte e selezionando diversi punti di controllo normali, ottimizzando poi rollio, inclinazione, imbardata, fov, a, b e c. Questa tecnica funzione con qualsiasi formato di proiezione dell'output ma richiede delle immagini senza errore di parallasse scattate esattamente dal punto nodale. Per ottenere una misura precisa del campo inquadrato, è necessario riprendere un intero panorama a 360°;

- utilizzando uno strumento come PTLens o clens per leggere i dati EXIF dal file JPEG e correggere automaticamente l'immagine recuperando i valori associati all'obiettivo in un database esistente.

### Ottimizzare la correzione dell'obiettivo

Se si ottimizzano dei parametri al fine di calibrare un obiettivo, occorre avere bene in mente le seguenti considerazioni:

dato che i parametri per la correzione dell'obiettivo sono determinati stimando la distorsione per diversi valori del raggio, è necessario fornire un numero sufficiente di punti di controllo a una distanza piuttosto elevata rispetto al centro dell'immagine.

- Se si utilizza un elemento rettangolare o delle linee rette per questo scopo, assicurarsi di aver individuato i punti di controlli a diverse distanze dal centro.
- Se si utilizzano due o più immagini, assicurarsi di sovrapporre le regioni che sembrano avere la maggiore distorsione (per esempio gli angoli) con le regioni che sembrano avere la minore distorsione (per esempio il centro). Una semplice sovrapposizione in orizzontale dovrebbe essere sufficiente, ma si consiglia di prevedere almeno il 50% di sovrapposizione in modo che la parte centrale di un'immagine corrisponda al bordo di quella adiacente.

I parametri a, b e c influenzano il campo inquadrato, in particolar modo per le immagini nell'orientamento in stile paesaggio. Questo accade anche se il calcolo implicito del quarto parametro del polinomio tenta di conservare le stesse dimensioni dell'immagine dato che è possibile solamente per il raggio r_src = 1,0.

Al di fuori di questo raggio, specialmente agli angoli dell'immagine, la dimensione, e quindi il campo inquadrato, può essere diversa. Dato che sono correlate in questo modo, si dovrebbe sempre ottimizzare anche il FoV, quando si ottimizzano a, b e c con più di una immagine (non è possibile ottimizzare il FoV con una sola immagine). Come già detto in precedenza, è necessario un panorama completo a 360° per ottenere una misura accurata del campo inquadrato.

I parametri a e c controllano delle forme più complesse di distorsione. Nella maggioranza dei casi è sufficiente ottimizzare solamente il parametro b, che è utile alla correzione della distorsione a barilotto e a cuscinetto.

Se si desidera conoscere come sia influenzata la correzione della distorsione dalla variazione dei parametri, si consiglia di recarsi a questo indirizzo internet http://www.4pi.org/downloads/ e di scaricare il file abc.xls; le macro all'apertura del documento non devono essere disattivate.

Consultare anche la pagina sulla distorsione a barilotto di Helmut Dersch.

Esiste un'ottima guida su come ottimizzare creata da John Houghton: [2]

### Strumenti per correggere la distorsione a barilotto e a cuscinetto

- PTStitcher può essere programmato per elaborare in serie le immagini con dei parametri a, b e c noti. Può anche essere utilizzato con una delle varie interfacce grafiche.

- nona o nona_gui (entrambi forniti con la distribuzione di hugin) possono essere utilizzati allo stesso modo di PTStitcher.

- Il plugin per Gimp o Photoshop del filtro di correzione dello spostamento radiale dei Panorama Tools utilizza gli stessi parametri a, b e c di PTStitcher. Si noti che non riconosce i parametri d ed e di spostamento e che utilizza invece "d" come un fattore di scala globale, che dovrebbe essere d = 1-(a+b+c) per mantenere l'immagine approssimativamente nella stessa scala. Se è necessario spostare il centro di correzione come per i parametri d ed e, è necessario combinarlo con il valore del decentramento Verticale e/o orizzontale.

- PTLens è un plugin di Photoshop e uno strumento indipendente per Windows che utilizza gli stessi parametri a, b e c e comprende un database degli obiettivi più diffusi.

- Clens è una versione a linea di comando di PTLens.

- fulla è uno strumento da linea di comando che utilizza gli stessi parametri a, b, c e d per correggere la distorsione a barilotto. È anche in grado di correggere l'aberrazione cromatica e la vignettatura contemporaneamente.

- PTShift determina diversi parametri a, b e c per ognuno dei tre canali di colore in modo da correggere l'aberrazione cromatica con il filtro di correzione dello spostamento radiale.

- Il plugin di Gimp "wideangle" utilizza una formula completamente diversa per correggere la distorsione.

- Il plugin di Gimp "phfluuh" è un altro strumento che corregge la distorsione di un obiettivo utilizzando un'altra formula ancora.

- CamChecker è uno strumento che permette di determinare la distorsione dell'obiettivo e di creare un gruppo diverso di parametri da qualsiasi altra cosa.

- zhang_undistort è uno strumento distribuito con hugin che utilizza i parametri di CamChecker per correggere la distorsione.

- Distortion Remove utilizza un approccio completamente differente avvalendosi di una matrice di distorsione. Pagina con testo solo in tedesco: http://www.stoske.de/digicam/Artikel/verzeichnung.html

Tratto e tradotto da "http://wiki.panotools.org/Lens_correction_model"