Bonjour à tous/toutes,
Je vous expose mon problème, je travaille sous matlab, j'ai en fait une image initiale que je dois segmenter :
http://uploads.imagup.com/11/1256261048_essai.JPG
afin d'obtenir ceci: http://pics.imagup.com/05/1256261217_VT.jpg
J'ai donc tout d'abord utilisé jseg afin de determiner des contours qui me semblaient "corrects", afin plusieurs essais j'obtiens ceci:http://pics.imagup.com/05/1256261291_q50m0.3.jpg
Donc je veux maintenant remplir chaque zone d'une des trois couleurs gris, noir ou blanc.
J'avais d'abord écrit un .m pour remplacer les valeurs rgb de la matrice de l'image "grossierement" et sans tenir compte des contours:
mais j'obtiens cette erreur:Code:img=imread('essai.tif'); %on charge l'image figure,imshow(img); %on l'affiche [m,n,o]=size(img); %on recupere ses dimensions img2=zeros(m,n); %on cree une matrice vide de la meme dimension for i=1:m for j=1%:n %on parcourt toute l'image if (img(i,j) > 0 && img(i,j) < 120) (img2(i,j,1)=2 && img2(i,j,2)=2 && img2(i,j,3)=2) %la couleur noire if (img(i,j) > 120 && img(i,j) < 135) (img2(i,j,1)=254 && img2(i,j,2)=254 && img2(i,j,3)=254) %la couleur blanche if (img(i,j) > 145 && img(i,j) < 160) (img2(i,j,1)=193 && img2(i,j,2)=193 && img2(i,j,3)=193) %la couleur grise else (img2(i,j,1)=img(i,j,1) && img2(i,j,2)=img(i,j,2) && img2(i,j,3)=img(i,j,3)); end end end figure,imshow(img2);
Savez vous pourquoi? Alors que si j'execute chaque ligne dans matlab directement je n'obtiens pas d'erreur !Code:>> run img.m ??? Attempt to reference field of non-structure array.
Ensuite, je voudrais tenir compte des contours car cette 1ere méthode n'est pas bonne.
J'ai donc pensé à ce bout de code, les contours étant blancs (255,255,255)
On ferait ça avec les trois couleurs, mais comment traduire ce que j'ai mis en majuscules en langage matlab? Et des problèmes se posent car je suppose qu'il va tout remplir sans tenir compte du prochain contour non? Et si on remplit de blanc une zone, comment va-t-il savoir différencer un contour?Code:img=imread('contours.tif'); %on charge l'image avec les contours figure,imshow(img); %on l'affiche [m,n,o]=size(img); %on recupere ses dimensions img2=zeros(m,n); %on cree une matrice vide de la meme dimension for i=1:m for j=1%:n %on parcourt toute l'image if (img(i,j)=255) && [LA MOYENNE DES VALEURS RGB DES PROCHAINS PIXELS JUSQU'AU PROCHAIN PIXEL BLANC DESIGNANT UN CONTOUR]=[VALEUR PROCHE D'UNE DES 3 COULEURS DE REFERENCE] %si on tombe sur un pixel blanc (img2(i,j,1)=2 && img2(i,j,2)=2 && img2(i,j,3)=2) %alors on remplit de l'une des 3 couleurs de reference jusqu'au prochain pixel blanc (ici 2,2,2 soit le noir)
Plein de questions, j'espere qu'il y aura des réponses, je compte sur vous =D
Si je n'ai pas été assez clair, demandez-moi des détails.
Merci d'avance!
-----