Pin-Hole Camera

In questo capitolo viene affrontato il problema di descrivere il processo attraverso il quale la luce incidente sugli oggetti viene impressa su un sensore digitale. Tale concetto è fondamentale nell'elaborazione delle immagini, in quanto fornisce la relazione che lega i punti di un'immagine con la loro posizione nel mondo; ovvero, permette di determinare la zona del mondo associata a un pixel dell'immagine o, viceversa, di individuare l'area dell'immagine che raccoglie una determinata regione in coordinate mondo.

Il modello proiettivo universalmente accettato, detto della Pin-Hole Camera, è basato su semplici rapporti geometrici9.1.

In figura 9.1 è mostrato uno schema molto semplificato di come avviene la formazione dell'immagine sul sensore. Il punto osservato $(x_i,y_i,z_i)^{\top}$, espresso in coordinate camera, viene proiettato sul piano del sensore. Tutti questi raggi passano per uno stesso punto: il centro di proiezione (pin-hole).

Figura: Il modello di camera pin-hole. Un punto mondo espresso in coordinate camera viene proiettato sul piano immagine.
Image fig_pinhole

Analizzando la figura 9.1, si osserva come i rapporti tra i triangoli simili generati dai raggi ottici descrivano l'equazione che permette di proiettare un generico punto $(x_i,y_i,z_i)^{\top}$, espresso in coordinate camera (uno dei sistemi di riferimento in cui si può operare), sul piano del sensore:

\begin{displaymath}
\begin{bmatrix}
\tilde{u}_i \\
\tilde{v}_i
\end{bmatrix}=
\frac{f}{z_i}
\begin{bmatrix}
x_i \\
y_i
\end{bmatrix},
\end{displaymath} (9.1)

dove $f$ è la distanza focale, ovvero la distanza tra il pin-hole e il sensore.

È da precisare che le coordinate $(x_i,y_i,z_i)^{\top}$, espresse in coordinate camera, in questo libro seguono la regola della mano sinistra (molto usata in computer graphics), contrapposta alla regola della mano destra (più usata in applicazioni robotiche), scelta invece per esprimere le coordinate mondo. La coordinata $z_i$ rappresenta quindi la profondità del punto lungo l'asse ottico della camera.

Definendo

\begin{displaymath}
\tilde{x}_i = \frac{x_i}{z_i},
\qquad
\tilde{y}_i = \frac{y_i}{z_i},
\end{displaymath} (9.2)

le coordinate $(\tilde{x}_i,\tilde{y}_i)$ sono dette coordinate immagine normalizzate. Esse rappresentano l'intersezione del raggio ottico con il piano immagine posto a distanza unitaria dal centro di proiezione e sono indipendenti dai parametri intrinseci della camera, dalla risoluzione dell'immagine e dalle dimensioni fisiche del sensore.

L'equazione (9.1) può quindi essere espressa anche come

\begin{displaymath}
\begin{bmatrix}
\tilde{u}_i \\
\tilde{v}_i
\end{bmatrix}=
f
\begin{bmatrix}
\tilde{x}_i \\
\tilde{y}_i
\end{bmatrix}.
\end{displaymath} (9.3)

Le coordinate normalizzate costituiscono dunque uno spazio intermedio tra la geometria tridimensionale della scena e le coordinate discrete dell'immagine. Molti algoritmi di visione artificiale, come la stima della posa, la triangolazione e la geometria epipolare, assumono che i punti immagine siano espressi in questo sistema di riferimento.

Le coordinate sensore $(\tilde{u}_i,\tilde{v}_i)^{\top}$ non sono ancora le coordinate dell'immagine digitale, bensì coordinate “intermedie”, espresse nelle unità fisiche del sensore. È quindi necessario applicare un'ulteriore trasformazione per ottenere le coordinate immagine:

\begin{displaymath}
\begin{bmatrix}
u_i \\
v_i
\end{bmatrix}=
\begin{bmatrix}
D...
...v}_i
\end{bmatrix}+
\begin{bmatrix}
u_0 \\
v_0
\end{bmatrix},
\end{displaymath} (9.4)

dove le coordinate $(u_0,v_0)$ (principal point) tengono conto dello scostamento dell'origine delle coordinate nell'immagine memorizzata rispetto alla proiezione del centro ottico sul sensore.

$D_u$ e $D_v$ sono fattori di conversione tra le unità del sistema di riferimento del sensore, tipicamente espresse in unità metriche, e quelle dell'immagine, espresse in pixel. Nel caso di pixel quadrati, i due fattori di conversione coincidono.

In mancanza di informazioni (reperibili dai vari datasheet) su $f$, $D_u$ e $D_v$, c'è la tendenza ad accorpare queste variabili in due nuovi parametri chiamati $k_u$ e $k_v$, ovvero le lunghezze focali efficaci misurate in pixel, ottenibili empiricamente dalle immagini, come si vedrà nella sezione sulla calibrazione.

Queste variabili sono definite come

\begin{displaymath}
\begin{array}{l}
k_u = D_u f, \\
k_v = D_v f.
\end{array}\end{displaymath} (9.5)

Utilizzando le coordinate immagine normalizzate, la trasformazione in coordinate pixel diventa quindi

\begin{displaymath}
\begin{array}{l}
u_i = k_u \tilde{x}_i + u_0, \\
v_i = k_v \tilde{y}_i + v_0.
\end{array}\end{displaymath} (9.6)

Nel caso in cui il principal point coincida approssimativamente con il centro dell'immagine, $k_u$ e $k_v$ possono inoltre essere messi in relazione con la semiampiezza del campo visivo:

\begin{displaymath}
k_u \simeq \frac{W}{2\tan\alpha_u},
\qquad
k_v \simeq \frac{H}{2\tan\alpha_v},
\end{displaymath} (9.7)

dove $W$ e $H$ sono rispettivamente la larghezza e l'altezza dell'immagine in pixel, mentre $\alpha_u$ e $\alpha_v$ sono le semiampiezze del campo visivo orizzontale e verticale.

Quando il sensore ha pixel quadrati, $k_u$ e $k_v$ tendono ad assumere lo stesso valore.

A causa della divisione per $z_i$, l'equazione (9.1) non è direttamente rappresentabile mediante una trasformazione lineare in coordinate cartesiane. Tuttavia, risulta possibile modificare tale scrittura introducendo un fattore di scala $\lambda$, in modo da rappresentare la proiezione mediante un sistema lineare in coordinate omogenee. Per fare ciò verrà sfruttata la teoria presentata nella sezione 1.5 riguardante le coordinate omogenee.

La trasformazione tra coordinate immagine normalizzate e coordinate pixel può essere rappresentata mediante la matrice dei parametri intrinseci

\begin{displaymath}
\mathbf{K} =
\begin{bmatrix}
k_u & k_{\gamma} & u_0 \\
0 & k_v & v_0 \\
0 & 0 & 1
\end{bmatrix},
\end{displaymath} (9.8)

dove $k_{\gamma}$ è lo skew factor, che tiene conto dell'eventuale non ortogonalità degli assi del sensore.

Nel caso in cui $k_{\gamma}=0$, si ha quindi

\begin{displaymath}
\begin{bmatrix}
u_i \\
v_i \\
1
\end{bmatrix}=
\mathbf{K}
\begin{bmatrix}
\tilde{x}_i \\
\tilde{y}_i \\
1
\end{bmatrix}.
\end{displaymath} (9.9)

Ricordando che

\begin{displaymath}
\tilde{x}_i = \frac{x_i}{z_i},
\qquad
\tilde{y}_i = \frac{y_i}{z_i},
\end{displaymath}

la proiezione può essere scritta direttamente in coordinate omogenee come
\begin{displaymath}
\begin{bmatrix}
\lambda u_i \\
\lambda v_i \\
\lambda
\end...
...
\mathbf{K}
\begin{bmatrix}
x_i \\
y_i \\
z_i
\end{bmatrix},
\end{displaymath} (9.10)

con $\lambda = z_i$.

Per questo motivo $\lambda$ viene normalmente sottinteso e si utilizzano le coordinate omogenee: per ottenere il punto in coordinate non omogenee è infatti sufficiente dividere le prime due coordinate per la terza. L'utilizzo delle coordinate omogenee permette quindi di rendere implicita la divisione per la coordinata $z_i$.

La matrice $\mathbf{K}$ dipende esclusivamente dai parametri interni della camera ed è pertanto detta matrice dei parametri intrinseci. Essa è una matrice triangolare superiore definita, nel caso generale, da cinque parametri.

Con i moderni sensori digitali è normalmente possibile porre lo skew factor $k_{\gamma}$, che tiene conto del fatto che l'angolo tra gli assi del sensore possa non essere esattamente di $90^\circ$, uguale a zero.

Ponendo $k_{\gamma}=0$, l'inversa della matrice (9.8) si può scrivere come

\begin{displaymath}
\mathbf{K}^{-1} =
\begin{bmatrix}
\dfrac{1}{k_u} & 0 & -\dfr...
...dfrac{1}{k_v} & -\dfrac{v_0}{k_v} \\
0 & 0 & 1
\end{bmatrix}.
\end{displaymath} (9.11)

L'inversa della matrice intrinseca permette, in particolare, di trasformare un punto immagine nelle corrispondenti coordinate immagine normalizzate:

\begin{displaymath}
\begin{bmatrix}
\tilde{x}_i \\
\tilde{y}_i \\
1
\end{bmatr...
...athbf{K}^{-1}
\begin{bmatrix}
u_i \\
v_i \\
1
\end{bmatrix}.
\end{displaymath} (9.12)

La conoscenza di questi parametri (si veda la sezione 9.5 riguardante la calibrazione) determina quindi la possibilità di trasformare un punto da coordinate camera a coordinate immagine o, viceversa, di generare la retta in coordinate camera sottesa a un punto immagine. In particolare, il vettore

\begin{displaymath}
\begin{bmatrix}
\tilde{x}_i \\
\tilde{y}_i \\
1
\end{bmatrix}\end{displaymath} (9.13)

identifica, a meno di un fattore di scala, la direzione del raggio ottico associato al punto immagine $(u_i,v_i)$.

Con questa modellazione, tuttavia, non si è tenuto conto dei contributi dovuti alla distorsione della lente. Il modello della pin-hole camera è infatti valido solamente se le coordinate immagine utilizzate si riferiscono a immagini prive di distorsione.



Footnotes

... geometrici9.1
La maggior parte dei modelli ricade nel modello pin-hole inteso come modello in cui tutti i raggi luminosi passano per uno stesso punto. Esistono tuttavia modelli che generalizzano il modello pin-hole a camere catadiottriche, per esempio il modello di Mei, o altri modelli differenti come il double sphere.


Subsections
Paolo medici
2026-10-06