Tengo una imagen RGB con varios signos. Mi objetivo principal es contar los signos que están en contacto con los bordes de la imagen.
Enfoque y problema
Comencé cargando la imagen [Fig. 1], luego lo convirtió a escala de grises y aplicó un filtro mediano para eliminar el ruido [Fig. 2] Luego lo binaré con un umbral de 0.2, que resultó en la Figura 3. En este momento obtuve mi imagen binarizada, pero el problema es que algunas partes que pertenecen al mismo signo están apareciendo en varias regiones, en lugar de solo una. Ahora mi objetivo es fusionar las regiones que pertenecen al mismo objeto, de modo que pueda usar bwlabel
para contar cuántos signos hay en la imagen, y usar imclearborder
para deshacerme de los que están en el borde, y usar de bwlabel
nuevo para obtener la diferencia entre los dos.
Mi enfoque era utilizar bwmorph
, Dilate
para dilatar los objetos y luego tratar de llenarlos con imfill
, holes
. Pero el problema es que si los dilato en una pequeña cantidad [Fig. 4], imfill
parece que no los llena, si los dilato en gran cantidad [Fig. 5] todos los objetos comienzan a fusionarse :(
Código
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)
Cifras
Higo 1 :
Fig 1 http://dl.dropbox.com/u/5272012/1.png
Higo 2 :
fig 2 http://dl.dropbox.com/u/5272012/2.png
Higo 3 :
fig 3 http://dl.dropbox.com/u/5272012/3.png
Higo 4 :
fig 4 http://dl.dropbox.com/u/5272012/4.png
Higo 5 :