procesamiento digital de imÁgenes con matlab
DESCRIPTION
Procesamiento digital de imágenes con MatlabTRANSCRIPT
![Page 1: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/1.jpg)
PROCESAMIENTO DE IMÁGENES CON MATLAB
http://lonely113.blogspot.com
1
![Page 2: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/2.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/3.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/4.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/5.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/6.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/7.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/8.jpg)
Escritura de Imágenes
Con el comando:
imwrite(Imagen,’nombre.extensión’)
>> imwrite(Im_RGB,'imagen.jpg');
http://lonely113.blogspot.com
8
![Page 9: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/9.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/10.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/11.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/12.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/13.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/14.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/15.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/16.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/17.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/18.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/19.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/20.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/21.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/22.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/23.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/24.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/25.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/26.jpg)
Ejemplo: Método 2.
>> Im_bin=im2bw(Im_RGB,0.5)
http://lonely113.blogspot.com
26
![Page 27: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/27.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/28.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/29.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/30.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/31.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/32.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/33.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/34.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/35.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/36.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/37.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/38.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/39.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/40.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/41.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/42.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/43.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/44.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/45.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/46.jpg)
Captura
Para capturar una imagen ejecutar:
Image=getsnapshot(‘cam’)
>> foto=getsnapshot(video); >> imshow(foto)
http://lonely113.blogspot.com
46
![Page 47: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/47.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/48.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/49.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/50.jpg)
Im_RGB Im_gray
Im_edge Im_edge2
http://lonely113.blogspot.com
1. Detección de Bordes de una Imagen
50
![Page 51: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/51.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/52.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/53.jpg)
2. Conteo de Objetos
Im_RGB Im_bin
http://lonely113.blogspot.com
53
![Page 54: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/54.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/55.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/56.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/57.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/58.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/59.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/60.jpg)
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: PROCESAMIENTO DIGITAL DE IMÁGENES CON MATLAB](https://reader030.vdocuments.net/reader030/viewer/2022020711/5571f99249795991698fe568/html5/thumbnails/61.jpg)
http://lonely113.blogspot.com 61