J'ai une image RVB avec divers signes. Mon objectif principal est de compter les signes en contact avec les bordures de l'image.
Approche et problème
J'ai commencé par charger l'image [Fig. 1], puis converti en niveaux de gris et appliqué un filtre médian pour se débarrasser de certains bruits [Fig. 2]. Ensuite, je l'ai binarisé avec un seuil de 0,2, ce qui a donné la figure 3. À ce moment, j'ai obtenu mon image binarisée, mais le problème est que certaines parties qui appartiennent au même signe apparaissent dans différentes régions, au lieu d'une seule. Maintenant, mon objectif est de fusionner les régions qui appartiennent au même objet, donc je pourrais utiliser bwlabel
pour compter le nombre de signes dans l'image, et utiliser imclearborder
pour se débarrasser de ceux de la frontière, et réutiliser bwlabel
pour obtenir la différence entre les deux.
Mon approche était d'utiliser bwmorph
, Dilate
pour dilater les objets et ensuite essayer de les remplir imfill
, holes
. Mais le problème est que si je les dilate en petite quantité [Fig. 4], le imfill
ne semble pas les remplir, si je les dilate beaucoup [Fig 5] tous les objets commencent à fusionner :(
Code
img=im2double(imread('image.png')); figure, imshow(img)
img_gray=rgb2gray(img); imshow(img_gray);
img_mediana=medfilt2(img_gray, [3 3]); figure, imshow(img_mediana);
img_bin=im2bw(img_mediana, 0.2); imshow(img_bin)
img_dilate=bwmorph(img_bin, 'Dilate', 10); imshow(img_dilate)
img_fill=imfill(img_dilate, 'Holes'); figure, imshow(img_fill)
Les figures
Fig 1 :
Fig 1 http://dl.dropbox.com/u/5272012/1.png
Fig 2 :
fig 2 http://dl.dropbox.com/u/5272012/2.png
Fig 3 :
fig 3 http://dl.dropbox.com/u/5272012/3.png
Fig 4 :
fig 4 http://dl.dropbox.com/u/5272012/4.png
Fig 5 :