Équipe IMAGE - Le projet Pantheon

Tutoriel : Numériser le contenu de tableaux blancs

Identification

Ressources

I. Objectif

Le but de cette application est de numériser le contenu d'un tableau blanc pris avec un appareil photo ou un téléphone portable. La numérisation inclut le recentrage sur le tableau, la rectification de la distorsion géométrique due à la perspective et la correction de la non-uniformité de l'illumination.

Capture d'un tableau blanc.Image numérisée.

II. Méthode

La méthode est composée de 5 étapes :

  1. La détection des contours.
  2. La détection des lignes approximativement horizontales et verticales.
  3. La sélection des lignes correspondant aux bords du tableau blanc parmi toutes les lignes extraites.
  4. La correction de la distorsion géométrique.
  5. La correction de l'illumination.

II.1 Détection des contours

La détection de contours utilise l'opérateur Shen-Castan qui donne une bonne sélection et une bonne localisation des contours et qui permet ensuite d'utiliser une binarisation sans paramètre (la valeur de seuil est fixée à 2 pour toutes les images).

pany2pan whiteboard.png whiteboard.pan
prgb2gray 0.299 0.587 0.114 whiteboard.pan tmp3.pan
pgaussianfiltering 1 tmp3.pan tmp18.pan
pshen 1.3 tmp18.pan tmp6.pan
pbinarization 2 255 tmp6.pan whiteboard1.pan
Image de contours.

II.2 Détection des lignes approximativement droites verticales et horizontales

La détection utilise la transformée de Hough pour repérer parmi les contours extraits les lignes approximativement droites les plus longues. La détection procède séparément pour les lignes horizontales entre -20° et 20°, et les lignes verticales entre 70° et 110°. Pour chacune, une érosion initiale permet de supprimer les petites lignes qui ne sont pas dans la direction étudiée, suivie d'une fermeture par reconstruction. La transformée de Hough permet de conserver les plus grandes lignes droites (ici les 6 plus grandes lignes verticales et les 6 plus grandes lignes horizontales).

# Horizontal
plinearerosion 0 0 1 whiteboard1.pan tmp7.pan
pdilatationreconstruction 8 tmp7.pan whiteboard1.pan tmp9.pan
phoughlines 6 -20 20 10 tmp9.pan tmp19.pan
pdilatation 0 1 tmp19.pan tmp25.pan
# Vertical
plinearerosion 90 0 1 whiteboard1.pan tmp10.pan
pdilatationreconstruction 8 tmp10.pan whiteboard1.pan tmp11.pan
phoughlines 6 70 110 4 tmp11.pan tmp20.pan
pdilatation 0 1 tmp20.pan tmp26.pan

por tmp25.pan tmp26.pan whiteboard2.pan
Superposition des lignes trouvées sur l'image initiale.

II.3 Détection des bords du tableau blanc

Détecter le tableau blanc consiste à repérer tous les quadrilatères composés des 4 lignes qui satisfont aux conditions suivantes :

Le quadrilatère retenu est celui qui possède le meilleur rapport périmètre sur le nombre de points sous le bord (avec 3 pixels d'épaisseur).

La sélection du quadrilatère est faite par l'opérateur pgetquandragle.cpp qui retourne une image avec les quatre coins du quadrilatère sélectionné.

pand whiteboard2.pan whiteboard1.pan tmp41.pan
pgetquadrangle tmp41.pan whiteboard2.pan whiteboard3.pan
Le quadrilatère retenu.

II.4 Correction de la distorsion due à la perspective

La correction de l'effet de perspective nécessite le calcul de la matrice 3x3 de transformation des coordonnées de l'image d'entrée dans l'image corrigée. La matrice est calculée à partir de la distance focale estimée de la prise de vue sachant qu'un tableau blanc est un rectangle pur alors que dans l'image il se présente sous la forme d'un quadrilatère. Il suffit de trouver la transformation nécessaire pour passer du quadrilatère au rectangle équivalent.

La transformation est faite par l'opérateur pquadrangle2rectangle.cpp.

pquadrangle2rectangle whiteboard.pan whiteboard3.pan whiteboard4.pan
L'image redressée.

II.5 Correction de l'illumination

La correction de l'illumination procède par soustraction du fond. Le fond du tableau correspond aux basses-fréquences alors que les caractères d'écriture correspondent aux hautes-fréquences. Le fond est approximé par une fermeture avec un grand élément structurant. L'opération ne s'applique que sur la composante luminosité de l'espace HSL (bande n°2 de l'image HSL). Il est ensuite soustrait de l'image initiale. Il suffit d'ajouter la moyenne des niveaux de gris de l'image du fond estimé pour retrouver les niveaux de gris initiaux.

prgb2hsl whiteboard4.pan tmp34.pan
pgetband 0 tmp34.pan tmp44.pan
pgetband 1 tmp34.pan tmp45.pan
pgetband 2 tmp34.pan tmp36.pan

pdilatation 1 5 tmp36.pan tmp37.pan
perosion 1 5 tmp37.pan tmp38.pan
pmeanvalue tmp38.pan tmp41.pan
psub tmp36.pan tmp38.pan tmp40.pan
paddval tmp41.pan tmp40.pan tmp42.pan

pimg2imc 4 tmp44.pan tmp45.pan tmp42.pan tmp43.pan
phsl2rgb tmp43.pan whiteboard5.pan
ppan2png whiteboard5.pan result.png
L'image retenue.

III. Le script Pandore complet (bash)

Ce script nécessite les 2 opérateurs (pgetquadrangle, pquadrangle2rectangle) compilés (voir le haut de la page).


Projet Panthéon
Equipe Image Laboratoire GREYC
UMR CNRS 6072 - ENSICAEN - Université de Caen, France
Page modifiée le 31 October 2013