0% encontró este documento útil (0 votos)
40 vistas4 páginas

Base Proyecto

El documento describe varios métodos para reconocer caracteres en imágenes binarias, incluyendo aplicar umbrales, sumas de filas, proyecciones horizontales, morfología matemática y correlación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas4 páginas

Base Proyecto

El documento describe varios métodos para reconocer caracteres en imágenes binarias, incluyendo aplicar umbrales, sumas de filas, proyecciones horizontales, morfología matemática y correlación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Aplicar umbral?

Se refiere a que para acabar con una imagen binaria hay que hacer una conversión a máximo contraste,
para ello hay que poner un umbral, los valores que pasen de ese umbral serán considerados 1s y los que
estén por debajo 0s (en este caso como hay que invertirlo puede hacerse al revés para ahorrar tiempo).

Avanzado: Si no funciona aplicar dithering y tener en cuenta a la hora de hacer la conversión a alto
contraste, quizás filtrando la imagen, quien sabe

TAREA 2

SUMA DE FILAS

sum(A,2)

ej: A =

1 3 2

4 2 5

6 1 4

S = sum(A,2)

11

11

Determinar umbral para detectar filas experimentalmente sobre el vector "S", idealmente si la imagen
está en binario no tendría que haber problema pero si hay artefactos podría llegar a ser necesario, en
caso contrario sería:

Si el número es > 0 la fila empieza

Si la fila ya ha empezado y cambia a 0 entonces la fila acaba


Alternativa:

$$Normalizar el resultado y redondear hacia arriba

S = S/max(S);

S = ceil(S)

Hacer la derivada S2 = diff(S) [quedaría un vector que alternaría entre 1 y -1]

-Para encontrar los Inicios de fila usar inicios = find(S==1)

-Para encontrar los finales de fila usar finales = find(S== -1)$$

Morfología matemática:

-Usar dilatación

*Muy simplificado, lo que hace es "estirar" la imagen según una forma*

*Similar (sino igual) a hacer convolución con la forma (al menos en este caso)*

BW = imread('text.png'); //quizás valga con la imagen en binario

se = strel('line',dil_length,0);

BW2 = imdilate(BW,se); imshow(BW2), title('Dilated')

//la forma que vamos a usar es una linea, dil_length es cuanto queremos que se estire (longitud de la
línea), haciendo el último número un cero hacemos que sea horizontal y de izquierda a derecha
(corresponde a grados de inclinación.

En los apuntes dicen que esto puede servir para encontrar texto (cierre (x [m, n]) - x [m, n])

cierre = dilatación → erosión (según apuntes) //Encuentra el texto guay pero lo complica para el
reconocimiento de caracteres, usar como ultimo recurso si no encuentra el texto

Determinar dil_length experimentalmente (20 parece estar bien)

bwlabel: al meterle una matriz con unos y ceros hace lo siguiente

-Encuentra objetos "blancos"(formados por unos) que estén separados por ceros

-A cada objeto le asigna un número reemplazando el uno

Ejemplo: Si yo en una matriz de ceros dibujo en la esquina superior izquierda y en la inferior derecha dos
cuadrados con unos sin que estos se toquen bwlabel va a cambiar los 1s del cuadrado de abajo a la
derecha por 2s.
Esto es útil para encontrar fácilmente las posiciones de los objetos con el comando find que nos dará una
lista con todas las posiciones que ocupa el objeto.

//queda más largo, no lo voy a hacer

Tarea 3

proyección horizontal: sum(A)

hacer "$$" para encontrar los caracteres (puede hasta implementarse como función?)

bwlabel

ir usando find para encontrar las posiciones de los pixeles de los caracteres

en la matriz resultante calcular el máximo y el mínimo de la primera columna para hayar los límites del
caracter

correlación

hacer un vector con valores r = xcorr(x[n],x[n+1]) siendo x[n] la columa n de la imagen

si baja a partir de cierto valor a determinar hay un cero (esto me parece rebuscadísimo y sinceramente
no me tiene sentido para esta aplicación)

Tarea 4

Una vez obtenidos los caracteres usar [n_filas,n_columnas] = size(caracter) y si n_filas< n_columnas
prerrederizar una columna de 0s tamaño n_filas con el comando zeros(n_filas,1), en caso contrario
comprobar si es mayor (parece improbable, quizás si sacamos las fotos muy mal esto pueda pasar) y si es
el caso prerrenderizar una fila de 0s tamaño n_columnas [zeros(1,n_columnas)];

añadir filas/columnas (se puede usar bucle for?)

€€

calcular: size_ratio = tamano_caracter/tamano_imagen //tamano_caracter sería el tamaño de las


imagenes de caracteres que tenemos de nates, tamano_imagen es el tamaño del caracter a analizar

hacer resize:

J = imresize(Imagen_a_analizar, size_ratio, '(método de interpolación a determinar


experimentalmente)');

Tarea 5
Esto creo que ya está hecho?

De todas formas con lo que tenemos hasta €€ la tarea 4 sería ir guardando los caracteres.

Sería bueno que la imagen del alfabeto fuera de la misma naturaleza que las imágenes que vamos a usar,
aún con todo puede haber errores, quien sabe

Tarea 6

método: c = suma(suma((Entrada-0.5). *(Patrón-0.5)))

Si hay un pico muy alto* es el caracter.

(probar éste método y si no funciona recurrir a los siguientes, prepararse porque viene mucha mierda)

posbilidad: usar FFTs en vez de valores en bruto (aplicable a todos los otros métodos)

posbilidad: pasar la imagen a coordenadas polares para hacer cualquiera de los métodos

posbilidad: c = xcorr2(imagen_ref,imagen_a_analizar) siendo ambas imagenes de caracteres, si hay un


pico muy alto* es el caracter.

*Para determinar este valor hacer primero autocorrelación (o análogo), ese sería el valor ideal, ir
haciendo correlación cruzada (o el método que sea) con otras letras parecidas, la que de mayor será el
valor mínimo, si el valor c está entre esos dos tenemos un caracter

posbilidad: restar las imágenes y calcular la media de las distancias (impreciso, quizás combinable con
otros, del palo: encontrar el supuesto centro de la imagen con xcorr2 y calcular a través de ahí)

posibilidad: usar todos los métodos anteriores y determinar las ponderaciones para cada una de las
métricas, del tipo c_final = c_FFT * a + C_xcorr * b + ... hacerlo de forma experimental, o usando una red
neural simple (más sencilla que la de la posibilidad de abajo) (mentira, por favor, no intentar esto, muy
rollo, poner en el apartado de posibles mejoras)

posibilidad remota para hacer esta wea mejor: usar el deep learning toolbox de matlab (redes neurales)
(harían falta muchas imagenes, quizás generadas por ordenador, es el más trabajoso de los métodos
aunque quizás se pueda conseguir algo de internet y modificarlo)

También podría gustarte