Contents — find the section you need

Les points correspondants situés sur un même plan (une table, une affiche, une route) capturés dans deux images sont liés par une relation beaucoup plus simple que celle d'une scène 3D classique. Quelle que soit la position de la caméra, les points de ce plan peuvent être transformés l'un en l'autre à l'aide d'une simple matrice 3\times3. Cette matrice est l'homographie (une transformation projective). Alors que le guide d'introduction à la géométrie épipolaire traite des contraintes de correspondance qui présupposent la profondeur de la scène, l'homographie représente un cas différent : elle gère les correspondances qui ne dépendent absolument pas de la profondeur. Seule la maîtrise de l'utilisation conjointe de ces deux approches permet de comprendre pleinement la géométrie à deux vues.

0. Résumé en 30 secondes

  • Une homographie H est une matrice 3\times3 représentant une correspondance d'images \tilde{\mathbf{x}}'\sim H\tilde{\mathbf{x}}, soit pour des points situés dans le même plan, soit pour une caméra en rotation pure. Elle possède 8 degrés de liberté, à l'ambiguïté d'échelle près.

  • La méthode DLT (Transformation Linéaire Directe) construit deux équations linéaires par correspondance de points et résout H linéairement par décomposition en valeurs singulières (SVD) à partir d'au moins 4 correspondances. La normalisation de Hartley assure une stabilisation numérique efficace.

  • Les correspondances réelles présentant des erreurs de correspondance, les valeurs aberrantes sont éliminées par RANSAC avant l'estimation finale. La taille minimale de l'échantillon est de 4 points, ce qui réduit le nombre d'itérations d'estimation robuste par rapport à l'estimation par matrice essentielle/fondamentale. - Étant donné une caméra calibrée, elle se décompose sous la forme H=K(R+\mathbf{t}\mathbf{n}^\mathsf{T}/d)K^{-1} en rotation R, direction de translation et normale au plan \mathbf{n}. Cependant, en général, plusieurs solutions candidates physiquement plausibles subsistent, et des informations supplémentaires sont nécessaires pour les restreindre.

  • Pour les scènes planes ou les rotations pures, l'homographie est un modèle plus approprié que la matrice essentielle ou fondamentale. Ne pas détecter cette dégénérescence revient à tenter une reconstruction 3D forcée dans une situation où la récupération de la profondeur est fondamentalement impossible.

1. Qu'est-ce que l'homographie : Transformation projective plane

Lorsque les coordonnées homogènes \tilde{\mathbf{x}}=(x,y,1)^\mathsf{T} , \tilde{\mathbf{x}}'=(x',y',1)^\mathsf{T} de deux images satisfont la relation

\tilde{\mathbf{x}}' \sim H\tilde{\mathbf{x}}

via une certaine matrice 3\times3 H , on appelle H une homographie. \sim signifie égal à l'échelle près — multiplier H par une constante non nulle quelconque représente la même transformation — donc les degrés de liberté de H sont 9-1=8.

Diagram 1 · Use the button to switch views
Quatre points correspondants sur un même plan, transformés de l'image 1 à l'image 2 par l'homographie H, comparés au cas de la profondeur et de la parallaxe où une seule homographie H est insuffisante.

Diagram 2 · Use the button to switch views

Il existe deux conditions physiques principales pour qu'une homographie soit valide. Premièrement, tous les points 3D correspondants se trouvent sur un même plan. Deuxièmement, même pour une scène à structure 3D générale, si la caméra ne se déplace pas et effectue uniquement des rotations (panoramique/inclinaison), la relation peut être décrite par une homographie, quelle que soit la profondeur. En effet, lors d'une simple rotation de la caméra, aucune parallaxe n'apparaît.

2. Estimation par la méthode DLT

À partir d'une correspondance unique (x,y)\to(x',y'), on peut dériver une contrainte linéaire sur chaque élément h_1,\dots,h_9 de H (noté \mathbf{h}=\operatorname{vec}(H)). En développant la condition d'annulation du produit vectoriel \tilde{\mathbf{x}}'\times H\tilde{\mathbf{x}}=\mathbf{0}, on obtient les deux équations indépendantes suivantes par correspondance.

\begin{bmatrix} -x & -y & -1 & 0 & 0 & 0 & x'x & x'y & x' \\ 0 & 0 & 0 & -x & -y & -1 & y'x & y'y & y' \end{bmatrix}\mathbf{h}=\mathbf{0}

Avec 4 correspondances, on obtient 8 équations qui, en position générale, déterminent de manière unique les 8 degrés de liberté H. Dans le cas réaliste où cinq correspondances ou plus sont disponibles, on détermine la solution des moindres carrés de A\mathbf{h}=\mathbf{0} pour la matrice A empilant toutes les correspondances — c'est-à-dire le vecteur singulier correspondant à la plus petite valeur singulière de A, par décomposition en valeurs singulières (SVD). Il s'agit de la méthode DLT (Transformation Linéaire Directe).

Tout comme pour l'algorithme à 8 points en géométrie épipolaire, l'utilisation directe des coordonnées brutes des pixels tend à être numériquement mal conditionnée. L'implémentation standard est la DLT normalisée de Hartley : on applique une transformation de similarité T,T' à l'ensemble de points de chaque image afin d'obtenir un centroïde nul et une distance moyenne \sqrt{2}, on résout le problème dans ce repère normalisé, puis on transforme les coordonnées à nouveau avec H=T'^{-1}H_{\text{norm}}T.

3. Estimation robuste par RANSAC

Comme les correspondances réelles comportent des erreurs, l'application directe de la DLT à chaque correspondance risque de fausser considérablement la solution en raison des valeurs aberrantes. RANSAC procède comme suit :

  1. Sélection aléatoire de 4 correspondances et construction d'une hypothèse pour H par DLT.

  2. Pour chaque correspondance, calcul de l'erreur de reprojection entre la position prédite par H et le point correspondant réel.

  3. Retenue de l'hypothèse présentant le plus grand nombre de correspondances (points conformes) dans la plage de valeurs limites.

  4. Résolution de la DLT une nouvelle fois avec tous les points conformes finaux, et optimisation non linéaire (minimisation directe de l'erreur de reprojection) si nécessaire.

Le nombre d'itérations nécessaires peut être estimé, étant donné un taux d'inlier w, une taille d'échantillon minimale s=4 et une probabilité de succès cible p, comme suit :

N=\frac{\log(1-p)}{\log\!\left(1-w^{s}\right)}

Pour un même taux d'inlier, l'homographie s=4 requiert moins d'itérations que l'estimation par matrice essentielle/fondamentale, qui en requiert s=5 – 8. C'est pourquoi il est courant, juste après la mise en correspondance SIFT ou ORB, d'effectuer d'abord une vérification géométrique grossière par homographie avant de passer à l'estimation 3D complète.

4. Décomposition de H : Extraction de la rotation, de la translation et de la normale au plan

Si la caméra est calibrée et que les paramètres intrinsèques K_1,K_2 sont connus, l'homographie normalisée \tilde H = K_2^{-1}HK_1 peut s'écrire, à partir de la normale unitaire au plan \mathbf{n} (dans le repère de la caméra 1), de la distance au plan d et de la pose relative R,\mathbf{t}, comme suit :

\tilde H = R+\frac{\mathbf{t}\,\mathbf{n}^\mathsf{T}}{d}

Si la caméra subit une rotation pure sans translation, \mathbf{t}=\mathbf{0} , alors \tilde H=R représente la matrice de rotation elle-même.

Le processus de reconstruction de R,\mathbf{t}/d,\mathbf{n} à partir de \tilde H est appelé décomposition d'homographie. Plusieurs algorithmes sont connus, notamment la méthode classique de Faugeras-Lustman et la méthode analytique de Malis-Vargas, qui permettent d'obtenir une solution analytique à partir de la décomposition spectrale de \tilde H^\mathsf{T}\tilde H. Cependant, mathématiquement parlant, jusqu'à 4 solutions physiquement possibles peuvent subsister (y compris celles correspondant à des inversions de signe ou des réflexions). En pratique, on les réduit en utilisant les critères suivants :

  • Profondeur positive (chiralité) : les points triangulés doivent se situer devant les deux caméras.

  • Plausibilité de la normale au plan : cohérence avec une direction normale approximative déjà connue de l'application, comme celle du sol ou d'un mur.

  • Cohérence sur plusieurs images : même en cas d'ambiguïté sur une seule image, le suivi temporel révèle les solutions non naturelles, car elles manquent de continuité.

La fonction decomposeHomographyMat d'OpenCV effectue cette décomposition et fournit des fonctions de filtrage (telles que filterHomographyDecompByVisibleRefpoints, qui sélectionne la solution la plus proche de la normale à un plan connu) facilitant l'évaluation des différentes solutions candidates.

5. Lien avec la géométrie épipolaire : Quand H est la bonne réponse

Comme nous l'avons vu dans le guide d'introduction à la géométrie épipolaire, la correspondance entre deux vues dans une scène 3D générale est décrite par la matrice fondamentale/essentielle. L'homographie en est un cas particulier, et le choix entre les deux se fait comme suit :

Situation Modèle approprié Raison
Structure 3D générale, avec translation F (non calibrée) / E (calibrée) La parallaxe dépend de la profondeur et ne peut être réduite à un seul plan.

La scène entière, ou la région d'intérêt, est un seul plan. Les points d'un plan sont décrits exactement par une homographie.

La caméra effectue une rotation pure (panoramique/inclinaison uniquement). Sans translation, il n'y a pas de parallaxe, donc la relation F/E se dégrade.

L'observation d'une scène éloignée entraîne une parallaxe minime. (Approximation pratique) La parallaxe due aux différences de profondeur est masquée par le bruit des pixels.

Le problème est que la présence de nombreux points correspondant à H et la planéité réelle de la scène ou la rotation pure de la caméra peuvent parfois être difficiles à distinguer par la seule observation. Même dans une scène 3D générale, un mur ou une table occupant la majeure partie du champ de vision peut correspondre parfaitement à une homographie. Le processus d'initialisation d'ORB-SLAM gère cette ambiguïté en estimant simultanément H et F via RANSAC, en évaluant la qualité d'ajustement de chaque modèle et en sélectionnant automatiquement celui qui convient le mieux à la structure de la scène et au mouvement de la caméra. L'élément clé de l'implémentation réside dans l'utilisation d'un score qui tient compte de la différence de degrés de liberté de chaque modèle (une idée liée à GRIC), plutôt que de simplement comparer le nombre de points correspondants.

6. Applications : Assemblage d'images, suivi de plans en réalité augmentée et estimation du plan au sol

L'assemblage d'images (composition de panoramas) — qui consiste à combiner plusieurs images prises en faisant pivoter la caméra sur place en une seule image — est une application représentative de l'homographie. L'homographie entre les images adjacentes est estimée, puis chacune est déformée dans un repère commun et fusionnée. Lorsque l'hypothèse d'une rotation quasi pure de la caméra n'est plus vérifiée (prise de vue en marchant ou présence d'un sujet proche dans la scène), la parallaxe produit des images fantômes et des images dédoublées.

Le suivi d'un plan d'ancrage en réalité augmentée détecte un plan, comme un bureau ou une affiche, dans la première image. En suivant l'homographie d'une image à l'autre, il détermine avec précision la pose relative par rapport à ce plan, image par image. Grâce à la décomposition de R,\mathbf{t}/d, il est possible de superposer un objet virtuel ancré au repère du plan sans incohérence visuelle.

L'estimation du plan au sol exploite la connaissance préalable qu'une route ou un sol est « quasi-plan ». La détection du plan au sol dans les caméras embarquées ou les robots utilise des méthodes qui suivent l'homographie entre les images consécutives et détectent les régions qui s'en écartent (obstacles, objets autres que le sol). Cette approche détecte une rupture de cohérence géométrique, plutôt que de reconnaître l'objet lui-même.

7. Exemple d'implémentation dans OpenCV

import cv2 as cv
import numpy as np

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]).reshape(-1, 1, 2)
p2 = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)

# threshold is the allowed reprojection error, in pixels. USAC_MAGSAC is also selectable in place of RANSAC.
H, mask = cv.findHomography(p1, p2, method=cv.RANSAC, ransacReprojThreshold=3.0)
inliers = mask.ravel().astype(bool)

# if K is known, decompose into candidate solutions
num_solutions, Rs, ts, ns = cv.decomposeHomographyMat(H, K)

Notez que le vecteur H renvoyé par findHomography est ambigu en termes d'échelle. Comme pour la matrice essentielle du guide d'introduction à la géométrie épipolaire, le vecteur de translation obtenu par décomposition ne détermine qu'une direction ; son échelle absolue doit être fournie par un autre moyen (distance planaire connue, ligne de base stéréo, capteur inertiel, etc.).

8. Conditions difficiles

  • Planarité brisée : même une scène d'apparence plane peut contenir des objets ayant une épaisseur réelle (livres, bords de panneaux, plantes), et les points situés sur ces objets deviennent des valeurs aberrantes systématiques. Un relâchement imprudent du seuil de RANSAC permet d'inclure des points non planaires, ce qui déforme le vecteur H lui-même. - L'hypothèse de rotation pure n'est plus valable : si l'assemblage à main levée inclut même une légère translation, les sujets proches se déplacent davantage, produisant des images fantômes. L'utilisation d'un trépied ou une rotation près du centre optique de l'objectif est préférable.

  • Configurations dégénérées : si les points de correspondance se concentrent le long d'une seule ligne dans l'image ou dans une zone étroite, la matrice DLT est mal conditionnée et l'erreur augmente fortement dans les régions extrapolées de H — les zones éloignées des points de correspondance.

  • Motifs répétitifs ou plans à faible texture : avec un motif répétitif comme un carrelage ou une fenêtre à croisillons, les descripteurs locaux seuls ne peuvent pas distinguer une correspondance correcte d'une erreur de correspondance décalée d'une période.

  • Ambiguïté dans la décomposition : si K est imprécis ou si le bruit est important, il peut être impossible de sélectionner avec certitude la solution physiquement correcte parmi les multiples solutions candidates issues de la décomposition. Il est toujours recommandé de combiner ce résultat avec des informations préalables supplémentaires (direction normale, profondeur positive).

9. Résumé

L'homographie est un cadre qui représente précisément deux situations limitées mais fréquentes en pratique : la correspondance sur un plan ou la rotation pure d'une caméra, à l'aide d'une seule matrice 3\times3. La méthode DLT constitue le point de départ des moindres carrés, RANSAC corrige les valeurs aberrantes et la décomposition est l'étape finale qui extrait la rotation physique, la translation et la normale. L'essentiel est de savoir quand l'homographie est le modèle approprié et quand il faut opter pour la matrice fondamentale/essentielle. Une mauvaise définition de cette limite peut vous amener à tenter de reconstituer une profondeur inexistante dans une scène qui n'est qu'un plan.

Vérifiez votre compréhension
L'homographie permet-elle d'aligner des objets à différentes profondeurs ?

Une translation générale induit une parallaxe pour les objets hors plan.

Vérifiez les hypothèses de scène plane ou de rotation pure avant d'utiliser une seule homographie. ## Références - [Hartley & Zisserman, Géométrie multi-vues en vision par ordinateur (page officielle des auteurs)](https://www.robots.ox.ac.uk/~vgg/hzbook/) - [Fischler & Bolles, Consensus par échantillonnage aléatoire (Communications de l'ACM, 1981)](https://doi.org/10.1145/358669.358692) - [Malis & Vargas, Compréhension approfondie de la décomposition homographique pour le contrôle basé sur la vision (Rapport de recherche INRIA RR-6303, 2007)](https://inria.hal.science/inria-00174036) - [Mur-Artal, Montiel & Tardós, ORB-SLAM : Un système SLAM monoculaire polyvalent et précis (IEEE TRO, 2015)](https://doi.org/10.1109/TRO.2015.2463671) - [OpenCV — Concepts de base de [Homographie expliquée avec du code](https://docs.opencv.org/4.x/d9/dab/tutorial_homography.html) - [Référence OpenCV — findHomography / decomposeHomographyMat](https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html) - [Module OpenCV — Assemblage d'images](https://docs.opencv.org/4.x/d1/d46/group__stitching.html)

What to read next

Review the backgroundIntroduction au flux optique — Interprétation de la vitesse et de la structure à partir du mouvement de l’imageContinue the seriesGéométrie épipolaire — Détection de la profondeur et du mouvement de la caméra à partir de deux imagesExplore another aspect of this fieldLab de luminosité et luminance — exposition, gamma et écrêtage