48927766 procesamiento digital de imagenes con matlab

61
PROCESAMIENTO DE IMÁGENES CON MATLAB http://lonely113.blogspot.com 1

Upload: refugio-hernandez-arce

Post on 19-Feb-2015

113 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: 48927766 Procesamiento Digital de Imagenes Con Matlab

PROCESAMIENTO DE IMÁGENES CON MATLAB

http://lonely113.blogspot.com

1

Page 2: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

2

Page 3: 48927766 Procesamiento Digital de Imagenes Con Matlab

Ejemplo: Lectura de una imagen *.jpg

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

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

http://lonely113.blogspot.com

3

Page 4: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

4

Page 5: 48927766 Procesamiento Digital de Imagenes Con Matlab

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);

http://lonely113.blogspot.com

5

Page 6: 48927766 Procesamiento Digital de Imagenes Con Matlab

Tamaño de la Imagen

Obtención del tamaño de Imagen:

Im_RGB: 600x800

3 planos (R,G y B)

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

m =

600

n =

800

p =

3

http://lonely113.blogspot.com

6

Page 7: 48927766 Procesamiento Digital de Imagenes Con Matlab

Despliegue de Imágenes

Se realiza con el comando:

Imshow(Imagen)

Dónde: Imagen es del tipo uint8.

>> imshow(Im_RGB)

http://lonely113.blogspot.com

7

Page 8: 48927766 Procesamiento Digital de Imagenes Con Matlab

Escritura de Imágenes

Con el comando:

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

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

http://lonely113.blogspot.com

8

Page 9: 48927766 Procesamiento Digital de Imagenes Con Matlab

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).

Dónde: 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

http://lonely113.blogspot.com

9

Page 10: 48927766 Procesamiento Digital de Imagenes Con Matlab

Selección manual y Lectura de Valor de Pixel

Mostrar la imagen con el comando imshow.

Escribir el comando: pixel=impixel;

Clic en el pixel y Enter.

>> imshow(Im_RGB)

>> pixel=impixel

pixel =

252 144 115

http://lonely113.blogspot.com

10

Page 11: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

Dónde: 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;

http://lonely113.blogspot.com

11

Page 12: 48927766 Procesamiento Digital de Imagenes Con Matlab

Perfil de Imagen

Mostrar la imagen con el comando: imshow. Escribir el comando: improfile Trazar la línea para obtener el perfil en la imagen (clic en inicio y clic en final) y Enter. Si se desea se puede guardar el perfil en una variable. Ejecutando:

perfil=improfile;

>> imshow(Im_RGB)

>> improfile

0 50 100 150 200 250 300 350 400 450 5000

50

100

150

200

250

300

Distance along profile

http://lonely113.blogspot.com

12

Page 13: 48927766 Procesamiento Digital de Imagenes Con Matlab

Submuestreo

Submuestrear una imagen reduce su tamaño y permite que el procesamiento posterior de la imagen se agilice.

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)

Dónde: a es el factor de muestreo.

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

a11 a12 a13 a14 a15 a16 a17 a18 … a1n

http://lonely113.blogspot.com

13

Page 14: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

14

Page 15: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

http://lonely113.blogspot.com

15

Page 16: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

16

Page 17: 48927766 Procesamiento Digital de Imagenes Con Matlab

Filtraje

Se realiza mediante convolución de matrices.

Dónde: 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.

http://lonely113.blogspot.com

17

Page 18: 48927766 Procesamiento Digital de Imagenes Con Matlab

Filtraje

Se puede utilizar el comando:

imagen2=filter2(filter,Imagen);

Dónde: filter es la matriz 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.

http://lonely113.blogspot.com

18

Page 19: 48927766 Procesamiento Digital de Imagenes Con Matlab

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))

http://lonely113.blogspot.com

19

Page 20: 48927766 Procesamiento Digital de Imagenes Con Matlab

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);

http://lonely113.blogspot.com

20

Page 21: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

21

Page 22: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

http://lonely113.blogspot.com

22

Page 23: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

23

Page 24: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

Dónde: 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)

Dónde: level es el nivel de umbral entre 0 y 1.

http://lonely113.blogspot.com

24

Page 25: 48927766 Procesamiento Digital de Imagenes Con Matlab

Ejemplo: Método 1.

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

>> Im_bin=Im_gray>=128

http://lonely113.blogspot.com

25

Page 26: 48927766 Procesamiento Digital de Imagenes Con Matlab

Ejemplo: Método 2.

>> Im_bin=im2bw(Im_RGB,0.5)

http://lonely113.blogspot.com

26

Page 27: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

http://lonely113.blogspot.com

27

Page 28: 48927766 Procesamiento Digital de Imagenes Con Matlab

Dilatación

Se utiliza el comando:

Result=imdilate(Imagen,SE)

Dónde: 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.

http://lonely113.blogspot.com

28

Page 29: 48927766 Procesamiento Digital de Imagenes Con Matlab

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".

http://lonely113.blogspot.com

29

Page 30: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

30

Page 31: 48927766 Procesamiento Digital de Imagenes Con Matlab

Erosión

Se utiliza el comando:

Result=imerode(Imagen,SE)

Dónde: SE es la estructura del arreglo a utilizar como rejilla.

Imagen es previamente binarizada.

http://lonely113.blogspot.com

31

Page 32: 48927766 Procesamiento Digital de Imagenes Con Matlab

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".

http://lonely113.blogspot.com

32

Page 33: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

33

Page 34: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

34

Page 35: 48927766 Procesamiento Digital de Imagenes Con Matlab

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).

http://lonely113.blogspot.com

35

Page 36: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

Dónde: C=4 u 8 (Conexión)

5. Para obtener el número de objetos:

n=max(max(Im_label))

http://lonely113.blogspot.com

36

Page 37: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

37

Page 38: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

Dónde: C=4 u 8 (Conexión)

3. Clic en el objeto y Enter.

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

http://lonely113.blogspot.com

38

Page 39: 48927766 Procesamiento Digital de Imagenes Con Matlab

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)

http://lonely113.blogspot.com

39

Page 40: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

http://lonely113.blogspot.com

40

Page 41: 48927766 Procesamiento Digital de Imagenes Con Matlab

Obtención de Información del Dispositivo

Comandos a utilizar:

Imaqhwinfo

Devuelve 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) .

http://lonely113.blogspot.com

41

Page 42: 48927766 Procesamiento Digital de Imagenes Con Matlab

Ejemplo: Ejecutando los comandos

El adaptador instalado es "winvideo". Hay un dispositivo de adquisición de imágenes instalado (DeviceID). El dispositivo instalado es una webcam "ilook300". Soporta 13 formatos de adquisición. Formato por defecto: RGB 640x480.

>> imaqhwinfo

ans =

InstalledAdaptors: {'winvideo'}

MATLABVersion: '7.8 (R2009a)'

ToolboxName: 'Image Acquisition Toolbox'

ToolboxVersion: '3.3 (R2009a)‘

>> imaqhwinfo('winvideo')

ans =

AdaptorDllName: [1x81 char]

AdaptorDllVersion: '3.3 (R2009a)'

AdaptorName: 'winvideo'

DeviceIDs: {[1]}

DeviceInfo: [1x1 struct]

>> imaqhwinfo('winvideo',1)

ans =

DefaultFormat: 'RGB24_640x480'

DeviceFileSupported: 0

DeviceName: 'iLook 300'

DeviceID: 1

ObjectConstructor: 'videoinput('winvideo', 1)'

SupportedFormats: {1x13 cell}

http://lonely113.blogspot.com

42

Page 43: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

http://lonely113.blogspot.com

43

Page 44: 48927766 Procesamiento Digital de Imagenes Con Matlab

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');

http://lonely113.blogspot.com

44

Page 45: 48927766 Procesamiento Digital de Imagenes Con Matlab

Pre - Visualización

Para desplegar la pre-visualización de las imágenes a capturar ejecutar el comando:

preview(video)

>> preview(video)

http://lonely113.blogspot.com

45

Page 46: 48927766 Procesamiento Digital de Imagenes Con Matlab

Captura

Para capturar una imagen ejecutar:

Image=getsnapshot(‘cam’)

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

http://lonely113.blogspot.com

46

Page 47: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

47

Page 48: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

http://lonely113.blogspot.com

48

Page 49: 48927766 Procesamiento Digital de Imagenes Con Matlab

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.

>> 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)

http://lonely113.blogspot.com

1. Detección de bordes de una imagen

49

Page 50: 48927766 Procesamiento Digital de Imagenes Con Matlab

Im_RGB Im_gray

Im_edge Im_edge2

http://lonely113.blogspot.com

1. Detección de Bordes de una Imagen

50

Page 51: 48927766 Procesamiento Digital de Imagenes Con Matlab

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).

http://lonely113.blogspot.com

51

Page 52: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

52

Page 53: 48927766 Procesamiento Digital de Imagenes Con Matlab

2. Conteo de Objetos

Im_RGB Im_bin

http://lonely113.blogspot.com

53

Page 54: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

54

Page 55: 48927766 Procesamiento Digital de Imagenes Con Matlab

2. Conteo de Objetos

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.

Im_erode Im_dilate

http://lonely113.blogspot.com

55

Page 56: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

56

Page 57: 48927766 Procesamiento Digital de Imagenes Con Matlab

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

http://lonely113.blogspot.com

57

Page 58: 48927766 Procesamiento Digital de Imagenes Con Matlab

3. Reconocimiento de Caracteres

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.

text text_bin

http://lonely113.blogspot.com

58

Page 59: 48927766 Procesamiento Digital de Imagenes Con Matlab

3. Reconocimiento de Caracteres

Enseguida se aplica la operación de dilatación para contrarrestar el efecto de la erosión en el texto.

text_erode text_dilate

http://lonely113.blogspot.com

59

Page 60: 48927766 Procesamiento Digital de Imagenes Con Matlab

3. Reconocimiento de Caracteres

Es necesario que el texto esté en negro con fondo blanco para aplicar el algoritmo.

text_fin

http://lonely113.blogspot.com

60

Page 61: 48927766 Procesamiento Digital de Imagenes Con Matlab

http://lonely113.blogspot.com 61