Adquisición y Procesamiento de
Datos de Sensores "KINECT"
en Matlab
Dr. Isidro Robledo Vega
División de Estudios de Posgrado e Investigación
Instituto Tecnológico de Chihuahua
irobledo@itchihuahua.edu.mx
Sesión 1
Procesamiento de Imágenes en
Matlab
Repaso de Programación en
Matlab
Funciones y Archivos M
MATLAB tiene un gran número de funciones, estas
pueden ser:
Internas.- Incluidas en el mismo sistema.
Externas: Librerías de funciones distribuidas con el software de MATLAB (MATLAB Toolboxes).
La funciones externas también pueden ser agregadas
por los usuarios o grupos de usuarios para aplicaciones
mas especializadas en forma de Archivos M.
Es transparente para el usuario si una función es interna
o externa, lo cual es una importante característica de
MATLAB, ya que los usuarios pueden crear librerías con
sus propias funciones, las cuales actuarán tal y como lo
hacen las funciones internas.
Funciones Internas
abs(x) Valor absoluto o magnitud de un número complejo acos(x) Coseno inverso
acosh(x) Coseno inverso hiperbólico
angle(x) Angulo de un número complejo en cuarto cuadrante asin(x) Seno inverso
atan(x) Tangente inverso
atan2(x,y) Tangente inverso en cuarto cuadrante ceil(x) Redondeo hacia el infinito positivo conj(x) Complejo conjugado
cos(x) Coseno
exp(x) Exponencial ex fix(x) Redondeo a cero
floor(x) Redondeo hacia el infinito negativo
gcd(x,y) Máximo común divisor de los enteros x y y imag(x) Parte imaginaria de un número complejo lcm(x) Mínimo común múltiplo de los enteros x y y log(x) Logaritmo natural
log10(x) Logaritmo común ó base 10
real(x) Parte real de un número imaginario rem(x,y) Sobrante de la división de x/y round(x) Redondeo al entero más cercano
sign(x) Función de signo, regresa el signo como argumento (1:positivo, -1:negativo, 0:cero)
sin(x) Seno
sqrt(x) Raíz cuadrada tan(x) Tangente
Funciones Externas
Todas las funcione externas son escritas como Archivos M.
Una lista de funciones básicas se puede escribir como un archivo de texto y después leerlo desde MATLAB.
Estos archivos de texto o listados de funciones son llamados archivos M.
El término de archivo M es por el hecho de que los nombres usados para estos archivos deben terminar con la extensión .m como ejemplo1.m.
Enseguida se muestra el listado de una función que calcula el promedio de las calificaciones de cuatro unidades.
Después de guardar este archivo solo se requiere teclear ejemplo1 en la línea de comandos de MATLAB y el sistema leerá y evaluara cada línea del archivo M como si se hubiera tecleado directamente en MATLAB.
% Listado del archivo ejemplo1.m unidad1 = 80;
unidad2 = 85; unidad3 = 75; unidad4 = 80;
suma_de_calificaciones = unidad1 + unidad2 + unidad3 + unidad4; calificación_promedio = suma_de_calificaciones/4
Matlab Toolboxes
Son librerías de funciones externas para aplicaciones especializadas.
Todas las funciones de los toolboxes están escritas como Archivos M usando funciones internas básicas o funciones externas de otros toolboxes.
Cada toolbox que se desee agregar a Matlab tiene un costo extra al del paquete básico.
Listado de Toolboxes:
http://www.mathworks.com/products/?s_tid=gn_ps
Ver Toolboxes instalados en la ayuda.
Nos interesa:
Adquisición de Imágenes
Procesamiento de Imágenes
Ciclos FOR
Un ciclo for repite un conjunto de enunciados un número predeterminado de veces. El comando for de MATLAB es muy diferente y no tiene la
generalidad del for de C, C++ o Java. La siguiente construcción ejecuta expresiones con valores de i de 1 a n, variando de uno en uno.
for i=1:n expresión end o bien, for i = Vector_de_Valores expresión end
donde Vector_de_Valores es un vector con los distintos valores que tomará la variable i.
Ciclos FOR
En el siguiente ejemplo se presenta el caso más general para un rango de valores con incremento fijo predefinido de la forma (valor_inicial:
incremento: valor_final); el ciclo se ejecuta por primera vez con i=n, y luego i se va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en cuyo caso el ciclo termina.
for i=n : -0.2 : 1
expresión
end
En el siguiente ejemplo se presenta una estructura correspondiente a dos ciclos anidados. La variable j es la que varía más rápidamente (por cada valor de i, j toma todos sus posibles valores):
for i=1:m
for j=1:n
expresión
end end
Ciclos FOR
Una última forma de interés del ciclo for es la siguiente (A es una matriz):
for i=A
expresión
end
en la que la variable i es un vector que va tomando en cada iteración el valor de una de las columnas de A.
Cuando se introducen interactivamente en la línea de comandos, los ciclos
for se ejecutan sólo después de introducir la sentencia end que los
Desiciones If, Else, Elseif
En su forma más simple, el comando if se escribe en la forma siguiente:
if condicion
expresion
end
Obsérvese que a diferencia de C, C++ o Java, la condición no va entre paréntesis, aunque se pueden poner si se desea. Existe también la condición múltiple, en la que pueden concatenarse tantas condiciones como se desee, y que tiene la forma:
if condicion1 bloque1 elseif condicion2 bloque2 elseif condicion3 bloque3
else %opción por defecto bloque4
end
donde la opción por defecto else puede ser omitida: si no está presente no se hace nada en caso de que no se cumpla ninguna de las condiciones anteriores. Las condiciones son expresiones que pueden contener combinaciones de operadores lógicos y relacionales sobre escalares, variables simples o arreglos de datos.
Switch-Case
Los comandos switch-case realizan una función análoga a un conjunto de
if...elseif concatenados. Su forma general es la siguiente: switch expresión
case caso1,
bloque1
case caso2,
bloque2
otherwise, % opción por defecto
bloque3
end
Al principio se evalúa la expresión, cuyo resultado debe ser un número escalar o una cadena de caracteres. Este resultado se compara con los diferentes case, y se ejecuta el bloque de expresiones del case que corresponda con ese resultado. Si ninguno es igual al resultado de la expresión se ejecuta el bloque de expresiones correspondientes a
Ciclo While
La estructura del ciclo while es muy similar a la de C, C++ o Java. Su sintaxis es la siguiente:
while condición
expresión
end
donde condición puede ser una expresión vectorial o matricial. Las expresiones se siguen ejecutando mientras haya elementos distintos de cero en condición, es decir, mientras haya algún o algunos
elementos true. El ciclo se termina cuando todos los elementos de condición son false (es decir, cero).
Break y Continue
Comando Break
Al igual que en C, C++ o Java, la sentencia break hace que se
termine la ejecución del ciclo for o while en que se halla invocado.
Comando Continue
El comando continue hace que se pase inmediatamente a la siguiente iteración del ciclo for o while, saltando todas las expresiones que hay entre el continue y el fin del ciclo en la iteración actual.
Try-Catch
La construcción try-catch permite gestionar los errores que se
pueden producir en tiempo de ejecución. Su forma es la siguiente:
try
bloque1
catch
bloque2
end
En el caso de que durante la ejecución del bloque1 se produzca un error, el control de la ejecución se transfiere al bloque2. MATLAB dispone de una función lasterr que devuelve una cadena de
caracteres con el mensaje correspondiente al último error que se ha producido. En la forma lasterr('') pone a cero este contador de
errores, y hace que la función lasterr devuelva la matriz vacía [ ] hasta que se produzca un nuevo error.
Procesamiento de Imágenes
Funciones para leer y escribir imágenes:
Imagen=imread(archivo)
imwrite(Imagen,archivo, formato)
El contenido de las imágenes es guardado
como una matriz de datos en Matlab, sus
dimensiones dependerán del tipo de
Procesamiento de Imágenes
Tipos de Imágenes:
Binarias: Arreglo de 0’s (negro) y 1’s (blanco).
Indexadas: Arreglo de datos cuyos valores son
índices para un mapa de color. El mapa de color se
encuentra en otro arreglo.
Escala de gris: Arreglo de datos con valores de
intensidad entre 0 (negro) y 255 (blanco)
RGB: Arreglos de datos de tres dimensiones, uno
para cada color R(Rojo), G(verde) y B(azul), con
valores entre 0 y 255.
Funciones para convertir tipos de imágenes:
rgb2gray, gray2ind, ind2gay, mat2gray,
Procesamiento de Imágenes
Funciones para visualizar imágenes: imshow,
montage, subimage, immovie, implay.
Funciones de exploración: imtool, imageinfo,
imcontrast imdisplayrange, imdistline, impixelinfo.
Funciones para Transformaciones Espaciales:
imcrop, imresize, imrotate, imwarp.
Funciones para mejorar imágenes:
Ajuste de contraste: imadjust, imcontrast, imsharpen, histeq.
Filtrado: imfilter, nlfilter, fspecial, medfilt2.
Operaciones Morfológicas: bwhitmiss, bwmorph, bwulterode.
Actividad 1
Obtener la siguiente imagen y colocarla en su directorio de trabajo.
http://www.depi.itchihuahua.edu.mx/irobledo/cursos/taller_kin ect_matlab/lenna.pgm
Utilizar el siguiente código y agregar un menú de funciones para:
Cambiar el tamaño
Convertir a blanco y negro
Ajustar el contraste
Ecualizar el histograma
Suavizar
Afilar
Dibujar círculos de colores en la imágen
Visualizar la imagen original y la modificada
Código Actividad 1
%Funcion que realiza Procesamiento Digital de Imagenes function proc_im(Imagen)%Lee la imagen im1=imread(Imagen);
%Muestra la imagen original figure, imshow(im1)
%Menu de Opciones
display(['Procesamiento de la Imagen: ' Imagen]) display(['Cambiar Tamaño...1'])
display(['Convertir a blanco y negro....2'])
opcion=input('Seleccione el procesamiento a realizar: ','s');
%Llama a la funcion seleccionada switch opcion
case '1',
escala=input('Factor de escala: ','s'); im2 = imresize(im1, str2num(escala)); figure, imshow(im2) str=input('Guardar imagen (s/n): ','s'); if(strcmp(str,'s')) outimage=input('Nombre de la imagen: ','s'); imwrite(im2,outimage); end otherwise, display(['Opcion Invalida']) end