Diapositivas Sesión 1 - División de Estudios de Posgrado e

Anuncio
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
http://www.depi.itchihuahua.edu.mx/irobledo
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)
acos(x)
acosh(x)
angle(x)
asin(x)
atan(x)
atan2(x,y)
ceil(x)
conj(x)
cos(x)
exp(x)
fix(x)
floor(x)
gcd(x,y)
imag(x)
lcm(x)
log(x)
log10(x)
real(x)
rem(x,y)
round(x)
sign(x)
sin(x)
sqrt(x)
tan(x)
Valor absoluto o magnitud de un número complejo
Coseno inverso
Coseno inverso hiperbólico
Angulo de un número complejo en cuarto cuadrante
Seno inverso
Tangente inverso
Tangente inverso en cuarto cuadrante
Redondeo hacia el infinito positivo
Complejo conjugado
Coseno
x
Exponencial e
Redondeo a cero
Redondeo hacia el infinito negativo
Máximo común divisor de los enteros x y y
Parte imaginaria de un número complejo
Mínimo común múltiplo de los enteros x y y
Logaritmo natural
Logaritmo común ó base 10
Parte real de un número imaginario
Sobrante de la división de x/y
Redondeo al entero más cercano
Función de signo, regresa el signo como argumento
(1:positivo, -1:negativo, 0:cero)
Seno
Raíz cuadrada
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
 Visión por Computadora
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
completa.
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
otherwise.
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
imagen.
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,
ind2rgb, im2bw.
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
 Guarda la imagen 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
Descargar