Retour

Reconstruction et assemblage de documents multi-vues

Application d'assemblage et de reconstruction multi-vues de documents à partir de photos partielles

16 juillet 2026
Reconstruction et assemblage de documents multi-vues
C++PythonWebAppOpenCVSIFTRANSACGrabCutSuperpixels SLIC

Introduction

Ce projet a été réalisé dans le cadre du cours "Traitement d'Images et Machine Learning pour la Reconnaissance de Formes" de la majeure IMAGE à l'EPITA.

L'objectif de ce projet est de concevoir une application capable de reconstruire un document numérisé haute résolution et parfaitement plat à partir d'une ou plusieurs photos partielles prises sous différents angles avec un smartphone. Pour simplifier, au lieu de s'embêter avec un scanner traditionnel, on prend quelques clichés rapides et notre programme se charge de les assembler, d'enlever le décor de fond, et de redresser le document final comme s'il avait été scanné.

Comment fonctionne cette sorcellerie ?

Pour passer de photos à un document final qui ressemble à un scan, nous avons conçu un pipeline de traitement d'images structuré en 6 étapes.

Le flux commence par l'extraction des points d'intérêt pour comprendre la géométrie de chaque photo. Ensuite, on calcule les homographies pour mettre toutes les images dans le même repère spatial, puis on fusionne ces images pour créer un unique grand canevas. Une fois le document brut assemblé, on applique un algorithme de détection pour localiser la feuille au milieu de l'arrière-plan, puis on calcule une transformation géométrique finale pour la redresser en vue de dessus, avant d'exporter le résultat propre au format A4.

Schéma de notre pipeline algorithmique de traitement
Schéma de notre pipeline algorithmique de traitement

Alignement d'Images (SIFT + RANSAC)

La première étape de l'assemblage consiste à aligner géométriquement les différentes images partielles du document.

Pour ce faire, nous utilisons l'algorithme SIFT pour repérer des repères visuels (comme des coins de lettres ou des lignes de texte) sur les zones où les photos se superposent. Ces repères restent reconnaissables même si l'image est zoomée, tournée ou mal éclairée. Une fois ces points connectés d'une photo à l'autre, l'algorithme RANSAC filtre les fausses connexions pour aligner les images au pixel près, évitant ainsi tout décalage du texte.

Correspondances de points clés SIFT et alignement par homographie
Correspondances de points clés SIFT et alignement par homographie

Fondu des Bords (Feather Blending)

Une fois que les images sont alignées, les superposer bêtement donne un résultat très décevant à cause des différences d'exposition et d'éclairage.

Pour supprimer ces lignes de coupure, nous avons implémenté un algorithme de Feather Blending (fondu linéaire). Le principe consiste à calculer une carte de distance pour chaque image pour définir une zone de transition douce. Dans cette zone, nous mélangeons progressivement les pixels des deux images de manière linéaire. Grâce à cette technique, la transition entre les images devient totalement invisible à l'œil nu, donnant l'illusion d'une seule et unique feuille uniforme.

Jointure avec transition douce par Feather Blending
Jointure avec transition douce par Feather Blending

Petit point d'attention cependant, le fondu linéaire ne fonctionne que si les images sont correctement alignées. Si l'alignement est mauvais, le fondu va créer des zones floues et déformées.


Détection du Document (SLIC + GrabCut)

Notre document est maintenant assemblé, mais il faut maintenant le détacher de son arrière-plan.

Pour séparer proprement la feuille du fond (comme une table ou un parquet), nous combinons deux méthodes : les Superpixels SLIC et l'algorithme GrabCut. La première regroupe les pixels similaires en petites tuiles de couleur homogène pour repérer les bordures de la feuille.

Regroupement en superpixels SLIC
Regroupement en superpixels SLIC

La seconde méthode utilise ces tuiles de bordure pour isoler automatiquement le document de son décor. Le résultat est un découpage extrêmement précis qui épouse parfaitement les contours de notre feuille de papier, même si le fond est très texturé.

Masque de segmentation GrabCut obtenu
Masque de segmentation GrabCut obtenu

Redressement de Perspective (Homographie finale)

La dernière étape consiste à simuler un véritable scan en vue du dessus en redressant la perspective du document détouré.

Une fois les quatre coins de la feuille repérés sur l'image découpée, nous appliquons une transformation géométrique pour redresser la perspective et la projeter sur un rectangle parfait au format standard A4. Cette opération corrige l'inclinaison de la photo d'origine pour donner un scan parfaitement rectangulaire, comme si le document avait été numérisé à plat depuis le dessus.

Résultat final du document A4 redressé et recadré
Résultat final du document A4 redressé et recadré

Gestion des Cas Complexes

Afin de valider la robustesse de notre application, nous l'avons soumise à de nombreux scénarios difficiles rencontrés dans la vie quotidienne.

Voici comment notre pipeline réagit face à ces défis :

  • Papier blanc sur fond blanc : La détection de contours classique échoue souvent ici. Grâce à GrabCut et à la modélisation par superpixels SLIC, notre modèle arrive à exploiter les infimes ombres et variations de textures pour détourer la feuille.

    • Image d'origine :
      Photo originale - Papier blanc sur fond blanc
      Photo originale - Papier blanc sur fond blanc
    • Résultat de la reconstruction :
      Reconstruction - Papier blanc sur fond blanc
      Reconstruction - Papier blanc sur fond blanc
  • Arrière-plans texturés (parquet, table vernie) : Bien que ces surfaces génèrent énormément de faux points clés avec SIFT, notre filtrage RANSAC élimine 100 % de ces erreurs pour ne conserver que la géométrie du document.

    • Image d'origine :
      Photo originale - Arrière-plan texturé
      Photo originale - Arrière-plan texturé
    • Résultat de la reconstruction :
      Reconstruction - Arrière-plan texturé
      Reconstruction - Arrière-plan texturé
  • Occlusions (stylos, ciseaux posés sur la feuille) : Ces objets sont automatiquement segmentés par GrabCut et exclus des contours extérieurs du document, évitant de fausser la détection des quatre coins.

    • Image d'origine :
      Photo originale - Occlusions
      Photo originale - Occlusions
    • Résultat de la reconstruction :
      Reconstruction - Occlusions
      Reconstruction - Occlusions
  • Torsions et plis du document : C'est notre seule vraie limite physique. L'homographie supposant un plan parfait, si le document est trop froissé, de petites distorsions locales apparaissent (bien que le texte reste parfaitement lisible).

    • Image d'origine :
      Photo originale - Plis et torsions
      Photo originale - Plis et torsions
    • Résultat de la reconstruction :
      Reconstruction - Plis et torsions
      Reconstruction - Plis et torsions

Et l'interface ?

Dans le cadre de ce projet, nous avons également développé une interface graphique simple pour permettre à l'utilisateur de charger ses images et d'obtenir le document final en un clic.

Une fonctionnalité assez cool est que l'application lance en fait un serveur local, qui permet d'accéder à l'interface via un smartphone connecté au même réseau Wi-Fi. Ainsi, l'utilisateur peut prendre des photos directement depuis son téléphone et les envoyer à l'application pour reconstruction.

C'est une interface vraiment basique, mais elle remplit parfaitement son rôle de démonstration de notre pipeline algorithmique.