Diapositivas Sesión 2 - 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
[email protected]
http://www.depi.itchihuahua.edu.mx/irobledo
Sesión 2
Introducción a GUIDE
¿Cómo iniciar GUIDE?
 GUIDE es el Ambiente de Desarrollo de Interfaces Gráficas de
Usuario de MATLAB.
 Proporciona un conjunto de herramientas para crear interfaces
gráficas de usuario (GUI).
 Estas herramientas simplifican enormemente el proceso de
creación y programación de GUIs.
¿Cómo iniciar GUIDE?
1. Se puede utilizar ‘guide’ desde la línea de comandos.
2. De la pestaña HOME en la seccion FILE y en el icono NEW se
selecciona ‘Graphical User Interfase’
3. Seleccionando un archivo ‘.fig’ con una interfaz guardada
previamente que abre directamente la interfaz en el editor de
diseño (Layout Editor). Se oprime el botón derecho de ratón
sobre el archivo y se selecciona ‘Open in GUIDE’.
Inicio de GUIDE
En cualquiera de los dos primeros casos se abrirá la siguiente ventana:
Aquí se presentan opciones para seleccionar el tipo de interfaz a
construir. La primera opción nos da una interfaz en blanco (sin ningún
control). La segunda opción nos da una interfaz con algunos controles
preestablecidos. La tercera opción proporciona una interfaz que incluye
unos ejes de graficación y un menú. La cuarta opción permite crear una
caja de diálogo con preguntas y botones de control. Al seleccionar una
opción se puede observar la vista previa de la interfaz.
Editor de Diseño (Layout Editor)
Una vez seleccionada la opción para el diseño inicial de la interfaz
se abre el editor de diseño. Éste permite rellenar una interfaz gráfica
de usuario haciendo clic y arrastrando componentes al área de
diseño.
Ahí se puede cambiar el tamaño, agrupar y alinear botones, cuadros
de texto, controles deslizantes, ejes de graficación y otros
componentes que se agreguen al área de diseño.
Otras herramientas accesibles desde el editor de diseño permiten:
o Crear menús
o Crear barras de herramientas
o Modificar la apariencia de los componentes
o Fijar el orden de las pestañas
o Ver una lista jerárquica de los objetos componentes
o Configurar las opciones de la interfaz gráfica de usuario
Editor de Diseño (Layout Editor)
La siguiente figura muestra una interfaz en blanco en el editor de diseño.
Editor de Diseño (Layout Editor)
• Lo primero que debemos hacer darle un nombre seleccionando ‘File > Save As…’ del menú del editor de diseño. De esta manera
crearemos un archivo con la extensión ‘.fig’.
• El siguiente paso es modificar el tamaño de la interfaz seleccionando
el cuadro negro en la esquina inferior derecha y arrastrándolo hasta el
tamaño deseado. Si no está seguro del tamaño final, este se puede ir
modificando conforme se vayan agregando componentes.
• Ahora ya se puede empezar a añadir controles a la interfaz, solo se
seleccionan de la barra de herramientas lateral y se arrastran hacia el
área de diseño. Una vez ahí, los controles pueden ser modificados en
tamaño, posición y propiedades, o eliminados.
Controles de Interfaz de Usuario
• En Matlab se les llama ‘uicontrol’ o los controles que se pueden
agregar a una interfaz de usuario, cada uno tiene una finalidad
diferente y, por lo tanto, tiene diferentes propiedades o atributos y
programación.
• El comando ‘handle = uicontrol('Name',Value,...)’ crea un control y
le asigna las propiedades y valores especificados. Se asigna un
valor predeterminado a las propiedades no especificadas en su
creación. La función regresa el valor ‘handle’ que es el nombre
con el cual se puede hacer referencia al objeto para modificar
sus parámetros.
Estilos de Controles
Se utiliza la propiedad ‘Style’ para definir el tipo de control, las
opciones son:
'checkbox' - Una casilla de verificación genera una acción cuando
es seleccionada. Utilice las casillas de verificación para proporcionar
una serie de opciones independientes. Para activar una casilla de
verificación, haga clic con el botón del ratón sobre el objeto. La
casilla de verificación actualiza su apariencia cuando cambia su
estado.
Estilos de Controles
'edit' – Este control contiene un campo de texto editable que
permiten introducir o modificar los valores del texto. Utilice cajas de
texto editable cuando desee que el usuario escriba texto libre como
entrada. Para habilitar varias líneas de texto, establezca el atributo
Max -Min > 1. Las cajas de texto multilínea proporcionan una barra
de desplazamiento vertical para desplazarse. También se puede
usar las teclas de flecha para desplazarse. Se puede obtener el
texto de la caja utilizando la propiedad ‘String’. Esta propiedad no se
actualiza a medida que se escribe, se debe hacer clic fuera de la
caja de edición para actualizarla y activar su función Callback.
Estilos de Controles
'frame' – Los marcos son rectángulos que proporcionan un recuadro
visual en una región de la interfaz. Los marcos pueden hacer una
interfaz de usuario más fácil de entender mediante la agrupación de
controles relacionados. Los marcos no tienen funciones Callback
asociadas con ellos. Sólo se pueden colocar controles dentro de los
marcos. Los marcos o frames han sido sustituidos con paneles
(uipanel) o grupos de botones (uibuttongroup) que son creados de
forma similar que los del tipo uicontrol. Los frames siguen siendo
soportados por GUIDE pero ya no se muestran en el Editor de
Diseño.
Estilos de Controles
'listbox' – Las cajas de listas sirven para mostrar una lista de
elementos donde se puede seleccionar uno o más de ellos. A
diferencia de los menús emergentes, las cajas de listas no se
expanden cuando se hace clic. Las propiedades Min y Max
controlan el modo de selección:
Ajustando el atributo Max-Min> 1 se pueden seleccionar múltiples
elementos.
Ajustando Max-Min <= 1 permite la selección de un solo elemento a
la vez.
La propiedad Value almacena los índices de los elementos de la
lista seleccionados en ese momento, y almacena un vector de
valores al seleccionar varios elementos. MATLAB evalúa la función
Callback de la caja de listas cuando se selecciona algún elemento.
Estilos de Controles
'popupmenu' - Los menús emergentes (también conocidos como
menús desplegables o cuadros combinados) muestran una lista de
opciones cuando usted los abre con un click del ratón. Cuando está
cerrado, un menú emergente indica la opción actual. Los menús
emergentes son útiles cuando se quiere ofrecer una serie de
opciones que se excluyen mutuamente, pero sin usar todo el
espacio que requiere un grupo de botones de radio.
Estilos de Controles
'pushbotton' – Los botones de pulsación generan una acción
cuando son activados, es decir, cuando se hace clic sobre ellos. La
función Callback se activa cuando se suelta el botón del ratón.
"radiobutton" – Los botones de radio son similares a las casillas de
verificación, pero se pretende que sean mutuamente excluyentes
dentro de un grupo de botones de radio relacionados. Cuando se
usa de esta manera, sólo se puede seleccionar un botón de radio en
un momento dado. La manera más fácil de poner en práctica el
comportamiento mutuamente excluyente para un conjunto de
botones de radio es colocarlos dentro de un uibuttongroup.
Estilos de Controles
'slider' – Con las barras de deslizamiento se puede dar una entrada
numérica dentro de un rango específico. Se debe hacer click sobre
el botón de la barra de deslizamiento y arrastrarlo hacia el valor
deseado. También puede mover el control haciendo clic a lo largo de
la barra o en los botones de flecha situados en ambos extremos. La
ubicación del botón indica un valor numérico, asignado a la
propiedad Value cuando suelte el botón del ratón. Puede establecer
el mínimo, el máximo, los valores actuales y tamaños de paso de un
control deslizante.
Estilos de Controles
'text' – Las cajas de texto estático permiten la visualización líneas
de texto. Normalmente se utiliza el texto estático para etiquetar otros
controles, proporcionar información al usuario o indicar los valores
asociados con un control deslizante. Los usuarios no pueden
cambiar el texto estático de forma interactiva. Las cajas de texto
estático no tienen función Callback.
'togglebutton' - Los botones de alternancia son similares en
apariencia a los botones de pulsación, pero estos indican
visualmente su estado, ya sea encendido (presionado) o apagado
(sin presionar). Al hacer clic en un botón cambia su estado y cambia
su propiedad Value entre Min y Max.
Ejes de Graficación
• Se puede agregar una eje de graficación dentro de una interfaz,
estos objetos son llamados ‘axes’. Los ejes de graficación o
‘axes’ permiten a una interfaz gráfica de usuario mostrar gráficas
e imágenes. Al igual que todos los objetos gráficos, los ejes de
graficación tienen propiedades que se pueden establecer para
controlar muchos aspectos de su comportamiento y apariencia.
• Una vez seleccionada el área de la interfaz para desplegar los
ejes de graficación, se puede modificar su apariencia mediante
programación, haciendo referencia al objeto por su nombre o
‘handle’ para desplegar información usando comandos como:
plot, surf, line, bar, polar, pie, contour, mesh y hasta imshow para
mostrar una imagen.
Tablas de Datos
Se puede destinar un área dela interfaz para desplegar información
en forma de tabla, este objeto se crea con el comando:
uitable('PropertyName1', value1, 'PropertyName2', value2, ...)
y se pueden modificar sus datos con la propiedad ‘Data’. Cada vez
que se modifica algún dato se llama a la función Callback del objeto.
Componentes ActiveX
Al agregar un componente ActiveX a una interfaz de usuario permite
desplegar un control ActiveX, estos solo están disponibles en la
plataforma Windows de Microsoft y son paquetes de software que
realizan funciones específicas como un temporizador o funciones
para el control de algún dispositivo externo.
Inspector de Propiedades
Para modificar las propiedades predefinidas de un control se hace
doble clic sobre éste, lo que abre la ventana del Inspector de
Propiedades del Control. Ahí se puede modificar la apariencia y el
comportamiento de cada control. La siguiente figura muestra una
vista parcial del Inspector de Propiedades de un control del tipo
‘pushbotton’.
Inspector de Propiedades
Cada uno de los controles tiene propiedades particulares, a continuación
se explican algunas de ellas:
BackgroundColor.- Es el color usado para rellenar el rectángulo del
control. Específica un color usando un vector de tres elementos RGB
(rojo, verde y azul) o uno de los nombres ya predefinidos en Matlab. El
color por "defecto" es determinado por la configuración del sistema.
BusyAction.- Interrupción de la función Callback. Si una función Callback
es ejecutada y el usuario activa otro control que también ejecuta una
función Callback, esta función trata de interrumpir a la primera. La primera
función Callback puede ser interrumpida solamente por uno de los
siguientes comandos: drawnow, figure, getframe, pause o waitfor; si la
segunda función Callback no contiene ninguno de estos comandos
entonces la primera función no puede ser interrumpida. Si la propiedad
Interruptible del objeto que está ejecutando la función Callback está
desactivada (off), esta no puede ser interrumpida (excepto por algunas
funciones).
Inspector de Propiedades
La propiedad BusyAction del control, cuya función Callback está
esperando para ejecutarse, determina lo que le pasa a la función
Callback:
•
Si el valor es ‘queue’, la llamada es agregada al evento ‘queue’ y
se ejecuta después de que la primera función Callback termina
de ejecutarse.
• Si el valor es ‘Cancel’, el evento es descartado y la función
Callback no se ejecuta.
Nota: Si la función Callback interrumpida es una llamada de
DeleteFcn o CreateFcn o una de una figura de CloseRequest o
ResizeFcn, se interrumpe y ejecuta sin importar el valor de la
propiedad Interrumpible del objeto.
Inspector de Propiedades
ButtonDownFcn.- Es la función que se ejecuta cuando se presiona
un botón del ratón mientras el cursor está en el control.
Callback.- Es el nombre de la función que se ejecuta cuando se
activa un objeto de la clase uicontrol.
Cdata.- Imagen de color verdadero mostrada en un control. Es una
matriz tridimensional de valores RGB que definen una imagen de
color verdadero que es mostrada ya sea en un ‘pushbutton o un
‘togglebutton’. Cada valor debe tener un rango entre cero y uno.
CreateFcn.- Esta propiedad define una función que es ejecutada
cuando Matlab crea un objeto de la clase uicontrol.
DeleteFcn.- Esta propiedad define una función que es ejecutada
cuando Matlab borra un objeto de la clase uicontrol.
Inspector de Propiedades
Enable.- Activa o desactiva el control. Esta propiedad define cómo los controles
responden a un clic del mouse, incluyendo qué función se ejecuta. Esta propiedad
cuenta con las siguientes opciones:



on.- El control está activado y puede ser usado.
inactive.- El control está inactivo pero se ve como si estuviera activado.
off.- El control está inactivo y su etiqueta se vuelve gris.
Extent.- Es un vector de cuatro elementos que define el tamaño y la posición de
una cadena de caracteres usada para etiquetar el control. Tiene la forma [0, 0,
width, height], los dos primeros elementos siempre son cero, width (ancho) y height
(alto) son las dimensiones del rectángulo que contiene el texto.
FontAngle.- Inclinación de un carácter. Poniendo esta propiedad en Italic (italica) u
oblique (oblicua) selecciona una versión inclinada de la fuente, cuando está
disponible en el sistema.
FontName.- Es el nombre de la fuente que mostrará el texto de la etiqueta.
Inspector de Propiedades
FontSize.- Tamaño de la fuente del texto de la etiqueta.
FontUnits.- Unidades del tamaño de la fuente. Puede ser en pixels
(pixeles), inches (pulgadas), centimeters (centímetros) y points (puntos)
son unidades absolutas (1 punto = 1/72 pulgada).
FontWeight.- Peso de un carácter. La opción por defecto es ‘normal’.
Poniendo esta propiedad en ‘bold’ hace que Matlab use una versión en
"negritas" de la fuente, cuando está disponible en el sistema.
ForegroundColor.- Color del texto. Esta propiedad determina el color
del texto definido por la propiedad ‘String’. Especifica un color usando
un vector de tres elementos RGB o un nombre de color predefinido en
Matlab.
HorizontalAlignment.- Esta propiedad define la alineación horizontal
del texto de la etiqueta, puede ser left(izquierda), center(centrado) o
right(derecha).
Inspector de Propiedades
Interruptible.- Esta propiedad define si se puede interrumpir la función
Callback del control.
Max.- Valor máximo admitido por la propiedad Value(valor) del control.
Min.- Valor mínimo admitido por la propiedad Value(valor) del control.
Position.- Define el tamaño y posición del control. Tiene la forma
[left,bottom,width,height] donde (left,bottom) definen la posición de la
esquina inferior izquierda del rectángulo que contiene al control y
(width,height) son el ancho y alto del rectángulo, respectivamente.
SliderStep.- Define el tamaño del paso para un control tipo ‘slider’.
String.- Texto de la etiqueta del control. Para las cajas de listas y los
menús se define como un vector de cadenas de texto.
Inspector de Propiedades
Style.- Define el tipo de control. Puede ser cualquiera de los descritos
previamente.
Tag.- Es el nombre del objeto definido por el usuario para fines de
programación.
Value.- Valor actual del control. El tipo de control define los posibles
valores.
Visible.- Define la visibilidad del control. Por defecto todos los
controles son visibles. Cuando su selecciona off(apagado) el control no
es visible, pero sigue existiendo y se pueden modificar todas sus
propiedades incluyendo esta para hacerlo visible.
Ejecución de la Interfaz
Style.- Define el tipo de control. Puede ser cualquiera de los descritos
previamEn cualquier momento se puede correr la interfaz para
observar su comportamiento, ya sea seleccionando del menú ‘Tool ->
Run’ o con las teclas ‘Ctrl + T’ o con el icono
de la barra de
herramientas. En ese momento se abrirá la siguiente caja de dialogo
donde se anuncia que se creará un archivo de código de MATLAB para
la programación del comportamiento de la interfaz y se guardarán los
datos del archivo ‘.fig’ de la interfaz y se pregunta si se desea
continuar.
Ejecución de la Interfaz
Al seleccionar ‘Si’ nos pedirá seleccionar la ubicación para los archivos
y posteriormente mostrará la interfaz en la pantalla. La siguiente figura
muestra un ejemplo de una interfaz simple donde se agregaron tres
controles. Hasta este momento los controles funcionan, pueden ser
seleccionados, pero no realizarán ninguna acción hasta que se
modifique el archivo de código de la interfaz.
Programación de la Interfaz
El archivo de código tendrá el mismo nombre de la interfaz pero con
extensión ‘.m’. Este archivo fue abierto en el Editor de Texto de Matlab,
donde se pueden hacer las modificaciones al código para que los
controles realicen las acciones deseadas desde el punto de vista del
funcionamiento de la interfaz. En la siguiente figura se muestra
parcialmente el archivo generado para la interfaz simple de tres
controles mostrada anteriormente.
En la figura se muestra la parte del código que genera Matlab cada vez
que se agrega un control. Para los controles del tipo ‘pushbotton’ y
‘radiobutton’ se genera una función del tipo Callback donde se debe
agregar el código que deseamos ejecutar una vez que el botón ha sido
activado. Para las cajas de texto también se genera una función
Callback que se activa cuando se da un ‘Enter’ dentro de la caja,
además de una función CreateFcn que controla el comportamiento de
la caja de texto al ser creada.
Programación de la Interfaz
Modificación de las Propiedades de los
Objetos
Las propiedades de cualquier objeto dentro de la interfaz pueden ser
inspeccionadas y modificadas desde el archivo del código de la interfaz
con los siguientes comandos:
• get(Handle,'PropertyName').- Permite obtener información sobre la
propiedad definida en ‘PropertyName’ del objeto definido por ‘Handle’.
• set(Handle,'PropertyName',PropertyValue,...).- Permite modificar el
valor (PropertyValue) de una determinada propiedad (PropertyName)
del objeto definido por ‘Handle’.
‘Handle’ es el nombre que fue asignado al objeto en su propiedad ‘Tag’
(etiqueta) y guardado en las estructura de datos ‘handles’, esta estructura
contiene los nombres de todos los objetos de la interfaz.
Modificación de las Propiedades de los
Objetos
De esta forma, si se quiere obtener el texto escrito en una caja de
textos que tiene la etiqueta ‘texto1’ y guardarlo en la variable ‘texto’
se deberá ejecutar el siguiente comando:
>>texto = get(handles.texto1, ‘String’)
Y si se quiere cambiar el texto en la caja ‘texto2’ por la cadena de
caracteres guardada en la variable ‘texto’ se debe ejecutar el
siguiente comando:
>>set(handles.texto2, ‘String’, texto);
Actividad 2
Generar una interfaz gráfica de usuario para realizar procesamiento
de imágenes.
Requisitos: La interfaz debe contener controles que permitan al
usuario:
1.- Seleccionar el archivo de la imagen abriendo una caja de diálogo
‘uigetfile’ para examinar el sistema de archivos de la computadora.
2.- Mostrar el archivo de la imagen en Ejes de Graficación.
3.- Agregar las opciones de procesamiento de la Actividad 1
Función Callback del Botón Examinar
% --- Executes on button press in examinar.
function examinar_Callback(hObject, eventdata, handles)
% hObject
handle to examinar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[FileName,PathName] = uigetfile('*.jpg','Seleccione el archivo de la
imagen');
archivo=strcat(PathName,FileName);
set(handles.archivo,'String',archivo);
frame=imread(archivo);
if (isempty(frame))
msgbox('Error al cargar los datos del archivo','Error','error');
return;
end
axes(handles.axes1);
image(frame);
set(handles.axes1, 'Visible', 'off', 'Units', 'pixels');
Interfaz Inicial
Descargar