La Red de Conocimientos Pedagógicos - Currículum vitae - Tesis del proyecto de graduación de Matlab

Tesis del proyecto de graduación de Matlab

Ejecute el comando GUIDE en la ventana de comandos de MATLAB para abrir la interfaz del asistente, como se muestra a continuación:

Luego, seleccione una plantilla vacía (Blang

GUI) y haga clic en Aceptar para abrir la guía. interfaz de diseño como se muestra a continuación:

Haga clic en el editor de menú (menú) en la barra de herramientas (

editor) para abrir el editor de menú, de la siguiente manera:

En el menú

Crea un nuevo elemento de menú llamado "Archivo" en la barra de herramientas. Vea la imagen a continuación para ver otras configuraciones:

Agregue elementos de menú en el menú Archivo: Abrir, Guardar, Salir. Vea la imagen a continuación:

Si necesita agregar una línea separadora en el elemento del menú "Salir", seleccione "Separador".

El elemento anterior" será suficiente.

Guardar mi interfaz como pjimage.fig

El archivo pjimage.m se abrirá automáticamente después de guardarlo. Todos nuestros programas se escribirán en este archivo m. En programación, cada movimiento del mouse corresponde. Una función de devolución de llamada. También lo hace nuestro menú.

En la interfaz, haga clic derecho y seleccione "Propiedades"

Inspector" para abrir la ventana de propiedades. Cuando hacemos clic en diferentes controles, aquí se mostrarán sus propiedades correspondientes y podremos modificarlas. Las propiedades más importantes son las propiedades de la etiqueta y las propiedades de la cadena.

Establezca el atributo Etiqueta de la ventana gráfica actual en: figure_pjimage, y el título (atributo Nombre) de la ventana en: Instancia de procesamiento de imágenes. Como se muestra a continuación:

Luego, haga clic en el botón Guardar en la barra de herramientas. Después de eso, haga clic en el botón Ejecutar (Ejecutar

Gráfico) en la barra de herramientas. Tenga en cuenta que se muestran iconos en la barra de herramientas, como el botón "Ejecutar".

Veremos la siguiente interfaz:

Esto significa que nuestro directorio está guardado. El archivo fig no es el directorio actual, pero no importa, solo necesitamos hacer clic en "Cambiar" para cambiar el directorio actual. Por supuesto, si desea agregar el directorio actual a la ruta de MATLAB, haga clic en "Agregar a". "

Ruta" servirá. Recomiendo hacer clic en "Cambiar" aquí.

Directorio", porque no hay gran necesidad de agregarlo a la ruta de MATLAB. Generalmente, necesitamos agregar una caja de herramientas o nuestra función o programa para completarlo. Cuando nuestra función no se puede encontrar en el comando ventana de MATLAB, podemos agregar el directorio donde se encuentra la función o programa a la ruta de MATLAB

El botón que haga clic depende de su preferencia

Cuando nuestro programa se esté ejecutando. se ve así:

Podemos ver los elementos del menú y las teclas de acceso directo debajo del archivo, pero no hemos escrito el programa, por lo que incluso si hacemos clic en él, no habrá respuesta si no lo hacemos. Si no desea configurar una tecla de acceso directo, puede configurarla en el menú

Configúrela en el editor y seleccione Ctrl ninguno, de la siguiente manera:

En este caso, el proyecto. No se guarda la tecla de acceso directo. Podemos verificar la función de respuesta de este elemento del menú a través del botón "Ver", que es la función de devolución de llamada. Por ejemplo, el atributo de etiqueta guardado es m_file_save y su función de devolución de llamada correspondiente es El nombre. m_file_save_Callback.

Escribamos una función para abrir un elemento del menú. En la programación de la interfaz, por supuesto, la función para abrir el cuadro de diálogo es uigetfile. comando para ver su descripción detallada.

Por lo tanto, necesitamos agregar el siguiente programa en pjimage_OpeningFcn para * * * disfrutar de esta matriz img_src. El código es el siguiente:

setappdata(handles. figure_pj image, 'img_src', 0);

Luego, escribe el siguiente programa al final de la función m_file_open_Callback:

setappdata(handles. figure_pj image, 'img_src', img_src);

Luego, podemos extraer img_src en la función m_file_save_Callback, de la siguiente manera:

img_ src = getappdata(handles . figure _ pj image, ' img _ src ');

Luego, al guardar, se utilizará naturalmente el cuadro de diálogo de guardar. Para utilizar el cuadro de diálogo de guardar, debe utilizar la función uiputfile. Para obtener más información, utilice la Ayuda.

Vista de archivos Uiput.

Luego, guarde el programa en el elemento del menú (m_file_save_Callback) de la siguiente manera:

[nombre de archivo,

nombre de ruta] = uiputfile({' *.bmp ' , 'Archivo BMP'; '*.jpg', 'Archivo JPG' }, 'Seleccione una

imagen');

if isequal(nombre de archivo, 0 ) || (nombre de ruta, 0)

Regresar si hace clic en Cancelar

Otro

fpath = archivo completo(nombre de ruta,

nombre de archivo); Otra forma de conseguir el camino completo.

Fin

img _ src = getappdata(handles . figure _ pj image, ' img _ src ');

imwrite(img_src, fpath); guardar la imagen

El siguiente es el programa para salir del elemento del menú. Para salir de la interfaz, simplemente use la función de cerrar, pero generalmente aparecerá un mensaje. Por ejemplo, si procesó la imagen pero no la guardó, debe mostrar un mensaje al cerrar, preguntando si desea guardarla. Sin embargo, no haré este trabajo aquí y lo escribiré más adelante cuando sea necesario. Por lo tanto, aquí solo hay una oración para salir del elemento del menú, como se muestra a continuación:

close(handles . figure _ pj image);

De hecho, también puedes usar el función de eliminación, es decir: eliminar (maneja. figura _ pj imagen); depende de tu estado de ánimo.

Pero cuando ejecuta el programa, encontrará que si hace clic en el botón "Cancelar" al abrir la imagen, la ventana de comando de MATLAB mostrará un error porque no manejamos la cancelación. Abordemos este problema a continuación, simplemente cambie el programa en m_file_open_Callback al siguiente programa:

[nombre de archivo,

nombre de ruta] = uigetfile(...

{'*.bmp*.jpg*.png*.jpeg ', 'Archivo de imagen

(*.bmp, *.jpg, *.png, *.

JPEG)';...

'*.* 'Todos los archivos

(*.*)'}, ...

Elige una imagen' );

if isequal(nombre de archivo, 0) ||

isequal(nombre de ruta, 0),

Retorno

Fin; /p>

ejes(handles . ejes _ src);

fpath =[nombre de ruta

Nombre de archivo]

img _ src = im; read(fpath);

imshow(img_src);

setappdata(handles. figure_pj image, 'img_src', img_src);

Hagamos un procesamiento de imágenes de binarización de imágenes. Agregue un menú "Procesamiento de imágenes" como se muestra arriba, como se muestra a continuación:

Agregue un elemento de menú "Binarización de imágenes" debajo, como se muestra a continuación:

Luego, haga clic en Aceptar para cerrar la edición del menú y guarde toda la interfaz. Si nuestro. m, podemos hacer clic en el botón "Ver" en la imagen de arriba para generar una función de devolución de llamada. La binarización de imágenes tiene un umbral, por lo que podemos crear una nueva interfaz y colocar un control deslizante en esta interfaz para establecer el umbral para la binarización de imágenes. Al mismo tiempo, hay un texto que muestra el valor actual del control deslizante. Luego, creemos una nueva interfaz en blanco y dibujemos una estática en ella.

Controles de texto y control deslizante, luego use la herramienta de alineación de la barra de herramientas (Alinear

Objetos), a dos espacios. Como se muestra a continuación:

Luego, guarde esta interfaz como im2bw_args.fig. El diseño completo es el siguiente:

Puede configurarlo estáticamente.

La propiedad FontSize del Texto es 10, por lo que la fuente será más grande. Establezca el atributo Etiqueta del texto estático

en txt_display y establezca el atributo Etiqueta de la barra de desplazamiento en slider_val. Para habilitar el desplazamiento en una barra de desplazamiento, el texto

estático muestra el valor de la barra de desplazamiento. Debe escribir el siguiente programa en la devolución de llamada de la barra de desplazamiento. Puede hacer clic derecho en la barra de desplazamiento y seleccionar "Ver"

"Devolución de llamada" en "Devolución de llamada" para ingresar directamente a la función de devolución de llamada de la barra de desplazamiento (slider_val_Callback).

val=get(hObject, ' Valor ');

set(handles.txt_display, ' String ', num2 str(val)); , ejecute el programa, puede deslizar la barra de desplazamiento y el texto estático mostrará el valor correspondiente. Haga doble clic en la figura para abrir la ventana de propiedades de la figura (la ventana con un cuadro en la parte inferior), establezca su propiedad Etiqueta en "figure_im2bw" y establezca su propiedad Nombre en "Establecer umbral de binarización de imagen". Luego, guarde la interfaz. En tiempo de ejecución, se ve así:

Entonces lo que pensamos es que cuando el control deslizante se desliza, la imagen binaria se mostrará en el eje de coordenadas axes_dst en pjimage. Entonces, ¿qué debemos hacer? Primero, cuando hace clic en "Binarización de imágenes" en "Procesamiento de imágenes" en PJI Image. Se abrirá el menú FIG, im2bw_args.fig. Aquí es cuando llamamos a im2bw_args.m. Al llamar, devolveremos un identificador. Este identificador apunta al im2bw_args.fig abierto. Para obtener más detalles, consulte los comentarios al frente del archivo im2bw_args.m.

H = IM2BW_ARGS devuelve un identificador a un nuevo IM2BW_ARGS o un identificador a

el

existente

singleton*.

Es decir, podemos abrir im2bw_args.fig como se muestra arriba. Entonces, bajo la función de devolución de llamada de "Binarización de imágenes" (m_image_2bw_Callback), escriba el siguiente programa:

h = im2bw _ args

Luego, guarde pjimage.fig y, finalmente, es mejor. para guardar im2bw_args.fig y pjimage.fig en un directorio. Luego ejecute pjimage.fig, puede ver que al hacer clic en "Binarización de imagen" se abrirá im2bw_args.fig, y el valor de respuesta también se mostrará cuando se deslice el control deslizante.

Primero, hablemos sobre cómo mostrar la imagen binaria deslizante en el eje de coordenadas axes_dst de pjimage cuando el control deslizante se desliza.

Primero necesitamos obtener el identificador de la figura de pjimage, lo cual se puede hacer mediante la función findobj, y luego usar guihandles para convertir el valor de retorno en un identificador. Este identificador convertido se puede usar para hacer referencia a cualquier control en pjimage.fig. Por lo tanto, agregamos la siguiente función a la función de devolución de llamada del control deslizante en im2bw_args.fig:

h _ pj image = getappdata(handles). .figure_im2bw,'h_pjimage');

axes(h_pjimage.axes_dst);

img_src = getappdata(h_ pj image . figure_pj image, 'img_src'); /p>

bw=im2bw(img_src, val);

im show(bw);

Luego, agregue lo siguiente en im2bw_args_OpeningFcn:

h_pjimage=findobj('Etiqueta', 'figure_pjimage');

h_pjimage = identificadores de GUI (imagen h_ pj);

setappdata(identificadores . figure_im2bw, 'h_pjimage', imagen h_pj) ;

Luego, guarda y ejecuta. El efecto es el siguiente:

Sin embargo, ¿qué sucede si hacemos clic en "Binarización de imagen" sin abrir la imagen? Puede ver que la imagen mostrada es completamente negra y no tiene ningún significado. Por lo tanto, podemos hacer que el menú "Procesamiento de imágenes" no esté disponible cuando no se hace clic en el elemento del menú "Abrir".

Luego, en OpeningFcn de pjimage.m, agregue el siguiente programa:

set(handles.m_image, 'Enable', 'off');

En Al final de la función de devolución de llamada del elemento del menú Abrir, agregue el siguiente procedimiento:

set(handles.m_image, 'Enable', 'on'); En este caso, siempre que no haga clic en "Abrir", no podrá utilizar los comandos del menú "Procesamiento de imágenes". El efecto es el siguiente:

Haga clic en "Abrir" para usarlo.

La siguiente pregunta es si guardar la imagen. Primero debemos configurar dos indicadores: uno es si la imagen se ha procesado y el otro es si la imagen se ha guardado. Luego agregamos los siguientes dos datos de aplicación en pjimage_OpeningFcn.

setappdata(handles. figure_pj image, 'bSave', false);

setappdata(handles. figure_pj image, 'bChanged', false);

Entonces en la función de devolución de llamada del elemento del menú "Binarización de imágenes", cambie el valor de bChanged a verdadero, es decir, agregue el siguiente programa:

setappdata(handles. figure_pj image, 'bChanged', true);

Debido a que queremos guardar la imagen en el eje axes_dst, y "Guardar" en "Archivo" esencialmente guarda la imagen en el eje axes_src, entonces, ¿qué debemos hacer? Tenemos que agregar otro elemento del menú "Guardar". Esta vez, agregamos un menú contextual al eje axes_dst.

Abre el editor de menú en la barra de herramientas y selecciona el contexto.

Menú (menú contextual), como se muestra a continuación:

Luego, crea un nuevo contexto.

Menú, su atributo de etiqueta es axes_dst_menu, como se muestra a continuación:

Luego agréguele un elemento de menú: Guardar, su atributo de etiqueta es axes_dst_menu_save, como se muestra arriba. Luego, haga clic derecho en el eje axes_dst y seleccione Propiedades

Inspector. Cambie la propiedad UIContextMenu del eje a axes_dst_menu.

Como se muestra a continuación:

Luego, guarde y ejecute. Haga clic derecho en axes_dst y verá el menú Guardar. Escribimos sobre sus funciones.

[Nombre de archivo, nombre de ruta] =

uiputfile({'*.bmp', 'archivo BMP'; '*.jpg', 'archivo JPG' }, 'Seleccionar una imagen');

Si

isequal(nombre de archivo, 0) || isequal(nombre de ruta, 0)

Regresar;

Otro

fpath = archivo completo (nombre de ruta,

Nombre de archivo

Fin

img _ dst = getimage( handles. axes_dst);

imwrite(img_dst, fpath);

setappdata(handles. figure_pj image, 'bSave', true);

Pero encontrarás que hay un menú cuando haces clic derecho en axes_dst antes de mirar la imagen. Una vez binarizado, no hay menú cuando vuelve a hacer clic derecho.

Sin embargo, cuando agregamos el menú contextual axes_dst_menu al UIContextMenu de la ventana de la figura (aquí no hay controles, haga doble clic para abrir la ventana de propiedades de la figura), los problemas anteriores no ocurrirán y todo funcionará normalmente. Porque, al agregar a axes_dst, una vez que cambia el contenido del eje, el menú contextual se adjuntará al objeto principal. Por lo tanto, si es necesario mostrar un menú contextual en el eje, se creará mediante programación. No hablemos de cómo crearlo. Primero hablemos sobre cómo guardar el eje axes_dst y qué hacer al salir del programa.

Cambie el m_file_exit_Callback original al siguiente programa:

b cambiado = getappdata(handles . figure _ pj image, ' b cambiado ');

b save = getappdata(handles . figure _ pj image, ' b save ');

If

bChanged == true amp ampBSave==false, cambiado pero no guardado.

BtnName=questdlg('Has cambiado la imagen, pero no se guardó. ¿Quieres guardarla?, 'Preguntar', 'Guardar', 'No guardar', 'Guardar' ); use el cuadro de diálogo de preguntas

Cambiar btnName,

Caso "Guardar", ejecute la función de axes_dst_menu_save_Callback.

Fe val(@axes_dst_menu_save_Callback, handles.axes_dst_menu_save, eventdata, handles);

Caso "No guardar", no hace nada.

End

End

h=findobj('Tag ', ' figure _ im2bw '); determina si se abre la ventana para configurar los parámetros de binarización de imágenes.

si

~isempty(h), si lo encuentra, ciérrelo.

Close(h);

Fin

close(findobj('Tag ', ' figure _ pj image '); Cerrar la ventana principal

Agreguemos una barra de herramientas al programa.

Se abre el editor:

Seleccione "Predefinido"

Abra en "Herramientas", haga clic en "Agregar". ". Seleccione "Guardar" nuevamente y haga clic en "Agregar" y cambie el atributo de etiqueta del botón "Abrir" a "TBL_Open". El atributo de etiqueta se cambia a "TBL_Open, Guardar" como se muestra a continuación:

Haga clic en "Ver" para encontrar la devolución de llamada del botón Abrir y llame a la devolución de llamada del elemento del menú debajo de él, que debe abrirse en el botón Abrir. Escriba el siguiente programa debajo de la devolución de llamada:

feval( @m_file_open_Callback, handles.m_file_open, eventdata, handles);

De manera similar, busque la devolución de llamada del botón Guardar y escriba el programa para guardar a continuación, pero debemos determinar si es la primera vez que guardamos. entonces, use el cuadro de diálogo de guardar; si no, podemos guardarlo directamente en la primera ruta guardada. Luego, también necesitamos configurar varios datos de la aplicación para registrar si se guarda por primera vez y la segunda. es registrar la ruta del primer guardado.

En este caso, agregamos el siguiente código en pjimage_OpeningFcn:

setappdata(handles . figure _ pj image, 'fstSave ', true);

setappdata(handles . figure _ pj image); , 'fstPath', 0);

Luego, bajo la devolución de llamada del botón Guardar, escriba el siguiente programa:

FST save = getappdata(handles. figure_pj image, ' FST save ') ;

if(fstSave==true)

[nombre de archivo, nombre de ruta] = uiputfile({'*.bmp','archivo BMP';' *.jpg', 'Archivo JPG'},

Elige una imagen');

if isequal(nombre de archivo, 0) ||

isequal(nombre de ruta, 0)

Regresar;

Otros

fpath=fullfile(nombre de ruta, nombre de archivo);

Fin

img_dst = getimage (handles. axes_dst);

imwrite(img_dst, fpath);

setappdata(handles. figure_pj image, 'fstPath', fpath);

setappdata( handles. figure_pj image, 'bSave', true);

setappdata(handles. figure_pj image, 'fstSave', false

Otro

img _); dst = getimage(handles . axes _ dst);

fpath = getappdata(handles . figure _ pj image, ' FST path ' );

imwrite(img_dst, fpath);

Fin

Y también necesitamos el botón "Guardar" debajo del archivo y "Guardar" en la barra de herramientas. El botón no está disponible antes de abrir la imagen y solo está disponible al hacer clic. "Abrir" debajo del archivo o "Abrir" debajo de la barra de herramientas. Luego debe agregar el siguiente código en pjimage_OpeningFcn:

set(handles.tbl_save,'Enable','off');

set(handles.m_file_save,'Enable', 'off ');

Y en m_file_open_Callback, agregue el siguiente código:

set(handles.tbl_save, 'Enable', 'on');

set( handles.m_file_save,'Enable','on');

Este es un programa pequeño.

Si puede completar este pequeño programa de acuerdo con los pasos anteriores, entonces habrá dominado los problemas de la programación de interfaces.