image-processing - prewitt - filtro paso alto imagen
problema de detección de bordes en la detección de texto en imágenes (2)
Estoy tratando de imponer el papel de Epshtein ( Detectando texto en escenas naturales con transformación de ancho de trazo (2010) ) en la detección de texto en imágenes naturales. El primer paso es la detección de bordes.
Estoy obteniendo algunos bordes adicionales dentro de mi texto. ¿Cómo debo eliminar esos?
Imagen original:
Mi detección de bordes:
En el ejemplo, puede ver bordes adicionales en el texto "POR QUÉ APURAR"
He intentado estos pasos en Matlab:
% contrast enhancement
I_adjust = imadjust(I);
% dilation & erosion
se = strel(ones(3,3));
I_dilate = imdilate(I_adjust, se);
I_final = imerode(I_dilate, se);
% gaussian smoothing
h_mask = fspecial(''gaussian'');
I_final = imfilter(I_final,h_mask);
figure; imshow(I_final);
BW_canny = edge(I_final,''canny'');
figure; imshow(BW_canny);
Problema n. ° 2:
Según la sugerencia de belisarius, descubrí que el filtro de cambio de media funciona bastante bien para la segmentación de la región de texto. Ahora estoy enfrentando otro problema en la implementación de la transformación de Ancho de trazo (vea el documento de Epshtein).
El ancho de trazo funciona bien con caracteres como ''H''''Y'' incluso para ''S'' porque los bordes correspondientes suelen estar a una distancia constante si avanzamos en la dirección de gradiente.
El problema viene en caracteres como ''W''. Para una parte del borde izquierdo de la primera carrera ascendente , obtenemos el borde derecho de la segunda barra ascendente como su borde correspondiente. Mientras que para otra parte, obtenemos el borde derecho de la primera carrera ascendente . Esto introduce una variación significativa en el ancho del trazo de la región de ''W'' que lleva a denominar esto como región sin texto según el papel.
¿Alguien puede sugerir alguna solución?
Eche un vistazo a la documentación de Matlab para edge
y el artículo de Wikipedia sobre el algoritmo de Canny.
Puede llamar a edge(I, ''canny'', thresh, sigma)
para tener más control. Juega con los umbrales de borde alto y bajo. Intenté primero bajar el umbral alto: dado que los bordes interiores no están conectados a los bordes de las letras, la magnitud del gradiente debe superar el umbral alto dentro de las letras.
También puede aumentar sigma
para desenfocar más la imagen antes de la detección de bordes. (Su desenfoque gaussiano es redundante, porque el edge
borra la imagen por usted).
Use un Mean Shift Filter
antes de la detección de bordes. Ejemplo en Mathematica:
i = Import["http://img839.imageshack.us/img839/28/whyhurry.jpg"];
iM = MeanShiftFilter[i, 2, .15, MaxIterations -> 10]
EdgeDetect[iM]
Productos: