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 :
fuente
Respuestas:
En mi opinión, la erosión por dilatación son herramientas muy básicas. Tiene una base de información muy sólida y una imagen de entrada bastante decente para tomar tales decisiones.
Aquí está mi punto de vista:
Dado un éxito razonable que ha demostrado pasar de la figura 1 a la 3, puede identificar y segmentar signos individuales.
Suponiendo que haya conocido signos anteriormente, puede aplicar algoritmos rápidos decentes para hacer la coincidencia de patrones. En caso de que no se conozcan los patrones exactos, simplemente puede identificar la forma externa del patrón.
Según la clasificación, siempre puede definir el centroide de cada patrón coincidente y su ancho y alto respectivos. Si el centroide X, la posición Y está demasiado cerca del borde, es decir, o forma, está fuera del borde, de manera similar también puede solicitar el eje Y.c e n t r o i d ( x ) > i m a g e w i d t h - s h a p e w i d t hc e n t r o i d( x ) < 0 c e n t r o i d( X ) > i estoy un ge w i dt h - s h a p e w i dt h
Dado que solo le preocupa lo que cae en el borde, debe comenzar solo con cada borde e iniciar la coincidencia de patrones allí. Comienza coincida con el patrón / forma parcial y si el patrón / forma parcial hace partido que objeto SE está cortando en el borde.
Aquí hay algunas referencias que pueden ayudarlo a formular bien el problema.
Este documento es muy bueno para comprender muchos conceptos básicos sobre los signos / tokens con los que está tratando.
Anil K. Jain y Aditya Vailaya Recuperación basada en forma: un estudio de caso con bases de datos de imágenes de marcas Reconocimiento de patrones 1998, vol. 31, no9, págs. 1369-1390
Hay muchos elementos de investigación que se ocupan de la coincidencia parcial o ocluida de formas / patrones.
Eli Saber, Yaowu Xu, A. Murat Tekalp Reconocimiento parcial de forma mediante coincidencia de submatriz para etiquetado guiado parcial de imágenes Reconocimiento de patrones 38 (2005) 1560 - 1573
Expandirá esta respuesta para consultas más específicas si adopta este enfoque.
fuente
Aquí hay una pequeña inspiración que muestra lo contrario de lo que está buscando.
Comience con la fig3.
fuente