Suppression des couleurs - anna-barry/OCR GitHub Wiki
Pour des documents à faible qualité, la numérisation de ses derniers a de meilleurs résultats en niveaux de gris. Lors de la numérisation en niveaux de gris, le programme sélectionnera automatiquement la valeur d’intensité. Ainsi, malgré des défauts sur le papier, la numérisation gardera l’encre noire en priorité. En effet, le mode de numérisation en niveaux de gris conserve plus d'informations sur les lettres du texte numérisé, ce qui permet d'obtenir une meilleure reconnaissance optique des caractères des documents de qualité faible à moyenne. Si l’on n'a pas besoin de préserver les couleurs d'origine du document en couleur, traiter la numérisation en mode noir et blanc est la meilleure solution. Cela réduira considérablement la taille du projet d'OCR obtenu et la vitesse du processus d'OCR. Cependant attention car le traitement des images à faible contraste en noir et blanc peut résulter en une faible qualité d’OCR ( => photos, pages de magazine et textes en chinois, japonais et coréen ).
Etapes :
- lire une image dans un fichier
- extraire les couches d'une image couleur
- faire des manipulations élémentaires sur les niveaux de gris
- enregistrer une image dans un fichier
Aide :
- setPixel(x,y,int R,int V,int B) permet d’affecter à un pixel avec les composantes RVB.
- int rgb[ ] = getPixelColor(x,y) permet de lire les composantes RVB du pixel (x,y). rgb[0] donne la composante R rgb[1] donne la composante V rgb[2] donne la composante B Pour transformer une image couleur en niveaux de gris, on doit remplacer chaque composante [R, G, B] par leur moyenne. Par exemple pour le pixel (X, Y), cela donne : ==> int moy = (rgb[0]+rgb[1]+rgb[2]) / 3 setPixel(X, Y, moy , moy, moy);
Comment passer ensuite à une image noir et blanc, c’est-à-dire codée uniquement par les valeurs 0 ou 255 ? Il suffit de se fixer un seuil, par exemple 128 : en-dessous strictement de 127, c’est 0 par exemple et au dessus, c’est 255.
image_init=im_ouvre('imageorigine.pgm') # Choisir l'image d'origine
tableau=image_init[0]
largeur=len(tableau[0]) print('largeur=',largeur) hauteur=len(tableau) print('hauteur = ',hauteur) # Affiche la taille de l'image
def binarise(tab, seuil): """Cette fonction renvoie un tableau représentant l'image binarisée"""
for i in range (0,hauteur,1) : for j in range (0,largeur,1) : if tab[i][j] >= seuil : tab[i][j] = 0 else : tab[i][j] = 1 return (tab)
Ici il est possible de faire deux fonctions :
- une qui met une image en niveaux de gris
- une qui binarise l'image et créer le tableau
Il faut juste utiliser la fonction création du tableau pour mettre l'image en noir et blanc en fonction du seuil et la valeur de RVB de chaque pixel et ensuite une qui binarise le tableau
-> binaire 1 - noir -> binaire 0 - blanc