noussaa19
Messages postés18Date d'inscriptionjeudi 28 décembre 2000StatutMembreDernière intervention12 avril 2010
-
12 avril 2010 à 13:41
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 2013
-
12 avril 2010 à 16:01
Salut;
Je suis sur le point de péparer mon PFE, mon projet consiste à détecter les défaut dans des image de la radiographie industrielle avec Matlab.
En effet, j'ai une image en niveau de gris et j'ai appliqué imcrop pour extraire une portion de cette image, puis je veux faire le seuillage de cette image en utilisant l'algorithme de Sauvola. Ce dernier calcule la moyenne et l'écart type pour chaque 15*15 et puis à partir de ces valeur il va calculer la seuille de cette portion de 15*15 et il applique le seuillage de cette portion, je pense il faut ensuite additionner tous ces portions et les rendre une image seuillée.
j'ai esayer de faire le code suivant:
I=imread('68JP.jpg');
figure(1),imshow(I);
I1=imcrop; %sélectionner une portion de l'image
ss=size(I1);%calculer la taille de l'image
Im=I1;
mf=zeros(ss(1),ss(2));
%parcours de l'image à seuiller
for i=1:15:ss(1)
for j=1:15:ss(2)
h=i;hi=i+15;
s=j;sj=j+15;
%si la taile de la dernière portion de l'imge est inf à 15
if(hi>ss(1))
break;
end
if(sj>ss(2))
break;
end
%création d'une matrice vide de taille qui vaut à 15*15
MM=zeros(hi-h,sj-s);
%copier la portion 15*15 dans une matrice vide
o=1;
p=1;
for m=h:hi
for n=s:sj
MM(o,p)=Im(m,n);
o=o+1;
p=p+1;
end
end
moyen=mean(mean(MM));
ecart=std(std(MM));
MM=zeros(hi-h+1,sj-s+1);
%calcul du seuil pour la portion 15*15
seuil(m,n) = moyen *(1 + (1/10)*( 1-( ecart / 256) ));
%appliquer le seuillage sur l'image
k=1;
l=1;
for k=h:hi
for l=s:sj
disp(k);
if(Im(k,l)<seuil(m,n))
%si le pixel inf à seuil, il devient noir
mf(k,l)=0;
end
if(Im(k,l)>=seuil(m,n)) %si le pixel sup ou egal à seuil, il devient blanc
mf(k,l)=256;
end
end
end
end
end
figure(2),imshow(mf);
Le résultat de ce code ne me donne pas un bon seuillage:
Comme vous voyez ce n'est pas une bonne résultat alors que dans des pixels particulier elle donne une bonne résultat, je pense que j'ai commis une erreur dans mon code???
Merci de m'aider.
Je ne suis pas sur que ca donne les mêmes résultats que ca:
M=MM(:)
moyen = mean(M)
ecart=std(M);
C'est à tester.
Enfin, qu'est ce que tu cherches à extraire dans ton image? Un simple seuillage ne suffirait pas?
A+
____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.