análisis de imágenes: reconocimiento de letras

9

Click here to load reader

Upload: sandra-lucia

Post on 08-Jul-2015

130 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Análisis de imágenes: reconocimiento de letras

Sandra Lucía de la Fuente Bermúdez

Análisis de imágenes

Dr. José Joel González Barbosa.

CICATA – IPN Unidad Querétaro.

2014-06-01

Tarea. Reconocimiento de Letras

Page 2: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina1

Resumen. El presente documento, reporta una metodología para la detección de letras T

y Y, utilizando diversas herramientas vistas en el curso de análisis de imágenes.

Introducción

La detección y reconocimiento de objetos/características por medio de

imágenes, es una técnica muy utilizada, debido a su alta efectividad y a que es un

método no abrasivo. Es utilizado en la industria (i.e. en la detección de fallas y

esfuerzos mecánicos), en medicina (i.e. en la detección de lesiones y

enfermedades), y en la construcción (i.e. en la detección de fallas en el

pavimento), por mencionar algunas aplicaciones. Este reporte sugiere el

reconocimiento de letras T y Y, por medio de detección de líneas mediante la

transformada de Hough. Esta solución es muy sencilla, debido al alcance de la

tarea.

Desarrollo

La imagen se procesa como se muestra en el diagrama de la figura 1.

Figura 1. Diagrama de procesamiento digital de imágenes.

Obtención de la imagen

Preprocesamiento Segmentación

Detección de Características Clasificación

Resultado/ diagnóstico

Page 3: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina2

La imagen (figura 2) utilizada fué editada en CorelDraw® en formato .PNG para

una mejor detección de contornos.

Figura 2. Imagen original.

Para el pre-procesamiento, se binarizó la imagen (figura 3), mediante la detección

automática del umbral mediante la técnica de Otsu [1,2], preparando la imagen

para la segmentación.

Figura 3. Imagen binarizada.

Para la segmentación, antes identifico los objetos, es decir la cantidad de letras,

en la imagen mediante la función bwconncomp (bw,n), donde bw es la imagen

binaria, y n es el parámetro de conectividad (4, 8, o arbitrario). La función

bwconncomp encuentra todos los objetos conectados en una imagen binaria [3].

Page 4: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina3

Seguido de la detección de objetos, cada objeto es etiquetado con el mismo valor

entero, para este caso, lo llamamos image (ver código). Posteriormente, es

mostrado gráficamente cada objeto, para ser recortado de manera personalizada

(figura 4) y hacer más eficiente en tiempo y memoria la ejecución del código.

Figura 4. Recorte personalizado de la letra detectada.

Seguido de esto, se procede a la detección de bordes mediante el cálculo del

gradiente del objeto, para simplificar el proceso (figura 5).

Figura 5. Borde del objeto.

Para la detección de características, se obtiene el número de líneas de longitud

mínima a la mitad del largo de la letra, basado en la transformada de Hough [4-6].

Page 5: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina4

Código %% Limpieza del código clear all; close all; imtool close all; clc; warning off %% Inicialización de variables Ix=[-1,0,1; -1,0,1;-1,0,1]; Iy=Ix'; n_t=0; n_y=0; %% Obtención de la imagen I=imread('Letras.png'); %% Pre-procesamiento level=graythresh(I); Ibin = im2bw(I, level); % Binarización de imagen set(0,'DefaultFigureWindowStyle','docked'), figure(1), imshow(Ibin), title(['\fontsize{20}{\color[rgb]{0 .5 .4}Imagen

original binarizada}']); %% Segmentación % Detección de objetos cc=bwconncomp(Ibin,8); % Detección de objetos con 8 vecindades cc.NumObjects; % Número de objetos detectados % Etiquetado de objetos for (n=1:cc.NumObjects) image{n} = false(size(Ibin)); image{n}(cc.PixelIdxList{n}) = true; figure, imshow(image{n}), title(['\fontsize{20}{\color[rgb]{.2 .5 .2}Seleccione la zona de interés

de la imagen}']); image{n}=imcrop; %Recorte de imagen (para incrementar la rapidez de

procesamiento). end close all, clc % Limpieza %% Detección de características: figure(1), imshow(Ibin), title(['\fontsize{20}{\color[rgb]{0 .5 .4}Imagen

original binarizada}']); for (n=1:cc.NumObjects) ima = double(image{n}); % Detección de bordes: Convf_x= conv2(ima,Ix,'same'); Convf_y= conv2(ima,Iy,'same'); Gradientef{n}=sqrt((power(Convf_x,2))+(power(Convf_y,2)));% Gradiente de

la imagen % figure ('Name', 'Gradiente'), imshow(Gradientef{n}), title('Detección

de contornos: Gradiente'); BW=Gradientef{n};

%% Identificación de línea mayor en el objeto, por medio de Hough, para

establecer un patrón de umbral en la detección de líneas (esto permite

detectar líneas en base a la proporción del tamaño particular del

objeto/letra de estudio): [H,T,R] = hough(BW); % Transformada de Hough P = houghpeaks(H,6,'threshold',ceil(0.3*max(H(:))));% Identificación de

picos/ puntos de inflexión en la transformada de Hough x = T(P(:,2)); y = R(P(:,1)); % Extracción de segmentos de líneas en base a la transformada de Hough lines = houghlines(BW,T,R,P,'FillGap',100,'MinLength',200); % Find lines

and plot them max_len = 0; %% Identificación de líneas por medio de Hough:

Page 6: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina5

for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; len = norm(lines(k).point1 - lines(k).point2); % Determine the

endpoints of the longest line segment if ( len > max_len) max_len = len; xy_long = xy; end end BW=Gradientef{n}; %% Ajuste de detección de líneas para cada imagen: [H,T,R] = hough(BW); % Transformada de Hough P = houghpeaks(H,6,'threshold',ceil(0.3*max(H(:)))); % Identificación de

picos/ puntos de inflexión en la transformada de Hough x = T(P(:,2)); y = R(P(:,1)); % Extracción de segmentos de líneas en base a la transformada de Hough lines = houghlines(BW,T,R,P,'FillGap',100,'MinLength',max_len/2); %Ajuste

de detección de líneas: el umbral es la mitad de la longitud de la línea

mayor detectada. figure, imshow(BW), hold on max_len = 0;

%% Representación gráfica de las líneas detectadas: for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); % Plot

beginnings and ends of lines plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red'); len = norm(lines(k).point1 - lines(k).point2); % Determine the

endpoints of the longest line segment if ( len > max_len) max_len = len; xy_long = xy; end end %% Clasificación if(length(lines)==4) %Si existen cuatro líneas, se trata de una T, en

otro caso, se trata de una Y. title(['\fontsize{18}{\color[rgb]{.3 .3 .7}Tenemos una T}']) Str=sprintf('Nota: el número de líneas detectadas para la figura

%g=%g. La letra detectada es una T!',n,length(lines)); n_t=n_t+1; else title(['\fontsize{18}{\color[rgb]{.3 .3 .7}Tenemos una Y}']) Str=sprintf('Nota: el número de líneas detectadas para la figura

%g=%g. La letra detectada es una Y!',n,length(lines)); n_y=n_y+1; end annotation('textbox', [0,0,0.1,0.1],... 'String', Str); end %% Resultado Str_f=sprintf('Tenemos un total de %g letras T y %g letras Y en la

figura.',n_t,n_y); figure (1), annotation('textbox', [0,0,0.1,0.1],... 'String', Str_f);

Page 7: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina6

Resultados

Después de extraer el número de líneas de cada objeto, se procede a su

clasificación. Se tiene la característica principal que, para cada letra T involucrada

en el procesamiento, sin excepción, presenta cuatro líneas (figura 6), mientras

que para cada letra Y procesada, sin excepción, presenta 6, y en un caso singular,

5 líneas (figura 7). De aquí se definen los términos para clasificar la letra T y Y.

Figura 6. Detección de letra T.

Figura 7. Detección de letra Y.

Page 8: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina7

La clasificación anterior nos permite definir la cantidad de letras T y Y en la imagen

(figura 8).

Figura 8. Resultado de imagen 1.

Como estudio adicional, genero una imagen similar con rotaciones en las letras y

variaciones en las proporciones típicas, el resultado es satisfactorio (figura 9).

Figura 9. Resultado de la imagen 2.

Page 9: Análisis de imágenes: reconocimiento de letras

Análisis de imágenes. CICATA – IPN, Unidad Qro.

Pág

ina8

Conclusiones

Después de analizar varias características (detección de la zona de cruce de

líneas en cada letra por máscara, transformada particular de Fourier, y número de

líneas), se decidió conveniente y práctico analizar la imagen clasificando la letra

según la cantidad de líneas en el objeto de estudio; este método es funcional,

rápido, y eficiente. Se cubrió la necesidad del alcance planteada, de manera

robusta, siempre y cuando la imagen esté en formato PNG.

Si la imagen se encuentra en formato JPEG, se deberá adaptar el código para una

correcta detección de líneas.

No se realizaron pruebas en imágenes con otros caractéres.

Referencias

[1] X. Xu, S. Xu, L. Jin, and E. Song. “Characteristic analysis of Otsu threshold and its

applications,” ELSEVIER. China, 2010.

[2] MathWorks. “Im2bw,” Matlab Documentation Center (mathworks.com).

[3] MathWorks. “Image Processing Toolbox 7. User’s Guide,” MATLAB.

[4] MathWorks. “hough,” Matlab Documentation Center (mathworks.com).

[5] MathWorks. “houghpeaks,” Matlab Documentation Center (mathworks.com).

[6] MathWorks. “houghlines,” Matlab Documentation Center (mathworks.com).