• No se han encontrado resultados

Adquisición y Procesamiento de Datos de Sensores "KINECT" en Matlab

N/A
N/A
Protected

Academic year: 2021

Share "Adquisición y Procesamiento de Datos de Sensores "KINECT" en Matlab"

Copied!
20
0
0

Texto completo

(1)

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

(2)

Sesión 1

Procesamiento de Imágenes en

Matlab

(3)

Repaso de Programación en

Matlab

(4)

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.

(5)

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

(6)

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

(7)

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

(8)

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.

(9)

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

(10)

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

(11)

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.

(12)

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

(13)

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

(14)

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.

(15)

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.

(16)

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

(17)

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,

(18)

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.

(19)

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

(20)

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

Referencias

Documento similar

Solución. Por tanto la sucesión fa n g cumple la condición de Cauchy y, por tanto, es convergente. Este resultado también puede obtenerse sin necesidad de calcular la función suma.

En el caso de la transformada de Hilbert (l-dimen- sional) o en cualquier transformada de Riesz ( n-dimensional), la condición tambien es suficiente.. Un razonamiento

On the other hand, a Beauville surface is a complex surface (real dimension 4) isomorphic to the quotient of the product of two compact Riemann surfaces by a certain free action of

I Las funciones pueden construirse sin nombrarlas mediante las expresiones lambda. I Ejemplo de evaluación de

Aunque los orígenes de la peioofísica pueden remnntasse a los tiempos de Hiparco (150 a.c.) que propuso una medida de uso practica para la magnitud de las estrellas

El conjunto de los números reales no está acotado superiormente, pues, para cualquier número real k, siempre existe otro número real x > k.. “Un extremo superior

Las microalgas representan un importante soporte trófico para la acuicultura, tanto cualitativa como cuantitavamente, en diversos aspectos y especies objeto de cultivo.. Factores

1.2 Modelos matemáticos: un catálogo de funciones básicas 24 1.3 Funciones nuevas a partir de funciones antiguas 37 1.4 Calculadoras graficadoras y computadoras 46 1.5