VISIÓN ARTIFICIAL USANDO MATLAB Parte 1
Alvaro Romero Acero
[email protected] Alejandro Marín Cano
[email protected]
Profesor Jovani A. Jiménez
Universidad Nacional de Colombia Facultad de minas Ingeniería de Control Medellín 2012
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
VISIÓN ARTIFICIAL USANDO MATLAB Parte 1
Figura 1 Imagen (foto1) RGB, capturada en Matlab.
Introducción Al realizar tareas especificas cada vez más complejas, un robot al igual que un ser humano necesitan una mejor percepción del entorno de trabajo, por lo tanto, la visión se hace indispensable para lograr una respuesta flexible, rápida y precisa, de acuerdo, al cambio constante del comportamiento externo del área de trabajo. Cuando una persona, tiene como tarea la selección de objetos o piezas, debe realizar una secuencia de pasos para lograr una tarea exitosa, de la misma manera, un robot debe tener en cuenta esta secuencia, para lograr tal éxito. Por consiguiente, en un robot la visión artificial juega un papel importante, en la realización exitosa de una tarea de clasificación de objetos. En una determinada área de trabajo, estos “ojos artificiales” serán previstos por una cámara web y el procesamiento inteligente de la imagen se hará a través del toolbox Image Acquisition Tool de Matlab, para así obtener una percepción aceptada del entono. De esta manera, para alcanzar una adecuada aplicación de esta herramienta de Matlab, se realizará un estudio sobre las funciones que provee el toolbox Image Acquisition Tool, y la descripción del procesamiento de la imagen, con el fin de obtener los mejores resultados en la selección de objetos, ubicación y que logren un reconocimiento de la imagen, la cual defina una característica distinguida, frente a los demás objetos. En consecuencia, este resultado obtenido en la visión artificial, se enlazará con un electro-mecanismo (brazo robótico), el cual, ejecutará una acción prevista por el usuario en su programación de tareas. Esta propuesta va enfocada, al reconocimiento y clasificación de objetos, que logren una identificación precisa sobre la imagen, imagen, para una tarea específica, luego ejecutada por el robot, que proporcione una alternativa de solución, en aplicaciones industriales como la clasificación de piezas y armado de otros componentes.
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
Conceptos básicos Matriz de imagen: La matriz de imagen I(x,y) (escala de grises), hace referencia a la forma en que Matlab guarda y procesa una imagen, en forma de matriz como vectores bidimensionales (m,n), donde cada elemento de la matriz es un pixel, a su vez el toolbox de procesamiento de imagen soporta imágenes binarias, indexadas, de intensidad y RGB, que también tienen forma matricial, por ejemplo para la imagen RGB, es una tridimensional y se representa (m,n,N), donde (m,n) son los parámetros de los vectores bidimensionales y (N) es el parámetro de RGB, es decir corresponde al color rojo, verde o azul tomando valores entre (1, 2 ,3) respectivamente, es decir cada pixel contiene una información adicional RGB. A continuación, se representa la forma matricial de una imagen digital (m,n) a escala de grises.
m
n
Figura 2 Representación de la matriz de imagen (foto1) en grises.
ImagenGrisVisionArtificial.m % % % %
Genera una matriz I(x,y), de la Imagen original que se encuentra en los anexos imagen (foto1), matriz con tamaño de 1920 x 2560 unit8, es decir con 4.915.200 pixeles (4.9 Megapíxeles) con valores de cada pixel entre 0 y 255, donde cero (0) es el color negro y (255) el color blanco.
clear al all l, close al all l, clc foto1 = imread('C:\Users\alvaro\Desktop\foto1.jpg' imread('C:\Users\alvaro\Desktop\foto1.jpg' ); figure(1), subplot(2,1,1) imshow(foto1); title({'\color[rgb]{1 title({'\color[rgb]{1 0 0}VISIÓN \color[rgb]{0 1 0}ARTIFICIAL \color[rgb]{0 0 1}Usando Matlab'; Matlab';'\color[rgb]{0 0 0}ImagenGrisVisionArtificial.m'; 0}ImagenGrisVisionArtificial.m' ; '\color[rgb]{0 0 1}IMAGEN ORIGINAL'}) ORIGINAL'}) GRIS=rgb2gray(foto1); subplot(2,1,2) imshow(GRIS); title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}IMAGEN ESCALA DE GRISES'}) GRISES' })
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
Pixel: Se denomina como la unidad de color homogénea más pequeña de una imagen digital, en las tres figuras a continuación, representan una imagen digital en Matlab, de izquierda a derecha vemos, un acercamiento a la imagen hasta llegar a apreciar los pixeles, que en este caso en la figura de la parte derecha, se pueden observar seis (6) pixeles, donde cada pixel contiene un color homogéneo, cuando se trabaja con imágenes digital RGB, cada pixel es la combinación de tres colores rojo, verde y azul, la cantidad de combinaciones que cada pixel puede alcanzar, dependen del tipo de dato en que se codifique el pixel, por ejemplo un pixel codificado en un byte (8 bit) que corresponden a 256 variaciones de color para cada pixel, que el RGB se traduce a 2 24 (16.777.216) variaciones de color para cada pixel, porque en RGB intervienen tres colores (256*256*256 = 16.777.216). Pixel
ZOOM
Figura 3 Representación de un pixel, imagen (foto1). Después de adquirir algunos conceptos básicos, sobre visión artificial usando Matlab, surge el interrogante porque usar Matlab, la respuesta consiste que al usar Matlab específicamente el toolbox para procesamiento de imágenes, se tiene la ventaja sobre el paquete de funciones predeterminadas con que cuenta Matlab en base a vectores y matrices, pues una característica fundamental de trabajar con imágenes, es que esta se puede manejar como una matriz o como un conjunto de matrices en el caso de una imagen RGB, entre otro tipo de imágenes. Por lo tanto, es posible aprovechar el recurso matemático e interfaz que proporciona Matlab y de esta forma mejorar la velocidad del procesamiento de la imagen, obteniendo resultados más rápidos y precisos sobre la información que se desee sacar de la imagen, como; el perímetro, forma, ubicación, tamaño, color, centroide, frontera, contrastes, etc., que serán de gran utilidad en el momento de realizar un reconocimiento de objetos y posteriormente enlazarlo con un robot. Otra alternativa, es por medio de Lab VIEW, que también presenta una facilidad de interfaz a la hora del procesamiento de imágenes.
Comandos útiles para obtener información y manipulación de la imagen. Comandos1VisionArtificial.m % Si se desea importar una imagen que está en el PC a Matlab, se realiza % por medio del comando imread('dirección'), por ejemplo la imagen I.jpg % que está en el escritorio:
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
I = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(2),imshow(I) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}IMAGEN EN TAMAÑO REAL'}) REAL' }) figure(3),subplot(3,1,1),imshow(I) title({'\color[rgb]{1 title({'\color[rgb]{1 0 0}VISIÓN \color[rgb]{0 1 0}ARTIFICIAL \color[rgb]{0 0 1}Usando Matlab'; Matlab';'\color[rgb]{0 0 0}Comandos1VisionArtificial.m'; 0}Comandos1VisionArtificial.m'; '\color[rgb]{0 0 1}IMAGEN ORIGINAL'}) ORIGINAL'}) fprintf('%s%\n' fprintf('%s%\n', , 'VISIÓN ARTIFICIAL Usando Matlab Comandos1VisionArtificial') Comandos1VisionArtificial' ) fprintf('\n' fprintf('\n') ) % Obtiene la dimensión de la imagen (alto, ancho, band), el % tercer parámetro (band) se refiere a:(1) imagen gris y (3) imagen a % color. fprintf('\n' fprintf('\n') ) fprintf('%s%\n' fprintf('%s%\n', , ' Dimensión de la imagen (alto, ancho, band), band=1 gris, band=3 color: ') ') fprintf('\n' fprintf('\n') ) size(I) % Obtiene información de la imagen dimensión y tipo de dato. fprintf('\n' fprintf('\n') ) fprintf('%s%\n' fprintf('%s%\n', , ' Información de la imagen dimensión y tipo de dato: ') ') fprintf('\n' fprintf('\n') ) whos I % Obtiene información detallada de la imagen. fprintf('\n' fprintf('\n') ) fprintf('%s%\n' fprintf('%s%\n', , ' Información de la imagen dimensión y tipo de dato ') ') fprintf('\n' fprintf('\n') ) imfinfo('C:\Users\alvaro\Desktop\I.jpg' imfinfo('C:\Users\alvaro\Desktop\I.jpg') ) % Obtiene una rotación de la imagen, con la siguiente función % imrotate(Imagen, Angulo, método, BBOX). rota= imrotate(I,30,'bilinear' imrotate(I,30,'bilinear', ,'crop' 'crop'); ); subplot(3,1,2),imshow(rota) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}ROTACIÓN DE LA IMAGEN'}) IMAGEN' }) % Recortar la imagen, con la función imcrop(Imagen,[X1,Y1,ancho,alto]); reco= imcrop(I,[20,30,200,100]); subplot(3,1,3),imshow(reco) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}RECORTE DE LA IMAGEN'}) IMAGEN' }) % Con esta función imresize(I,zoom), lo que haces es tener un zoom de la % imagen, por ejemplo: si zoom<1 la imagen se reduce, si zoom>1 la imagen % aumenta. zoom = imresize(I,2); figure(4),imshow(zoom) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}ZOOM DE LA IMAGEN'}) IMAGEN' })
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
Figura 4 Resultados comandos de Matlab, Matlab, código Comandos1VisionArtificial.m
Figura 5 a) Imagen original, b) Rotación de la imagen a 30 o, c) Recorte de la imagen
Grupo de Investigación - Inteligencia Artificial en Educación
Figura 6 Imagen en tamaño real
Figura 7 Zoom de la imagen al 100% de la figura 5.
Visión Artificial Matlab Parte 1
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
Tipo de imágenes en toolbox Matlab
Imagen RGB La imagen RGB, llamada imagen verdadera, la cual, se usará como base para el procesamiento de la imagen, se representa con tres matrices de igual tamaño y concuerdan con el tamaño de la imagen, es decir, cada pixel se compone de la suma de tres intensidades de colores RGB.
Figura 8 Representación matricial de una imagen RGB A continuación, para entender un poco más este tipo de imagen se ilustrará, la imagen RGB y sus componentes, rojo, verde y azul respectivamente en la Figura 9, generando una imagen con una característica RGB en forma vertical, por medio de Matlab, de la cual se pueda visualizar separadamente los componentes mencionados, y mediante el procesamiento de la imagen R, G y B independientemente en una imagen representada en escala de grises, ceros (blancos) y unos (negros). Como resultado, se obtiene para el caso del color blanco, hace referencia al color más intenso, ya sea, rojo, verde o azul de la imagen RGB, para lograr tal efecto, con el código en Matlab que verán a continuación, se logra apreciar dicha descripción: Imagen RGB, en la escala de grises imagen R, imagen G e imagen B, en la figura (1). Por ejemplo en la Figura 9, se observa en la imagen RGB el rojo a la derecha, por consiguiente en la imagen red (R) se torna más blanco la parte derecha, la cual corresponde al color rojo, de la misma manera actúa para los colores verde (centro) y azul (izquierda).
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
Identificación de imagen RGB por medio de escala de grises: IdentificacionRGBVisionArtificial.m
Figura 9 Identificación de imagen RGB en grises % Genera una matriz de imagen (RGB), con tramas verticales azul, verde y % roja, como se ve en la figura (1). RGB=reshape(ones(128,1)*reshape(jet(128),1,384),[128,128,3]); % Dibuja la imagen representada por la matriz (RGB). figure(5), subplot(4,1,1) imshow(RGB) % En el titulo se hace uso del comando \color[rgb]{r g b} para representar % colores en la gama RGB de los caracteres del título, donde r=1 representa % el color rojo más intenso y disminuye hasta cero, así sucesivamente para % g (verde) y b (azul). title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'IdentificacionRGBVisionArtificial.m' ;'IMAGEN \color[rgb]{1 0 0}R \color[rgb]{0 1 0}G \color[rgb]{0 0 1}B'}) 1}B' }) % Genera una matriz, escala de grises, donde el tercer parámetro (1, 2 y 3) % representan R G y B respectivamente, al cual hace referencia al color más % blanco de la imagen original (RBG, como se ve en la figura (1). R=RGB(:,:,1);
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
G=RGB(:,:,2); B=RGB(:,:,3); subplot(4,1,2) imshow(R) title('IMAGEN title('IMAGEN \color[rgb]{1 0 0}RED (R)') (R)' ) subplot(4,1,3) imshow(G) title('IMAGEN title('IMAGEN \color[rgb]{0 1 0}GREEN (G)') (G)' ) subplot(4,1,4) imshow(B) title('IMAGEN title('IMAGEN \color[rgb]{0 0 1}BLUE (B)') (B)' )
Otro ejemplo, identificación de imagen RGB por medio de escala de grises: Identificacion2RGBVisionArtificial.m
Figura 10 Identificación de circulo RGB en grises
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
CIRCULO = imread('C:\Users\alvaro\Desktop\CirculoRGB.jpg' imread('C:\Users\alvaro\Desktop\CirculoRGB.jpg' ); figure(6), subplot(4,1,1) imshow(CIRCULO) title({'VISIÓN title({'VISIÓN ARTIFICIAL usando Matlab'; Matlab' ;'Identificacion2RGBVisionArtificial.m' ;'IMAGEN \color[rgb]{1 0 0}R \color[rgb]{0 1 0}G \color[rgb]{0 0 1}B'}) 1}B' }) R=CIRCULO(:,:,1); G=CIRCULO(:,:,2); B=CIRCULO(:,:,3); subplot(4,1,2) imshow(R) title('IMAGEN title('IMAGEN \color[rgb]{1 0 0}RED (R)') (R)' ) subplot(4,1,3) imshow(G) title('IMAGEN title('IMAGEN \color[rgb]{0 1 0}GREEN (G)') (G)' ) subplot(4,1,4) imshow(B) title('IMAGEN title('IMAGEN \color[rgb]{0 0 1}BLUE (B)') (B)' )
Imagen BINARIA En este tipo de imágenes, cada pixel toma un valor de dos valores posibles ceros 0 (negro) ó unos 1 (blanco), y se representan en Matlab por una matriz bidimensional con datos lógicos. Se puede obtener una imagen binaria y a su vez la negación de esta, ver Figura 11. Una imagen binaria, puede ser considerada como un tipo especial de imagen de intensidad, compuesta solamente por blanco y negro. Ejemplo de una matriz, que representa una imagen binaria:
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
Correción de detalles
Zoom
Figura 11 a) Imagen original, b) Imagen binaria 1, c) Imagen binaria 2 d) Imagen binaria 3
ImagenbinariaVisionArtificial.m fprintf('%s%\n' fprintf('%s%\n', , 'VISIÓN ARTIFICIAL Usando Matlab ImagenbinariaVisionArtificial.m') ImagenbinariaVisionArtificial.m' ) fprintf('\n' fprintf('\n') )
–
I = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(7),subplot(4,1,1) imshow(I) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}VISIÓN ARTIFICIAL usando Matlab'; Matlab' ;' \color[rgb]{0 0 0}ImagenbinariaVisionArtificial.m'; 0}ImagenbinariaVisionArtificial.m'; 'IMAGEN ORIGINAL'}) ORIGINAL'}) % Esta función graythresh retorna un valor normalizado entre 0 y 1 que % corresponde al mejor umbral (umb), lo cual, nos ayuda a obtener un umbral % óptimo y binarizar adecuadamente una imagen, mediante la función(im2bw). umb=graythresh(I); im_bin=im2bw(I,umb); subplot(4,1,2) imshow(im_bin) title({'IMAGEN title({'IMAGEN BINARIA 1'}) 1'})
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
% Se obtiene la imagen binaria inversa a im_bin im_bin2=not(im_bin); subplot(4,1,3) imshow(im_bin2) title({'IMAGEN title({'IMAGEN BINARIA 2'}) 2'}) % Con la función imfill(Imagen,'holes'), limpia las partes internas % blancas de los objetos (corrección en detalles). subplot(4,1,4) fill=imfill(im_bin2,'holes' fill=imfill(im_bin2, 'holes'); ); % Limpiamos los “agujeros” imshow(fill) title({'IMAGEN title({'IMAGEN BINARIA 3'; 3'; 'Objeto interior limpio'}) limpio'})
Imagen INDEXADA Una imagen indexada, consiste en guardar una imagen como dos matrices, donde la primera matriz tiene el mismo tamaño que la imagen y un número para cada píxel y la segunda matriz se conoce como Mapa de Color, función en Matlab (Colormap) y su tamaño puede diferir del de la imagen, ejemplo de la imagen INDEXADA Figura 12.
Figura 12 a) Imagen W (9 pixeles) b) Imagen INDEXADA por mapa de colores RGB.
ImagenIndexadaVisionArtificial.m % Se crea una matriz 3x3, W=[a b c; d e f; g h i], donde a,b,c son los % parámetros de la primera fila de la imagen W. Es como si se tuvieran % nueve (9) pixeles. W=[1 2 3; 2 3 1; 3 1 2]; figure(8) image(W) title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'ImagenIndexadaVisionArtificial.m' ; 'IMAGEN W'}) W'})
Grupo de Investigación - Inteligencia Artificial en Educación
% % % % % %
Visión Artificial Matlab Parte 1
Se crea una matriz 3x3, mapa=[A B C; D E F; G H I], donde A,B,C son los parámetros correspondientes al color R, así sucesivamente para el color G y B, estos colores varían según la combinación RGB que cada uno trae, es decir, cada uno de los nueve (9) pixeles se compone de una gama de tres colores RGB, en intensidades entre 0 y 1, que la función colormap genera.
figure(9) image(W) title({'IMAGEN title({'IMAGEN W (mapa de colores)'}) colores)'}) mapa = [1 0 0; 0 1 0; 0 0 1]; colormap(mapa)
Otro ejemplo, crear una imagen INDEXADA a partir de una imagen RGB ImagenIndexada2VisionArtificial.m
Figura 13 Imagen INDEXADA al 0.1, 0.15 y 0.25 a escala de grises
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
RGB = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(10), subplot(4,1,1) imshow(RGB) title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'ImagenIndexada2VisionArtificial.m' ; 'IMAGEN ORIGINAL'}) ORIGINAL'}) subplot(4,1,2) ind1=rgb2ind(RGB,0.1); imshow(ind1) title({'IMAGEN title({'IMAGEN INDEXADA al 0.1'}) 0.1'}) subplot(4,1,3) ind2=rgb2ind(RGB,0.15); imshow(ind2) title({'IMAGEN title({'IMAGEN INDEXADA al 0.15'}) 0.15'}) subplot(4,1,4) ind3=rgb2ind(RGB,0.25); imshow(ind3) title({'IMAGEN title({'IMAGEN INDEXADA al 0.25'}) 0.25'})
Imagen INTENSIDAD Una imagen de intensidad, se representa por una matriz única, cuyos elementos son los píxeles de la imagen, estos elementos de la matriz de intensidad representan varias intensidades, o niveles de gris, donde la intensidad cero (0) corresponde al color negro y la intensidad uno (1) al blanco. En la Figura 14 vemos una imagen INTENSIDAD a partir de una imagen RGB.
Figura 14 Imagen Intensidad a partir de imagen RGB.
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
RGB = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(11), subplot(2,1,1) imshow(RGB) title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'ImagenIntensidadVisionArtificial.m' ; 'IMAGEN ORIGINAL'}) ORIGINAL'}) subplot(2,1,2) ind1=rgb2gray(RGB); imshow(ind1) title({'IMAGEN title({'IMAGEN INTENSIDAD'}) INTENSIDAD'})
Conversión de imágenes en Matlab
Tabla 1 Conversión de imágenes en Matlab
Tipos de datos de la matriz DOUBLE Doble precisión, números en punto flotante que varían en un rango aproximado de -10308 a 10308 (8 bytes por elemento).
•
•
UINT8 Enteros de 8 bits en el rango de [0,255] (1 byte por elemento).
•
UINT16 Enteros de 16 bits en el rango de [0, 65535] (2 bytes por elemento).
•
UINT32 Enteros de 32 bits en el rango de [0, 4294967295] (4 bytes por elemento).
•
INT8 Enteros de 8 bits en el rango de [-128, 127] (1 byte por elemento).
•
INT16 Enteros de 16 bits en el rango de [-32768, 32767] (2 bytes por elemento).
•
INT32 Enteros de 32 bits en el rango de [-2147483648, 2147483647] (4 bytes por elemento).
SINGLE Número en punto flotante de precisión simple, con valores aproximadamente en el rango de -1038 a 1038 (4 bytes por elemento).
•
Grupo de Investigación - Inteligencia Artificial en Educación
•
CHAR Carácteres (2 byte por elemento).
•
LOGICAL Los valores son 0 ó 1 (1 bit por elemento).
Visión Artificial Matlab Parte 1
Tabla 2 Conversión de tipo de datos en Matlab
BIBLIOGRAFÍA [1] R. C. González, R. E. Woods; Digital image processing; Addison-Wesley, 2007. [2] K. S. Fu, R. C. González, C. S. G. Lee. ROBÓTICA: Control, detección, visión e inteligencia. McGraw-Hill. 1988. Pág. 306-490. [3] R. C. González, R. E. Woods, S. L. Eddins; Digital image processing using MATLAB; Prentice Hall, 2004. [4] http://upcommons.upc.edu/pfc/bitstream/2099.1/9685/4/03_Mem%C3%B2ria.pdf
[5] http://www.slideshare.net/lonely113/procesamiento-digital-de-imgenes-con-matlab [6] http://www.mathworks.com/help/toolbox/imaq/imaqhwinfo.html
Grupo de Investigación - Inteligencia Artificial en Educación
ANEXOS Imagen (foto1)
Imagen (I)
Imagen (CirculoRGB)
Visión Artificial Matlab Parte 1
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
%% % VISIÓN ARTIFICIAL USANDO MATLAB - Parte 1 - CONCEPTOS BÁSICOS %% %ImagenGrisVisionArtificial.m % Genera una matriz I(x,y), de la Imagen original que se encuentra en los % anexos imagen (foto1), matriz con tamaño de 1920 x 2560 unit8, es decir % con 4.915.200 pixeles (4.9 Megapíxeles) con valores de cada pixel entre % 0 y 255, donde cero (0) es el color negro y (255) el color blanco. clear al all l, close al all l, clc foto1 = imread('C:\Users\alvaro\Desktop\foto1.jpg' imread('C:\Users\alvaro\Desktop\foto1.jpg' ); figure(1), subplot(2,1,1) imshow(foto1); title({'\color[rgb]{1 title({'\color[rgb]{1 0 0}VISIÓN \color[rgb]{0 1 0}ARTIFICIAL \color[rgb]{0 0 1}Usando Matlab'; Matlab';'\color[rgb]{0 0 0}ImagenGrisVisionArtificial.m'; 0}ImagenGrisVisionArtificial.m' ; '\color[rgb]{0 0 1}IMAGEN ORIGINAL'}) ORIGINAL'}) GRIS=rgb2gray(foto1); subplot(2,1,2) imshow(GRIS); title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}IMAGEN ESCALA DE GRISES'}) GRISES' }) %% % Comandos1VisionArtificial.m % Si se desea importar una imagen que está en el PC a Matlab, se realiza % por medio del comando imread('dirección'), por ejemplo la imagen I.jpg % que está en el escritorio: I = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(2),imshow(I) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}IMAGEN EN TAMAÑO REAL'}) REAL' }) figure(3),subplot(3,1,1),imshow(I) title({'\color[rgb]{1 title({'\color[rgb]{1 0 0}VISIÓN \color[rgb]{0 1 0}ARTIFICIAL \color[rgb]{0 0 1}Usando Matlab'; Matlab';'\color[rgb]{0 0 0}Comandos1VisionArtificial.m'; 0}Comandos1VisionArtificial.m'; '\color[rgb]{0 0 1}IMAGEN ORIGINAL'}) ORIGINAL'}) fprintf('%s%\n' fprintf('%s%\n', , 'VISIÓN ARTIFICIAL Usando Matlab Comandos1VisionArtificial') Comandos1VisionArtificial' ) fprintf('\n' fprintf('\n') ) % Obtiene la dimensión de la imagen (alto, ancho, band), el % tercer parámetro (band) se refiere a:(1) imagen gris y (3) imagen a % color. fprintf('\n' fprintf('\n') ) fprintf('%s%\n' fprintf('%s%\n', , ' Dimensión de la imagen (alto, ancho, band), band=1 gris, band=3 color: ') ') fprintf('\n' fprintf('\n') ) size(I) % Obtiene información de la imagen dimensión y tipo de dato. fprintf('\n' fprintf('\n') ) fprintf('%s%\n' fprintf('%s%\n', , ' Información de la imagen dimensión y tipo de dato: ') ') fprintf('\n' fprintf('\n') ) whos I % Obtiene información detallada de la imagen. fprintf('\n' fprintf('\n') )
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
fprintf('%s%\n' fprintf('%s%\n', , ' Información de la imagen dimensión y tipo de dato ') ') fprintf('\n' fprintf('\n') ) imfinfo('C:\Users\alvaro\Desktop\I.jpg' imfinfo('C:\Users\alvaro\Desktop\I.jpg') ) % Obtiene una rotación de la imagen, con la siguiente función % imrotate(Imagen, Angulo, método, BBOX). rota= imrotate(I,30,'bilinear' imrotate(I,30,'bilinear', ,'crop' 'crop'); ); subplot(3,1,2),imshow(rota) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}ROTACIÓN DE LA IMAGEN'}) IMAGEN' }) % Recortar la imagen, con la función imcrop(Imagen,[X1,Y1,ancho,alto]); reco= imcrop(I,[20,30,200,100]); subplot(3,1,3),imshow(reco) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}RECORTE DE LA IMAGEN'}) IMAGEN' }) % Con esta función imresize(I,zoom), lo que haces es tener un zoom de la % imagen, por ejemplo: si zoom<1 la imagen se reduce, si zoom>1 la imagen % aumenta. zoom = imresize(I,2); figure(4),imshow(zoom) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}ZOOM DE LA IMAGEN'}) IMAGEN' }) %% % Genera una matriz de imagen (RGB), con tramas verticales azul, verde y % roja. RGB=reshape(ones(128,1)*reshape(jet(128),1,384),[128,128,3]); % Dibuja la imagen representada por la matriz (RGB). figure(5), subplot(4,1,1) imshow(RGB) % En el titulo se hace uso del comando \color[rgb]{r g b} para representar % colores en la gama RGB de los caracteres del título, donde r=1 representa % el color rojo más intenso y disminuye hasta cero, así sucesivamente para % g (verde) y b (azul). title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'IdentificacionRGBVisionArtificial.m' ;'IMAGEN \color[rgb]{1 0 0}R \color[rgb]{0 1 0}G \color[rgb]{0 0 1}B'}) 1}B' }) % Genera una matriz, escala de grises, donde el tercer parámetro (1, 2 y 3) % representan R G y B respectivamente, al cual hace referencia al color más % blanco de la imagen original (RBG, como se ve en la figura (1). R=RGB(:,:,1); G=RGB(:,:,2); B=RGB(:,:,3); subplot(4,1,2) imshow(R) title('IMAGEN title('IMAGEN \color[rgb]{1 0 0}RED (R)') (R)' ) subplot(4,1,3) imshow(G) title('IMAGEN title('IMAGEN \color[rgb]{0 1 0}GREEN (G)') (G)' ) subplot(4,1,4) imshow(B) title('IMAGEN title('IMAGEN \color[rgb]{0 0 1}BLUE (B)') (B)' )
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
%% % Genera una matriz de imagen (RGB) CIRCULO azul, verde y % roja. CIRCULO = imread('C:\Users\alvaro\Desktop\CirculoRGB.jpg' imread('C:\Users\alvaro\Desktop\CirculoRGB.jpg' ); figure(6), subplot(4,1,1) imshow(CIRCULO) title({'VISIÓN title({'VISIÓN ARTIFICIAL usando Matlab'; Matlab' ;'Identificacion2RGBVisionArtificial.m' ;'IMAGEN \color[rgb]{1 0 0}R \color[rgb]{0 1 0}G \color[rgb]{0 0 1}B'}) 1}B' }) R=CIRCULO(:,:,1); G=CIRCULO(:,:,2); B=CIRCULO(:,:,3); subplot(4,1,2) imshow(R) title('IMAGEN title('IMAGEN \color[rgb]{1 0 0}RED (R)') (R)' ) subplot(4,1,3) imshow(G) title('IMAGEN title('IMAGEN \color[rgb]{0 1 0}GREEN (G)') (G)' ) subplot(4,1,4) imshow(B) title('IMAGEN title('IMAGEN \color[rgb]{0 0 1}BLUE (B)') (B)' ) %% %ImagenbinariaVisionArtificial.m fprintf('%s%\n' fprintf('%s%\n', , 'VISIÓN ARTIFICIAL Usando Matlab – ImagenbinariaVisionArtificial.m') ImagenbinariaVisionArtificial.m' ) fprintf('\n' fprintf('\n') ) I = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(7),subplot(4,1,1) imshow(I) title({'\color[rgb]{0 title({'\color[rgb]{0 0 1}VISIÓN ARTIFICIAL usando Matlab'; Matlab' ;' \color[rgb]{0 0 0}ImagenbinariaVisionArtificial.m'; 0}ImagenbinariaVisionArtificial.m'; 'IMAGEN ORIGINAL'}) ORIGINAL'}) % Esta función graythresh retorna un valor normalizado entre 0 y 1 que % corresponde al mejor umbral (umb), lo cual, nos ayuda a obtener un umbral % óptimo y binarizar adecuadamente una imagen, mediante la función(im2bw). umb=graythresh(I); im_bin=im2bw(I,umb); subplot(4,1,2) imshow(im_bin) title({'IMAGEN title({'IMAGEN BINARIA 1'}) 1'}) % Se obtiene la imagen binaria inversa a im_bin im_bin2=not(im_bin); subplot(4,1,3) imshow(im_bin2) title({'IMAGEN title({'IMAGEN BINARIA 2'}) 2'}) % Con la función imfill(Imagen,'holes'), limpia las partes internas % blancas de los objetos (corrección en detalles). subplot(4,1,4) fill=imfill(im_bin2,'holes' fill=imfill(im_bin2, 'holes'); ); % Limpiamos los “agujeros” imshow(fill) title({'IMAGEN title({'IMAGEN BINARIA 3'; 3'; 'Objeto interior limpio'}) limpio'})
Grupo de Investigación - Inteligencia Artificial en Educación
Visión Artificial Matlab Parte 1
%% % ImagenIndexadaVisionArtificial.m % Se crea una matriz 3x3, W=[a b c; d e f; g h i], donde a,b,c son los % parámetros de la primera fila de la imagen W. Es como si se tuvieran % nueve (9) pixeles. W=[1 2 3; 2 3 1; 3 1 2]; figure(8) image(W) title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'ImagenIndexadaVisionArtificial.m' ; 'IMAGEN W'}) W'}) % Se crea una matriz 3x3, mapa=[A B C; D E F; G H I], donde A,B,C son los % parámetros correspondientes al color R, así sucesivamente para el color % G y B, estos colores varían según la combinación RGB que cada uno trae, % es decir, cada uno de los nueve (9) pixeles se compone de una gama de % tres colores RGB, en intensidades entre 0 y 1, que la función colormap % genera. figure(9) image(W) title({'IMAGEN title({'IMAGEN W (mapa de colores)'}) colores)'}) mapa = [1 0 0; 0 1 0; 0 0 1]; colormap(mapa) %% % ImagenIndexada2VisionArtificial.m RGB = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(10), subplot(4,1,1) imshow(RGB) title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'ImagenIndexada2VisionArtificial.m' ; 'IMAGEN ORIGINAL'}) ORIGINAL'}) subplot(4,1,2) ind1=rgb2ind(RGB,0.1); imshow(ind1) title({'IMAGEN title({'IMAGEN INDEXADA al 0.1'}) 0.1'}) subplot(4,1,3) ind2=rgb2ind(RGB,0.15); imshow(ind2) title({'IMAGEN title({'IMAGEN INDEXADA al 0.15'}) 0.15'}) subplot(4,1,4) ind3=rgb2ind(RGB,0.25); imshow(ind3) title({'IMAGEN title({'IMAGEN INDEXADA al 0.25'}) 0.25'}) %% % magenIntensidadVisionArtificial.m RGB = imread('C:\Users\alvaro\Desktop\I.jpg' imread('C:\Users\alvaro\Desktop\I.jpg'); ); figure(11), subplot(2,1,1) imshow(RGB) title({'VISIÓN title({'VISIÓN ARTIFICIAL Usando Matlab'; Matlab' ;'ImagenIntensidadVisionArtificial.m' ; 'IMAGEN ORIGINAL'}) ORIGINAL'}) subplot(2,1,2) ind1=rgb2gray(RGB); imshow(ind1) title({'IMAGEN title({'IMAGEN INTENSIDAD'}) INTENSIDAD'})