Está en la página 1de 60

PROCESAMIENTO DE

IMÁGENES CON MATLAB

lonely113
http://lonely113.blogspot.com
LECTURA DE IMÁGENES

Mediante el comando:
Imagen=imread(‘nombre.extensión’);
La imagen a leer debe encontrarse en la carpeta de trabajo de
Matlab. Los formatos de imagen soportados por Matlab son:

Formato Extensión
TIFF .tiff
JPEG .jpg
GIF .gif
BMP .bmp
PNG .png
XWD .xwd

lonely113
http://lonely113.blogspot.com
Ejemplo: Lectura de una imagen *.jpg

La imagen "fruta.jpg" se encuentra en el directorio de


trabajo.

>> Im_RGB=imread('fruta.jpg');

lonely113
http://lonely113.blogspot.com
REPRESENTACIÓN DE IMÁGENES EN
MATLAB
En Matlab una imagen en formato de color RGB se
representa por tres matrices bidimensionales,
correspondientes a los planos R, G y B.

1=R
2=G
3=B

lonely113
http://lonely113.blogspot.com
OBTENCIÓN DE LOS PLANOS RGB

Para obtener los planos R, G y B se ejecutan los


comandos:
Im_R=Imagen(:,:,1)
Im_G=Imagen(:,:,2)
Im_B=Imagen(:,:,3)
Ejemplo:

>> Im_R=Im_RGB(:,:,1);
>> Im_G=Im_RGB(:,:,2);
>> Im_B=Im_RGB(:,:,3);

lonely113
http://lonely113.blogspot.com
TAMAÑO DE LA IMAGEN

• Obtención del tamaño de Imagen:

>> [m,n,p]=size(Im_RGB)
m=
600
n=
800
p=
3

Im_RGB: 600x800
3 planos (R,G y B)

lonely113
http://lonely113.blogspot.com
DESPLIEGUE DE IMÁGENES

Se realiza con el comando:


Imshow(Imagen)

Donde: Imagen es del tipo uint8.

>> imshow(Im_RGB)

lonely113
http://lonely113.blogspot.com
ESCRITURA DE IMÁGENES

Con el comando:

imwrite(Imagen,’nombre.extensión’);

>> imwrite(Im_RGB,'imagen.jpg');

lonely113
http://lonely113.blogspot.com
LECTURA DE VALOR DE PIXELES
Obtención de valor de pixel
Imagen(m,n) ; Cuando "Imagen" está en escala de grises (un solo plano).
Imagen(m,n,p) ; Para imagen RGB. Devuelve el valor del pixel
correspondiente al plano p (1, 2 ó 3).

Donde: m,n son las coordenadas del pixel.

>> Im_RGB(300,300,1)
ans =
255
>> Im_RGB(300,300,2)
ans =
178
>> Im_RGB(300,300,3)
ans =
10
lonely113
http://lonely113.blogspot.com
SELECCIÓN MANUAL Y LECTURA DE
VALOR DE PIXEL
• Mostrar la imagen con el comando imshow.
• Escribir el comando: pixel=impixel;
• Click en el pixel y Enter.

>> imshow(Im_RGB)
>> pixel=impixel
pixel =
252 144 115

lonely113
http://lonely113.blogspot.com
EDICIÓN DE PIXELES
Para modificar el valor de un pixel:
Imagen(m,n)=x ; Para una imagen en escala de grises.
imagen(m,n,p)=x ; Para una imagen RGB.
Donde: "x" es un número entero entre 0 y 255 correspondiente a
escala de grises (0=negro y 255=Blanco)

>> Im_RGB(200,750,1)=255;
>> Im_RGB(200,750,2)=255;
>> Im_RGB(200,750,3)=255;

lonely113
http://lonely113.blogspot.com
PERFIL DE IMAGEN
• Mostrar la imagen con el comando: imshow.
• Escribir el comando: improfile
• Trazar la linea para obtener el perfil en la imagen (click en inicio y click en final) y Enter.
• Si se desea se puede guardar el perfil en una variable. Ejecutando:

perfil=improfile;

>> imshow(Im_RGB) 300

>> improfile 250

200

150

100

50

0
0 50 100 150 200 250 300 350 400 450 500
Distance along profile

lonely113
http://lonely113.blogspot.com
SUBMUESTREO

Submuestrear una imagen reduce su tamaño y permite


que el procesamiento posterior de la imagen se agilice.
a11 a12 a13 a14 a15 a16 a17 a18 … a1n

Se toman pixeles equidistantes (muestras), dependiendo


del factor elegido, y se desecha el resto de pixeles.

Imagen_ sub=Imagen(1:a:end,1:a:end,1:1:end)

Donde: "a" es el factor de muestreo.


Si a=2 la imagen se reduce a la mitad.

lonely113
http://lonely113.blogspot.com
Ejemplo: Submuestreo de la imagen Im_RGB
por un factor de 4.
>> Im_sub=Im_RGB(1:4:end,1:4:end,1:1:end);
>> imshow(Im_sub)

lonely113
http://lonely113.blogspot.com
TRANSFORMACIÓN UINT8-DOUBLE

• En algunos casos es necesario que la imagen a


procesar sea del tipo "double", ya que uint8 admite
sólo valores enteros entre 0 y 255.

• Para transformar de uint8 a double y viceversa:

Imagen_double=double(Imagen_uint8)

Imagen_uint8=uint8(Imagen_double)

• El comando imshow sólo muestra imágenes del tipo


uint8.

lonely113
http://lonely113.blogspot.com
Ejemplo: Se requiere resaltar el gris en una
imagen por un factor 0.25.

>> Im_double=double(Im_RGB);
>> Im_double=Im_double*0.25;
>> Im_uint8=uint8(Im_double);
>> Imshow(Im_uint8)

lonely113
http://lonely113.blogspot.com
FILTRAJE

Se realiza mediante convolución de matrices.

Donde: "Imagen" es la matríz a filtrar.

"f" es la matríz filtro.

b11,b12,…,bmn son los


elementos de la matríz de salida.

lonely113
http://lonely113.blogspot.com
FILTRAJE

• Se puede utilizar el comando:


imagen2=filter2(filter,Imagen);
Donde: "filter" es la matríz filtro.
El comando filter2 no admite uint8, por lo tanto la
imagen a filtrar se debe convertir al tipo double.
El filtraje se debe realizar plano por plano en una
imagen RGB.

• Se agrega ruido a una imagen con el comando


imnoise. Revisar los archivos de ayuda de Matlab
para mas información.
lonely113
http://lonely113.blogspot.com
Ejemplo: Filtraje promedio

• Para eliminar o reducir el ruido de una imagen.

>> foto=imread('fruta.jpg');
>> foto=imnoise(foto,'salt & pepper');
>> foto_R=foto(:,:,1);
>> foto_G=foto(:,:,2);
>> foto_B=foto(:,:,3);
>> filtro=1/9*[1 1 1;1 1 1;1 1 1];
>> foto2_R=filter2(filtro,double(foto_R));
>> foto2_G=filter2(filtro,double(foto_G));
>> foto2_B=filter2(filtro,double(foto_B));
>> foto2(:,:,1)=foto2_R;
>> foto2(:,:,2)=foto2_G;
>> foto2(:,:,3)=foto2_B;
>> imshow(uint8(foto))
>> figure,imshow(uint8(foto2))

lonely113
http://lonely113.blogspot.com
Ejemplo: Detección de bordes.
• Se puede realizar similar al caso anterior, definiendo un filtro para detección de bordes.

• La imagen a filtrar debe estar en escala de grises.

• Para convertir RGB a escala de grises se utiliza el comando:

Imagen_gray=rgb2gray(Imagen_RGB);

>> filter=[1 2 1;0 0 0;-1 -2 -1];


>> Im_RGB=imread('medusa.jpg');
>> Im_gray=rgb2gray(Im_RGB);
>> Im_edge=filter2(filter,Im_gray);
>> imshow(Im_RGB);
>>figure,imshow(Im_edge);

lonely113
http://lonely113.blogspot.com
FILTRO MEDIANA

• Se realiza para atenuar el ruido de una imagen.


• Usualmente se aplica a imágenes en escala de grises.
Imagen2=medfilt2(Imagen)

Ejemplo:

>> Im_RGB=imread('fruta.jpg');
>> Im_gray=rgb2gray(Im_RGB);
>> Im_gray=imnoise(Im_gray, 'salt
& pepper');
>> imshow(Im_gray)
>> Im_filt=medfilt2(Im_gray);
>> figure, imshow(Im_filt)

lonely113
http://lonely113.blogspot.com
DETECCIÓN DE BORDES

• Se realiza con el comando:

imagen_edge=edge(imagen_gray,’mascara’);

• Se requiere que la imagen esté en escala de grises.

• "mascara" es el tipo de mascara a utilizar (sobel,


canny,prewit, …) ya predefinidas en Matlab.

lonely113
http://lonely113.blogspot.com
Ejemplo:
Se realiza la detección de bordes de una imagen utilizando la máscara
de "sobel".
>> Im_RGB=imread('Penguins.jpg');
>> Im_gray=rgb2gray(Im_RGB);
>> Im_edge=edge(Im_gray,'sobel');
>> imshow(Im_edge)

lonely113
http://lonely113.blogspot.com
BINARIZACIÓN

• Conversión de una imagen en escala de grises a una


imagen lógica (0=negro, 1=blanco).
• Se realiza con el comando:
Imagen_bin=imagen<=Umbral

Donde: Umbral es un número entre 0 y 255.

• También se puede usar el siguiente comando cuando se


requiere binarizar una imagen RGB directamente.
Imagen_bin=im2bw(Imagen,level)
Donde: "level" es el nivel de umbral entre 0 y 1.

lonely113
http://lonely113.blogspot.com
Ejemplo: Método 1.

Binarización de una imagen con un umbral de 128.

>> Im_bin=Im_gray>=128

lonely113
http://lonely113.blogspot.com
Ejemplo: Método 2.

>> Im_bin=im2bw(Im_RGB,0.5)

lonely113
http://lonely113.blogspot.com
EROSIÓN Y DILATACIÓN

Son las operaciones morfológicas más utilizadas.

DILATACIÓN: Adiciona pixeles en las fronteras de la


imagen.

EROSIÓN: Remueve pixeles de las fronteras de la


imagen.

Ambas operaciones se aplican a imágenes binarizadas.

lonely113
http://lonely113.blogspot.com
DILATACIÓN

Se utiliza el comando:

Result=imdilate(Imagen,SE)

Donde: "SE" es la estructura del arreglo a utilizar como


rejilla.
"Imagen" es previamente binarizada.

Existen varias maneras de obtener una estructura SE. Se


realiza mediante el comando "strel". Revisar los archivos
de ayuda de Matlab.

lonely113
http://lonely113.blogspot.com
DILATACIÓN
Suponiendo que se utiliza una matriz identidad de orden 3 como rejilla
(mostrada con bordes resaltados en la imagen), el resultado de aplicar la
operación de dilatación en el pixel que se traslapa con el elemento central de
la rejilla es:

"Si alguno de los pixeles de la rejilla configurados como 1 coincide con al


menos uno de la imagen el pixel resultante es 1".
lonely113
http://lonely113.blogspot.com
Ejemplo:
Aplicando dilatación a una imagen binarizada, utilizando una
estructura generada a partir de una matriz cuadrada de "1"
de orden 30.

>> SE=strel('square',30);
>> Im_RGB=imread('imagen.jpg');
>> Im_gray=rgb2gray(Im_RGB);
>> Im_edge=edge(Im_gray,'sobel');
>> Im_dilate=imdilate(Im_edge,se);
>> imshow(Im_edge);
>> figure,imshow(Im_dilate)

lonely113
http://lonely113.blogspot.com
EROSIÓN

Se utiliza el comando:

Result=imerode(Imagen,SE)

Donde: "SE" es la estructura del arreglo a utilizar como


rejilla.

"Imagen" es previamente binarizada.

lonely113
http://lonely113.blogspot.com
EROSIÓN
Suponiendo que se utiliza una matriz identidad de orden 3 como rejilla
(mostrada con bordes resaltados en la imagen), el resultado de aplicar la
operación de erosión en el pixel que se traslapa con el elemento central de
la rejilla es:

"Todos los pixeles de la rejilla configurados como 1 deben coincidir con todos
los de la imagen, si esto no sucede el resultado del pixel es 0".
lonely113
http://lonely113.blogspot.com
Ejemplo:
Aplicando la operación de erosión a la imagen dilatada utilizando
una estructura generada por una matriz cuadrada de "1" de orden
15.

>> SE=strel('square',15);
>> Im_erode=imerode(Im_dilate,SE);
>> imshow(Im_dilate)
>> figure,imshow(Im_erode)

lonely113
http://lonely113.blogspot.com
VECINDAD

Para determinar si dos pixeles son vecinos o no (adyacentes).


Vecindad-4: Se consideran pixeles conectados en direcciones
perpendiculares (arriba, abajo, derecha, izquierda).
Vecindad-8: Se consideran también los pixeles vecinos
diagonales.

Vecindad-4 Vecindad-8

lonely113
http://lonely113.blogspot.com
CONECTIVIDAD

Dos pixeles están con la misma etiqueta están conectados si existe un camino del uno al
otro a través de pixeles vecinos con la misma etiqueta.
La conectividad en Matlab puede ser:
Conexión-4: Se toma en cuenta la vecindad-4 para determinar la conectividad de
pixeles.
Conexión-8: Se toma en cuenta la vecindad-8 para determinar la conectividad de
pixeles.
ETIQUETADO: Agrupación de pixeles con características similares

Si se elige conectividad conexión-4 se


consideraría como dos objetos
diferentes, pero si se elige conectividad
conexión-8 se consideraría como un
solo objeto (vecindad diagonal).

lonely113
http://lonely113.blogspot.com
CUENTA Y ETIQUETADO DE OBJETOS
EN UNA IMAGEN
Para contar la cantidad de objetos presentes en una imagen se realiza el procedimiento:

1. Leer la imagen.
2. Convertirla a escala de grises y posteriormente binarizarla.
3. En la imagen binarizada se requiere que los objetos a contar estén en blanco (1) y con
fondo negro (0), si no fuera así se puede aplicar el comando:

Im_bin=not(Im_bin)

4. Ejecutar el siguiente comando para etiquetar los objetos. Cada objeto encontrado se
etiqueta con un número entero: 1, 2, 3,…:

Im_label=bwlabel(Im_bin,C)

Donde: C=4 u 8 (Conexión)

5. Para obtener el número de objetos:

n=max(max(Im_label))

lonely113
http://lonely113.blogspot.com
Ejemplo:
• Se contará el número de objetos de la siguiente imagen:

>> Im_RGB=imread('imagen.jpg');
>> Im_bin=im2bw(Im_RGB,0.5)
>>imshow(Im_bin)
>> Im_bin=not(Im_bin);
>> imshow(Im_bin)
>> Im_label=bwlabel(Im_bin,8);
>> n=max(max(Im_label))
n=
5

lonely113
http://lonely113.blogspot.com
SELECCIÓN DE UN OBJETO

Para seleccionar manualmente un objeto y aislarlo se realiza


el procedimiento:

1. Mostrar la imagen binarizada con el comando imshow.

2. ejecutar el comando:

Im_sel=bwselect(C)

Donde: C=4 u 8 (Conexión)

3. Click en el objeto y Enter.

4. Si se desea, desplegar el objeto seleccionado Im_sel.


lonely113
http://lonely113.blogspot.com
Ejemplo:
Se selecciona el objeto inferior derecho y se aísla en la
variable Im_sel.

>> imshow(Im_bin)
>> Im_sel=bwselect(8);
>> imshow(Im_sel)

lonely113
http://lonely113.blogspot.com
CAPTURA DE IMÁGENES MEDIANTE
CÁMARAS CONECTADAS A LA PC
Resulta de suma utilidad para implementar algoritmos
de visión o adquisición de imágenes en tiempo real
utilizando dispositivos simples y de bajo costo tales como
las webcams.

Matlab incluye el toolbox "Image Acquisition" para este


fin.

El toolbox incluye la herramienta Image Aquisition tool


"imaqtool" que se utilizará posteriormente.

lonely113
http://lonely113.blogspot.com
OBTENCIÓN DE INFORMACIÓN DEL
DISPOSITIVO
Comandos a utilizar:
Imaqhwinfo
Devuleve la información del hardware y software disponibles, tales como:
Adaptador de video instalado, versión de Matlab, Toolbox (nombre y
versión).
Imaqhwinfo(‘adaptor’)
Donde "adaptor" es el nombre del adaptador instalado, por lo general
"winvideo". Este comando devuelve información relacionada al
adaptador.
Imaqhwinfo(‘adaptor’,DeviceID)
Donde DeviceID es el ID del dispositivo a utilizar obtenido con el comando
anterior. Si sólo se cuenta con un dispositivo conectado el DeviceID será 1.
Este comando muestra información del dispositivo conectado (cámara) .

lonely113
http://lonely113.blogspot.com
Ejemplo: Ejecutando los comandos
>> imaqhwinfo
ans =
InstalledAdaptors: {'winvideo'}
El adaptador instalado es
MATLABVersion: '7.8 (R2009a)' "winvideo".
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '3.3 (R2009a)‘

>> imaqhwinfo('winvideo') Hay un dispositivo de


ans =
AdaptorDllName: [1x81 char] adquisición de imágenes
AdaptorDllVersion: '3.3 (R2009a)'
AdaptorName: 'winvideo'
instalado (DeviceID).
DeviceIDs: {[1]}
DeviceInfo: [1x1 struct]

>> imaqhwinfo('winvideo',1)
El dispositivo instalado es
ans = una webcam "ilook300".
DefaultFormat: 'RGB24_640x480'
DeviceFileSupported: 0 Soporta 13 formatos de
DeviceName: 'iLook 300'
DeviceID: 1
adquisición. Formato por
ObjectConstructor: 'videoinput('winvideo', 1)' defecto: RGB 640x480.
SupportedFormats: {1x13 cell}

lonely113
http://lonely113.blogspot.com
PREPARACIÓN DEL DISPOSITIVO
• Crear la estructura:
cam=imaqhwinfo(‘adaptor’,DeviceID)
Para poder obtener las características del dispositivo con
facilidad.
Por ejemplo, para obtener los formatos soportados:
cam.SupportedFormats
• Ejecutar el comando:
video=videoinput(‘adaptor’,DeviceID,’Format’)
Construye un objeto de entrada de video (nexo entre el
dispositivo y Matlab). Si no se especifica "Format" se asume el
formato por defecto.

lonely113
http://lonely113.blogspot.com
Ejemplo: Preparación de dispositivo

>> cam=imaqhwinfo('winvideo',1);

>> cam.SupportedFormats

ans =
Columns 1 through 4
'I420_160x120' 'I420_176x144' 'I420_320x240' 'I420_352x288'
Columns 5 through 8
'I420_640x480' 'RGB24_1280x960' 'RGB24_1600x1200'
'RGB24_160x120'
Columns 9 through 12
'RGB24_176x144' 'RGB24_320x240' 'RGB24_352x288'
'RGB24_640x480'
Column 13
'RGB24_800x600'

>> video=videoinput('winvideo',1,'RGB24_640x480');

lonely113
http://lonely113.blogspot.com
PRE-VISUALIZACIÓN

• Para desplegar la previsualización de las imágenes a capturar


ejecutar el comando:
preview(video)

>> preview(video)

lonely113
http://lonely113.blogspot.com
CAPTURA

• Para capturar una imagen ejecutar:


Image=getsnapshot(‘cam’)

>> foto=getsnapshot(video);
>> imshow(foto)

lonely113
http://lonely113.blogspot.com
IMAGE ACQUISITION TOOL
Facilita el trabajo de realizar la captura de imágenes mediante línea de comandos.
Para acceder a esta herramienta ejecutar:
imaqtool

>> imaqtool

lonely113
http://lonely113.blogspot.com
APLICACIONES

Se presentan 3 aplicaciones sencillas del procesamiento


de imágenes:

1. Detección de bordes de una imagen.


2. Cuenta de objetos de características similares
presentes en una imagen.
3. Reconocimiento Óptico de Caracteres (OCR)
mediante un algoritmo implementado por terceros.

En todos los casos las imágenes serán obtenidas


mediante una cámara web.

lonely113
http://lonely113.blogspot.com
1. DETECCIÓN DE BORDES DE UNA IMAGEN

>> cam=imaqhwinfo(‘winvideo’,1);
>> video=videoinput('winvideo',1);
>> preview(video)
>> Im_RGB=getsnapshot(video);
>> imshow(Im_RGB)
>> Im_gray=rgb2gray(Im_RGB);
>> Im_gray=medfilt2(Im_gray);
>> figure,imshow(Im_gray)
>> Im_edge=edge(Im_gray,'sobel');
>> figure,imshow(Im_edge)
>>Im_edge2=not(Im_edge);
>> figure,imshow(Im_edge2)

No se especifica formato de captura, entonces se asume el formato por


defecto (RGB 640x480).

Las imágenes obtenidas paso a paso se muestran en la siguiente


diapositiva.

lonely113
http://lonely113.blogspot.com
1. DETECCIÓN DE BORDES DE UNA IMAGEN

Im_RGB Im_gray

Im_edge Im_edge2

lonely113
http://lonely113.blogspot.com
2. CONTEO DE OBJETOS

• Se desea contar el número de transistores en la


imagen.

• Para ello se utiliza el etiquetado de objetos, pero el


problema es que si no se realiza tratamiento previo
también se etiquetarán los pines de cada transistor.

• Para resolver este problema primero se aplican las


operaciones de erosión (hasta que desaparezcan
los pines y solo quede el cuerpo) y luego dilatación
(para obtener objetos a contar de regular
tamaño).
lonely113
http://lonely113.blogspot.com
2. CONTEO DE OBJETOS

>> cam=imaqhwinfo(‘winvideo’,1);
>> video=videoinput(‘winvideo’,1);
>> Im_RGB=getsnapshot(video);
>> imshow(Im_RGB)
>> Im_bin=im2bw(Im_RGB,0.5);
>> figure, imshow(Im_bin)
>> Im_bin2=not(Im_bin);
>> figure, imshow(Im_bin2)
>> SE=strel('square',10);
>> Im_erode=imerode(Im_bin2,SE);
>> figure, imshow(Im_erode)
>> Im_dilate=imdilate(Im_erode,SE);
>> figure,imshow(Im_dilate)
>> Im_label=bwlabel(Im_dilate,8);
>> n=max(max(Im_label))
n=
10

lonely113
http://lonely113.blogspot.com
2. CONTEO DE OBJETOS

Im_RGB Im_bin

lonely113
http://lonely113.blogspot.com
2. CONTEO DE OBJETOS

La imagen se invierte para


poder seguir con el
procedimiento de
tratamiento de imagen.

Si no se aplica erosión se
etiquetaría cada objeto
aislado, dando como
resultado un número de
objetos muy superior al real.

Im_bin2

lonely113
http://lonely113.blogspot.com
2. CONTEO DE OBJETOS

Im_erode Im_dilate
Con estas dos operaciones se obtiene sólo el cuerpo de los transistores en
su tamaño original, los pines ya fueros desechados. La imagen está lista
ahora para el etiquetado y conteo.
lonely113
http://lonely113.blogspot.com
3. RECONOCIMIENTO DE CARACTERES

• Se desea reconocer los caracteres presentes en una imagen


adquirida mediante la webcam y almacenar el texto en un
archivo .txt.
• El algoritmo OCR utilizar se obtuvo de la página:
http://www.matpic.com/esp/matlab/ocr.html.
• Para usar el algoritmo los archivos a descargados se deben
copiar a la carpeta de trabajo de Matlab.
• La imagen se debe guardar con el nombre "TEST_1.jpg". Los
caracteres deben estar en mayúsculas en negro y fondo
blanco.
• Una vez hecho esto ejecutar el comando:
OCR

lonely113
http://lonely113.blogspot.com
3. RECONOCIMIENTO DE CARACTERES

>> cam=imaqhwinfo('winvideo',1);
>> video=videoinput('winvideo',1);
>> preview(video)
>> text=getsnapshot(video);
>> imshow(text)
>> text_bin=im2bw(text,0.5);
>> figure,imshow(text_bin)
>> SE=strel('square',5);
>> text_erode=imerode(text_bin,SE);
>> figure,imshow(text_erode)
>> text_dilate=imdilate(text_erode,SE);
>> figure,imshow(text_dilate)
>> text_fin=not(text_dilate);
>> figure,imshow(text_fin)
>> imwrite(text_fin,'TEST_1.jpg');
>> ocr

lonely113
http://lonely113.blogspot.com
3. RECONOCIMIENTO DE CARACTERES

text text_bin
text_bin contiene elementos no deseados (puntos blancos) que podrían perjudicar el
proceso de reconocimiento de caracteres. Estos elementos se eliminan aplicando la
operación de erosión.

lonely113
http://lonely113.blogspot.com
3. RECONOCIMIENTO DE CARACTERES

text_erode text_dilate

Enseguida se aplica la operación de dilatación para


contrarrestar el efecto de la erosión en el texto.
lonely113
http://lonely113.blogspot.com
3. RECONOCIMIENTO DE CARACTERES

text_fin

Es necesario que el texto esté en negro con fondo blanco


para aplicar el algoritmo.
lonely113
http://lonely113.blogspot.com