Le but est de localiser toutes les zones de texte artificiel dans des images extraites de vidéos. Le texte artificiel est destiné à être lu par un observateur contrairement aux autres types de texte que l'on peut rencontrer dans une scène qui ne sont pas spécialement destinés à être lus (p.ex. textes sur les t-shirts, panneaux d'information ou inscriptions). Ainsi, les textes artificiels sont des zones d'image horizontales, non occultées, fortement contrastées et assez grandes.
Le plan décrit ici est focalisé sur la détection. Par conséquent, il n'y a pas réellement d'élimination des fausses détections. Les résultats obtenus pourrait donc être affinés par la suite en utilisant des connaissances plus spécifiques sur les types de texte à détecter.
L'image initiale (Wolf, 2003). | L'image résultat. |
La méthode est basée sur l'hypothèse que les textes artificiels sont des régions caractérisées par une forte densité en contours verticaux. Elle est composée de 5 étapes :
L'image est convertie en niveaux de gris puisque la couleur n'est pas une caractéristique intrinsèque des textes. Puis, l'image est lissée avec un filtre gaussien pour atténuer le bruit avant de calculer le gradient vertical par l'utilisation d'opérateurs morphologiques : la différence entre la dilatation horizontale et l'érosion horizontale de l'image :
g(x,y) = δV(f(x,y)) - εV(f(x,y))
pany2pan input.png input.pan prgb2gray 0.299 0.587 0.114 input.pan tmp1.pan pgaussianfiltering 0.5 tmp1.pan tmp2.pan plineardilatation 0 0 1 tmp2.pan tmp3.pan plinearerosion 0 0 1 tmp2.pan tmp4.pan psub tmp3.pan tmp4.pan text1.pan | |
text1.pan : Image des gradients verticaux. |
La binarisation est utilisée pour garder les structures verticales les plus contrastées. Le seuil est calculé à partir de la valeur d'entropie qui est bien adaptée à la détection de petites structures fines reposant sur un grand fond uni.
Pratiquement, la valeur de seuil est déterminée comme le niveau de gris qui maximise la quantité totale d'information fournie par le fond et les objets séparément. La quantité d'information est mesurée par l'entropie.
pentropybinarization text1.pan text2.pan | |
text2.pan : Après la Binarisation par entropie. |
Avant la détection des régions, on utilise une fermeture verticale pour reconnecter les lignes verticales puisque le gradient vertical produit des lignes discontinues pour les lignes non strictement droites. Puis, une fermeture horizontale est utilisée pour fusionner ensemble les contours proches en une seule région. La fermeture utilise un élément structurant horizontal de demi-taille 4 qui fusionne les contours qui sont à une distance maximale de 9 pixels.
plineardilatation 90 0 2 text2.pan tmp5.pan plinearerosion 90 0 2 tmp5.pan text3-1.pan plineardilatation 0 0 4 text3-1.pan tmp7.pan plinearerosion 0 0 4 tmp7.pan text3-2.pan | |
text3-1.pan : Après la fermeture verticale. | |
text3-2.pan : Après la fermeture horizontale. |
Une fermeture verticale de 2 pixels de demi-taille permet de rendre les régions plus compactes.
plineardilatation 90 0 2 text3-2.pan tmp8.pan plinearerosion 90 0 2 tmp8.pan text4.pan | |
text4.pan : Après la fermeture verticale. |
L'étape suivante supprime les régions trop petites, à savoir les régions de demi-largeur < 2 pixels et de surface < 100 pixels.
plinearerosion 0 0 2 text4.pan tmp9.pan plineardilatation 0 0 2 tmp9.pan tmp10.pan pareaopening 8 100 tmp10.pan text5.pan | |
text5.pan : Après l'élimination des régions trop petites. |
L'enveloppe convexe est calculée pour chacune des régions. Les régions qui n'ont pas une enveloppe convexe rectangulaire sont éliminées (ie., un facteur de rectangularité < 70%).
plabeling 8 text5.pan tmp11.pan pconvexhull tmp11.pan tmp12.pan prectangularityselection 1 .70 tmp12.pan text6.pan | |
text6.pan : Après l'élimination des régions non rectangulaires. |
Les enveloppes convexes de moins de 21 pixels de largeur sont supprimées.
plinearerosion 0 0 10 text6.pan tmp13.pan plineardilatation 0 0 10 tmp13.pan text7.pan | |
text7.pan : Après la suppression des petites régions. |
La localisation des régions est faite dans des boîtes englobantes qui sont ensuite dilatées de 2 pixels pour bien prendre englober tous les pixels des caractères.
pboundingbox text7.pan tmp14.pan pdilatation 1 2 tmp14.pan text8.pan | |
text8.pan : Les boîtes englobantes résultantes. |
Les frontières des boîtes englobantes sont superposées à l'image initiale pour une meilleure visualisation des résultats.
pboundary 8 text8.pan tmp15.pan psuperimposition 1 input.pan tmp15.pan output.pan ppan2png output.pan output.png | |
output.pan : Le résultat. |