Prise en compte des distorsions
Rappel :
Le modèle sténopé modélise une caméra idéale (simple projection perspective) et ne prend pas en compte les éventuelles distorsions géométriques induites par le système optique utilisé. Plusieurs auteurs [ 6[1], 7[2]] ont montré que pour des applications de métrologie dimensionnelle, il était indispensable de prendre en compte ces distorsions afin de pouvoir les corriger.
Approche paramétrique (classique)
L'approche paramétrique classique consiste à modéliser la distorsion en enrichissant le modèle sténopé par des termes supplémentaires (le modèle devient alors non linéaire). Dans cette approche, le modèle s'inspire de la théorie des aberrations géométriques des systèmes centrés en rajoutant des termes correctifs correspondants à différents types de distorsions : distorsion radiale, prismatique, de décentrage [ 8[3], 9[4], 10[5]].
Partant du modèle sténopé, les effets des distorsions peuvent être modélisés par une quatrième transformation \(D\), reliant les coordonnées rétiniennes « idéales (2.) [6]» \(m_{r} = \left( \begin{array}{cc} x & y \end{array} \right)\)aux coordonnées rétiniennes « réelles » \(\breve{m_{r}} = \left( \begin{array}{cc} \breve{x} & \breve{y} \end{array} \right)\) :
\(\left( \begin{array}{ccc} X & Y & Z \end{array} \right) \overset{T}{\longrightarrow} \left( \begin{array}{ccc} X_{c} & Y_{c} & Z_{c} \end{array} \right) \overset{P}{\longrightarrow} \boxed{ \left( \begin{array}{cc} x & y \end{array} \right) \overset{D}{\longrightarrow} \left( \begin{array}{cc} \breve{x} & \breve{y} \end{array} \right) } \overset{A}{\longrightarrow} \left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\)
\(\begin{align*} \breve{m_{r}} &= D(m_{r}) = m_{r} + \delta (m_{r}) \\ &= m_{r} + \overbrace{\underbrace{\delta _{r}(m_{r})}_{radial} + \underbrace{\delta _{d}(m_{r})}_{d \acute{e}centrage} + \underbrace{\delta _{p}(m_{r})}_{prismatique}} \end{align*}\)
Plusieurs auteurs ont montré que le modèle suivant, souvent désigné par R3D1P1 (3.)[7] , est largement suffisant pour la plupart des objectifs de focale supérieure à 5 mm :
\(D(m_{r}) = m_{r}(1+r_{1}(x^{2}+y^{2})+r_{2}(x^{2}+y^{2})^{2}+r_{3}(x^{2}+y^{2})^{3}) + \left( \begin{array}{c} d_{1}(3x^{2}+y^{2})+2d_{2}xy+p_{1}(x^{2}+y^{2}) \\ 2d_{1}xy+d_{2}(x^{2}+3y^{2})+p_{2}(x^{2}+y^{2}) \end{array} \right)\)
Où \(d = \left( \begin{array}{ccccccc} r_{1} & r_{2} & r_{3} & d_{1} & d_{2} & p_{1} & p_{2} \end{array} \right)\) est le vecteur des paramètres de distorsion.
Remarque :
On se contente souvent d'utiliser un modèle radial (d'ordre 1 à 3). En posant : \(\rho = \sqrt{x^{2}+y^{2}}\), le modèle R3, est souvent écrit sous la forme :
\(D(m_{r}) = m_{r}(1+r_{1} \rho ^{2}+r_{2} \rho ^{4}+r_{3} \rho ^{6})\)
Notons \(\mathbf{k}\) le vecteur des paramètres intrinsèques définis par la matrice \(\mathbf{K}\), et \(\mathbf{d}\) le vecteur des coefficients de distorsion (qui sont également intrinsèques à la caméra) :
\(\mathbf{k} = \left( \begin{array}{ccccc} c_{x} & c_{y} & f_{x} & f_{y} & \theta \end{array} \right)\)
\(\mathbf{d} = \left( \begin{array}{ccccccc} r_{1} & r_{2} & r_{3} & d_{1} & d_{2} & p_{1} & p_{2} \end{array} \right)\)
Le modèle de caméra est non linéaire et peut s'écrire sous la forme d'une fonction vectorielle \(\mathbf{F}\) :
\(\breve{m} = \mathbf{F} (\mathbf{k}, \mathbf{d}, \mathbf{R}, \mathbf{t}, M )\)
À titre d'exemple, la figure 5 montre une carte de distorsion (amplitude de la distorsion en chaque pixel de l'image) obtenue lors du calibrage d'une caméra équipée d'un objectif de focale 25 mm. On voit bien sur cette figure que la composante dominante est la distorsion radiale (distorsion d'autant plus importante qu'on s'éloigne du centre de l'image). Dans cet exemple, la distorsion est relativement faible (l'amplitude de la distorsion est de l'ordre de 1 pixel aux coins de l'image) mais elle peut atteindre plusieurs pixels (voire dizaine de pixels) pour des objectifs de plus faible longueur focale.

Correction de la distorsion
Il est parfois nécessaire de connaître les coordonnées pixel idéales \(\left( \begin{array}{cc} u & v \end{array} \right)\), i.e. non distordues, correspondant à celles distordues \(\left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\).
\(\begin{array} {cc} u &= c_{x} + f_{x} x \\ v &= c_{y} + f_{y} y \end{array} \quad \text{ soit } \quad \begin{array}{cc} x &= \frac{u-c_{x}}{f_{x}} \\ y &= \frac{v-c_{y}}{f_{y}} \end{array}\)
On en déduit que :
\(\breve{u} = c_{x}+f_{x} \breve{x} = c_{x}+f_{x}(x+ \delta _{x}(x,y)) = c_{x}+(u-c_{x})+f_{x} \delta _{x}(x,y)\)
\(\breve{v} = c_{y}+f_{y} \breve{y} = c_{y}+f_{y}(y+ \delta _{y}(x,y)) = c_{y}+(u-c_{y})+f_{y} \delta _{y}(x,y)\)
À partir des équations (12) et (13), on constate qu'il est possible d'exprimer \(\left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\) en fonction de \(\left( \begin{array}{cc} u & v \end{array} \right)\) et des paramètres intrinsèques \(\mathbf{k}\) et \(\mathbf{d}\) de la caméra :
\(\breve{u} = f_{u}(u,v,\mathbf{k},\mathbf{d})\)
\(\breve{v} = f_{v}(u,v,\mathbf{k},\mathbf{d})\)
Dans le cas général, le modèle de distorsion donné par l'équation (14) n'est pas inversible et il est donc nécessaire d'utiliser une méthode numérique pour estimer les coordonnées idéales \(\left( \begin{array}{cc} u & v \end{array} \right)\) du point-image qui aurait été obtenu avec une caméra exempte de distorsion.
Soit \(\breve{m} = \left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\) un pixel de l'image distordue. On cherche le pixel non distordu \(m = \left( \begin{array}{cc} u & v \end{array} \right)\).
Le pixel \(\left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\) correspond au point \(\breve{m_{r}} = \left( \begin{array}{cc} \breve{x} & \breve{y} \end{array} \right)\) dans le plan rétinien :
\(\breve{x} = \frac{\breve{u}-c_{x}}{f_{x}}\)
\(\breve{y} = \frac{\breve{v}-c_{y}}{f_{y}}\)
On cherche le point \(m_{r} = \left( \begin{array}{cc} x & y \end{array} \right)\) tel que \(D(m_{r}) = \breve{m_{r}}, i.e.\):
\(\breve{m_{r}}-D(m_{r}) = 0\)
On peut résoudre l'équation (15) grâce à la méthode de Newton appliquée à la fonction \(f(m_{r}) = \breve{m_{r}}-D(m_{r}) \)que l'on initialise avec \(m_{r}^{(0)} = \breve{m_{r}}\).
L'itéré courant est donné par la formule : \(m_{r}^{(i)} = m_{r}^{(i-1)}-d_{N}^{(i-1)} \mbox{ avec } d_{N}^{(i-1)} \mbox{ solution de } \mathbf{J_{f}} d = f(m_{r}^{(i-1)})\)
Soit :
\(m_{r}^{(i)} = m_{r}^{(i-1)} + \mathbf{J_{D}}(m_{r}^{(i-1)})^{-1}( \breve{m_{r}}-D(m_{r}^{(i-1)}))\)
avec :
\(\mathbf{J_{D}} = \left( \begin{array}{cc} \frac{\partial \breve{x}}{\partial x} & \frac{\partial \breve{x}}{\partial y} \\ \frac{\partial \breve{y}}{\partial x} & \frac{\partial \breve{y}}{\partial y}\end{array} \right)_{\vert (x,y) = m_{r}^{(i-1)}}\)
Le critère d'arrêt peut être basé sur la valeur du module de l'erreur \(\varepsilon\) après chaque itération. En pratique, la convergence est atteinte après seulement quelques itérations \((\approx 4)\).
Après avoir obtenu les coordonnées rétiniennes \(\left( \begin{array}{cc} x & y \end{array} \right)\), l'équation (12) permet de calculer les coordonnées \(\left( \begin{array}{cc} u & v \end{array} \right)\) recherchées.
Remarque :
Pour calculer une image corrigée de la distorsion (ce qui est un problème différent de celui de corriger un seul point), il n'est pas nécessaire de recourir à une méthode numérique pour inverser le modèle de distorsion. Il suffit d'utiliser le modèle direct donné par l'équation (14) et de remplir l'image à construire en balayant les coordonnées \(u\) et \(v\) de l'image destination.
Pour un pixel \(\left( \begin{array}{cc} u & v \end{array} \right)\) donné (en coordonnées entières) dans l'image destination, l'équation (14) permet de calculer les coordonnées \(\left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\) du point correspondant dans l'image source. Ces coordonnées étant en général non entières, il suffit de faire une interpolation pour calculer la valeur de l'intensité (niveau de gris) qui doit être recopiée dans l'image destination à la position \(\left( \begin{array}{cc} u & v \end{array} \right)\) (cf. [ 11[9]]).
D'autres méthodes de correction de distorsion ont été proposées dans la littérature. Pour un état de l'art récent, voir en particulier la section « The perspective camera inverse model » dans [ 12[10]].
À titre d'exemple, la figure 6 montre une image distordue (à gauche) et l'image corrigée (à droite).

Approche non-paramétrique
Dans le cas de systèmes optiques complexes, certains auteurs ont montré [ 13[12]] qu'il est préférable de modéliser la distorsion de façon non-paramétrique en utilisant des fonctions splines [ 14[13]].
Dans ce cas, il s'agit d'une modélisation purement mathématique (approche type « boîte noire ») visant à déterminer la fonction de distorsion qui traduit au mieux la façon dont l'image idéale est distordue [ 15[14] 16[15]].
S'agissant d'une modélisation purement mathématique (4.)[16], il n'est pas gênant d'adopter dans ce cas le schéma de la figure 7, et de rechercher la fonction de distorsion \(\mathbf{D}\)reliant les coordonnées-image idéales \(\left( \begin{array}{cc} u & v \end{array} \right)\) du point \(\mathbf{m}\) aux coordonnées-image réelles \(\left( \begin{array}{cc} \breve{u} & \breve{v} \end{array} \right)\) du point \(\breve{m}\).

Dans cette approche, pour pouvoir corriger facilement la distorsion, il est préférable d'adopter le modèle schématisé sur la figure 8, dans lequel on utilise la fonction réciproque \(\mathbf{C}\) de correction de distorsion au lieu de la fonction de distorsion \(\mathbf{D}\). En effet, utiliser \(\mathbf{C}\) présente l'avantage de permettre de corriger directement la distorsion alors qu'inverser la fonction \(\mathbf{D}\) peut être très coûteux en temps de calcul, notamment lorsque sa fonction réciproque \(\mathbf{C}\) ne peut pas être déterminée analytiquement. De plus, le domaine de définition de la fonction spline de correction \(\mathbf{C}\) est connu a priori et déterminé par la dimension des images, alors que la fonction spline de distorsion \(\mathbf{D}\) a un domaine de définition non connu a priori puisque exprimé dans le plan rétinien lui-même défini par calibrage.

L'équation de correction de distorsion devient :
\(m = D^{-1}(\breve{m}) = C(\breve{m})\)
L'estimation de la fonction de correction de distorsion \(\mathbf{C}\) consiste à approximer les composantes horizontales (suivant l'axe \(x\)) et verticales (suivant l'axe \(y\)) du champ de correction de distorsion par deux surfaces splines \(\mathbf{S}_{y}\) et \(\mathbf{S}_{y}\) [ 13[12], 17[19]].
La fonction de correction de distorsion permet de corriger les points (ou une image entière) des distorsions. Les points ainsi corrigés sont reliés aux point 3D d'entrée par un modèle sténopé classique dont il est facile d'estimer les paramètres.
Nous venons d'établir les modèles linéaire (5) et non linéaire (11) d'une caméra, nous allons parler maintenant des méthodes dites de calibrage permettant d'estimer les paramètres de ces modèles.