TP d`entraÃ˝onement : reconnaissance de caractères
Transcription
TP d`entraÃ˝onement : reconnaissance de caractères
TP d’entraÃőnement : reconnaissance de caractères O. Wilk avril 2010 1 Introduction Dans ce TP, nous allons développer une méthode permettant la reconnaissance de caractères. Nous nous limiterons à reconnaitre les chiffres de 0 à 9. La méthode proposée reprend certains éléments présentés en ED. Elle se décompose en 2 parties. La première est une étape de préparation qui consiste à déterminer une image "référence" pour chaque type de chiffre. La seconde est l’étape de reconnaissance qui consiste à déterminer une image dans l’espace constitué par les images "références" qui soit la plus proche de l’image contenant le chiffre "inconnu". 1 Cnam - Réf. 18458 - Traitement des images et géométrie - TP 2 2 La préparation 2.1 La base Pour cette étape, nous allons utiliser une base de données. Pour chaque type de chiffre, nous avons n images différentes. Pour le chiffre i, nous avons les images {Xij ∈ lRP ×Q /j = 1, n} (i peut prendre les valeurs de 0 à 9). Remarque : Chaque image Xij doit être binarisée à l’aide d’une opération de seuillage. La valeur du fond doit être égale à 0, donc la valeur des pixels décrivant le chiffre vaut 1. Pour déterminer l’image "référence" XiR pour chaque chiffre i, nous résolvons le problème suivant : minX R J (1) n X P X 1X (X R (p, q) − Xij (p, q))2 2 j=1 p=1 q=1 i (2) i Q avec J = Les solutions XiR (cf. Figure 1) de (1) pour chaque i de 0 à 9 constituent une base d’images "chiffre" nous permettant d’envisager la reconnaissance. Mais avant cela, il faut procéder à au moins une amélioration. Figure 1 : les images "références". Cnam - Réf. 18458 - Traitement des images et géométrie - TP 3 2.2 Une amélioration Les images {Xij /j = 1, n} contiennent chacune un chiffre. Celui-ci peut être positionné de manière très différente au sein de ces images. Pour remédier à cela, nous effectuons un recentrage de la manière suivante : M p = f ix( M q = f ix( avec nb = PP p=1 PP p=1 PQ j q=1 Xi nb PQ j q=1 Xi nb Q P X X ×p ×q ) ) Xij (nombre de pixel de valeur 1). p=1 q=1 Remarque : Le fait d’avoir le fond de l’image à 0 et le chiffre à 1 est bien sur très important pour que la moyenne précédente est le sens que nous souhaitons. Yij = Xij (M p − a : M p + a, M q − b : M q − b) Yij est donc de dimension (2a + 1) × (2b + 1). Remarque : Attention en fonction du choix de a et de b, il peut être utile de prolonger l’image Xij pour que l’opération précédente puisse s’effectuer ! Bien entendu, cette amélioration doit s’effectuer avant la détermination des images "références" ainsi que pour chaque image contenant un chiffre inconnu. 3 La reconnaissance La reconnaissance consiste à résoudre le problème suivant : avec J1 = minα J1 (3) 1 (X(p, q) − αi × XiR (p, q))2 2 p=1 q=1 i=0 (4) Q P X X 9 X X étant l’image contenant le chiffre inconnu et α ∈ lR10 . La valeur de i, où αi (ième composante de la solution de (3)) est maximal, nous fournit un bon candidat pour être le chiffre recherché. 4 L’application 4.1 La programmation Vous programmerez les étapes suivantes : Cnam - Réf. 18458 - Traitement des images et géométrie - TP 4 - Lecture de l’image BdD "Base De Données", vous retrouverez les Xij de la manière suivante : Xij = BdD(i × P + 1 : (i + 1) × P, j × Q + 1 : (j + 1) × Q) pour i = 0, 9 et j = 1, n. - Binarisation : Si Xij (p, q) ≥ seuil alors Xij (p, q) = 1 sinon Xij (p, q) = 0. - Recentrage des chiffres : Pour accélérer ce calcul, vous pouvez créer les matrices "Position_p" et "Position_q" : Position_p0= [1:P]’; Position_p= Position_p0; for q=1:Q-1 Position_p= [Position_p,Position_p0]; end Position_q0= [1:Q]; Position_q= Position_q0; for p=1:P-1 Position_q= [Position_q;Position_q0]; end Vous avez ainsi la possibilité d’utiliser l’opérateur produit M atrice1×M atrice2 de Matlab qui permet d’obtenir une matrice dont chaque composante (p,q) est le produit de M atrice1(p, q) × M atrice2(p, q) : X .* Position_p Pour la seconde partie du recentrage, vous pouvez utiliser les lignes sources suivantes pour assurer la découpe : a1= fix(P/2); b1= fix(Q/2); % creation d’une image plus grande que X : % ======================================== Xtmp= zeros(P+2*a1,Q+2*b1); % On positionne l’image X au milieu de Xtmp : % ========================================== Xtmp(a1+1:P+a1,b1+1:Q+b1)= X; % On decoupe : % ============ X= Xtmp(Mp+a1-a:Mp+a1+a,Mq+b1-b:Mq+b1+b); Vous pouvez utiliser l’opérateur de concaténation [ , ] de Matlab pour recréer une grande image BdD contenant toutes les images retravaillées. - Création des images de "références" : Vous calculerez chaque image en résolvant ∇J = 0. Cnam - Réf. 18458 - Traitement des images et géométrie - TP 5 - Reconnaissance : Choix de l’image "chiffre" X à reconnaitre puis détermination de α en utilisant la méthode du gradient simple à pas optimal. 4.2 L’application numérique Vous utiliserez l’image BdD.jpg. Et vous prendrez : seuil = 0.1, P = 112, Q = 110, a = 25, b = 25 Puis vous essayerez de reconnaitre les chiffres contenus dans les images : X03 , X11 , X27 , X34 , X49 ; X56 , X62 , X78 , X83 , X91 . Pour la méthode du gradient simple, vous utiliserez le test d’arrêt qui arrête le processus itératif quand la norme du résidu est inférieur à la norme du second membre divisée par 1000. Pour chacune de ces images, vous donnerez le vecteur α ainsi que le nombre d’itération pour vérifier le test d’arrêt et vous dégagerez le numéro de la composante de α ayant la valeur maximale pour ainsi vérifier si le chiffre a bien été reconnu. Commentez vos résultats. Attention : Ce TP ne sera pas noté. Il vous est proposé uniquement pour illustrer certains aspects développés en cours et en ED. 5 Les sources du travail demandé % donnees et parametres % ===================== fichiers = ’....../BdD.jpg’; n= 112; m= 110; % dimensions de chaque image (avant decoupage) a2= 25; b2= 25; % demi-dimensions de chaque image (cf. decoupage) Choixi = 5; % Pour le choix de l’image a identifier Choixj = 8; seuil = 0.1; Eps = 0.001; % ===================== [f,dimIy,dimIx] = LectureImage(fichiers); f = Normalisation(f); Tout= f(1:10*n,1:10*m); Cnam - Réf. 18458 - Traitement des images et géométrie - TP % calcul des matrices Position_i et Position_j % utiles ppour le calcul du centre des images. % ============================================ Position_i0= [1:n]’; Position_i= Position_i0; for j=1:m-1 Position_i= [Position_i,Position_i0]; end Position_j0= [1:m]; Position_j= Position_j0; for i=1:n-1 Position_j= [Position_j;Position_j0]; end % ============================================ % seuillage, centrage et decoupage % on stocke tout dans ---> Tout2 % ================================ for i=0:9 for j=0:9 Y= Tout(1+i*n:(i+1)*n,1+j*m:(j+1)*m); % seuillage et inverse du 0 et du 1 % ================================= [Y]= Binarisation(Y,seuil,0); Y= abs(Y -1); % ================================= % calcul du centre % ================ nb= sum(sum(Y)); Mi= fix(sum(sum(Y.*Position_i))/nb); Mj= fix(sum(sum(Y.*Position_j))/nb); % ================ % decoupe % ======= a= fix(n/2); b= fix(m/2); Ytmp= zeros(n+2*a,m+2*b); Ytmp(a+1:n+a,b+1:m+b)= Y; Y= Ytmp(Mi+a-a2:Mi+a+a2,Mj+b-b2:Mj+b+b2); % ======= if ( j== 0 ) X= Y; else X= [X,Y]; end 6 Cnam - Réf. 18458 - Traitement des images et géométrie - TP end if ( i==0 ) Tout2= X; else Tout2= [Tout2’,X’]’; end end % ================================ % nouvelles dimensions de chaque image % ==================================== n= 2*a2+1; m= 2*b2+1; % ==================================== % determination des images "references" (les moyennes !!!) % on les stocke dans ---> Tout3 % ======================================================== for i=0:9 Moyenne= zeros(n,m); for j=0:9 Y= Tout2(1+i*n:(i+1)*n,1+j*m:(j+1)*m); Moyenne= Moyenne + Y; end Moyenne = Moyenne/10; if ( i==0 ) Tout3= Moyenne; else Tout3= [Tout3’,Moyenne’]’; end end % ======================================================== % Choix d’une image dans Tout2 % ============================ X= Tout2(1+Choixi*n:(Choixi+1)*n,1+Choixj*m:(Choixj+1)*m); % ============================ % construction de la matrice et du second membre associes % au probleme de moindres carres. % ======================================================= for i=0:9 Yi= Tout3(1+i*n:(i+1)*n,1:m); for j=0:9 Yj= Tout3(1+j*n:(j+1)*n,1:m); Mat(i+1,j+1) = sum(sum(Yi.*Yj)); b(j+1) = sum(sum(Yj.*X)); end 7 Cnam - Réf. 18458 - Traitement des images et géométrie - TP end % ======================================================= % processus de resolution % par la methode du gradient simple a pas constant % ================================================ alfa= b*0; test= norm(b); iter= 0; while ( test > Eps*norm(b) & iter < 1000) iter= iter + 1; % calcul du residu % ================ residu= b; for i=0:9 for j=0:9 residu(i+1)= residu(i+1) - Mat(i+1,j+1)*alfa(j+1); end end % ================ % calcul du rho optimal % ===================== Ar= residu*0; for i=0:9 for j=0:9 Ar(i+1)= Ar(i+1) - Mat(i+1,j+1)*residu(j+1); end end r2 = sum(residu.*residu); Arr= sum(Ar.*residu); rho= - r2/Arr % ===================== alfa= alfa + rho*residu; test= norm(residu); end % ================================================ 8