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