6ª Práctica. Matlab página 1 PROGRAMACIÓN EN MATLAB PRÁCTICA 06 INSTRUCCIÓN BREAK TRATAMIENTO DE IMÁGENES EN MATLAB FUNCIONES Y GRÁFICOS EJERCICIO 1. INSTRUCCIÓN BREAK................................................................................................................. 1 EJERCICIO 2. TRATAMIENTO DE IMÁGENES EN MATLAB ....................................................................... 2 EJERCICIO 2.1 EJERCICIO 2.2 EJERCICIO 2.3 EJERCICIO 3. OBTENCIÓN DEL NEGATIVO DE UNA IMAGEN..................................................................................... 2 SUPERPOSICIÓN DE DOS IMÁGENES ................................................................................................... 2 ROTACIÓN DE UNA IMAGEN............................................................................................................... 3 DERIVADA E INTEGRAL............................................................................................................. 4 En primer lugar crea un directorio llamado Practica06 en tu directorio G:\Informatica1. En este directorio deberás guardar todos los ficheros y todo el trabajo resultante de esta práctica. Después arranca el programa MATLAB y coloca como directorio de trabajo o directorio activo el directorio creado previamente. EJERCICIO 1. INSTRUCCIÓN BREAK Crea un subdirectorio dentro de G:\Informatica1\Practica06 llamado Ejercicio01 y dentro de él, guarde el siguiente ejercicio. Escribir un programa que pida por teclado un vector y un número y compruebe si ese número se encuentra o no dentro del vector. Se debe mostrar un mensaje por pantalla que indique si el elemento se encuentra o no en el array. Ejemplo: En pantalla aparecerá: El elemento 4 está en el vector En pantalla aparecerá: El elemento 21 NO está en el vector Escuela Superior de Ingenieros de San Sebastián – Universidad de Navarra Informática 1 y Fundamentos de Computadores página 2 EJERCICIO 2. TRATAMIENTO DE IMÁGENES EN MATLAB La digitalización de una imagen permite realizar operaciones numéricas sobre ella. Esto es lo que realizan las distintas funciones implementadas en los programas para tratamiento de imágenes. Mediante las distintas operaciones se pueden realizar efectos especiales sobre una imagen, eliminar ruido, darle más o menos luz a una fotografía, etc. En el directorio Q:\Informatica1\Practica06 se dispone de una serie de archivos gráficos del tipo JPG con los que puede probar los programas que se piden a continuación. Crea un subdirectorio dentro de G:\Informatica1\Practica06 llamado Ejercicio02 y dentro de él, guarde los siguientes ejercicios. EJERCICIO 2.1 Obtención del negativo de una imagen Construya un nuevo subdirectorio que se llame Ejercicio0201 y sitúe, como siempre, el directorio de trabajo de Matlab dentro. Realice una función cuyo encabezado sea: function negativo(archivo) Donde archivo es una cadena de caracteres con el nombre completo del archivo (incluida su extensión). Esta función debe abrir dos figuras, en la primera figura dibujará la imagen contenida en el archivo y en la segunda figura el negativo de la misma imagen. EJERCICIO 2.2 Superposición de dos imágenes Construya un nuevo subdirectorio que se llame Ejercicio0202 y sitúe, como siempre, el directorio de trabajo de Matlab dentro. Se trata de hacer un programa capaz de unir dos imágenes en una sola, utilizando una imagen como fondo y otra como imagen superpuesta. A su vez, la imagen que va a ser superpuesta tiene un fondo de color verde y el resto de la imagen tiene colores diferentes al color del fondo. En el directorio Q:\Informatica1\Practica06 dispone de dos archivos jpg para probar su función. Ambos archivos tienen el mismo número de píxeles. Realice una función en Matlab cuyo encabezado sea: function superposicion(archivo1,archivo2) Donde archivo1 es una variable para guardar una cadena de caracteres con el nombre completo del fichero jpg que se va a utilizar como imagen de fondo y archivo2 es el nombre completo del archivo que se va a utilizar como imagen superpuesta. Para ello debe escribir a continuación del encabezado de la función, las instrucciones necesarias para realizar las siguientes tareas: A) Lectura de los archivos pasados por el usuario para guardar las imágenes en sendas variables llamadas matriz_coloresA y matriz_coloresB. B) Transformación del formato de las dos hipermatrices cargadas (matriz_coloresA y matriz_coloresB) a números de tipo double y dividirlas por 255. C) Abrir una figura y dibujar la imagen contenida en matriz_coloresA encuadrada sobre la figura con igual escala para los píxeles horizontales y verticales. TECNUN 6ª Práctica. Matlab página 3 D) Abrir una figura y dibujar la imagen contenida en matriz_coloresB encuadrada sobre la figura con igual escala para los píxeles horizontales y verticales. E) Inicializar una hipermatriz a cero que tenga el mismo tamaño que las dos hipermatrices anteriores. Esta será quien contenga la imagen final, por lo que le vamos a llamar imagen_final. F) Recorrer píxel a píxel la hipermatriz llamada matriz_coloresB e identificar si el píxel en el que nos encontramos es más o menos verde. Para ello chequéese si el rojo es <0.3, el verde es >0.7 y el azul es <0.3. En caso afirmativo (es decir, si es verde), hay que rellenar el píxel de imagen_final con el de matriz_coloresA. En caso negativo (es decir, si no es verde) hay que rellenar al píxel de imagen_final con el de matriz_coloresB. G) Abrir una figura y dibujar la imagen contenida en la hipermatriz imagen_final encuadrada sobre la figura con igual escala para los píxeles horizontales y verticales (Figura 2.1a). (a) (b) Figura 2.1: Superposición de imágenes (a) e imagen rotada (b) EJERCICIO 2.3 Rotación de una imagen Ahora vamos a tratar de dibujar la imagen final pero rotada 180º (Figura 2.1b). Para ello debe añadir al programa que está desarrollando el código necesario para realizar las siguientes tareas: A) Inicializar otra hipermatriz a cero que tenga el mismo tamaño que el resto de hipermatrices anteriores. Esta será quien contenga la imagen final rotada 180 º, por lo que le vamos a llamar imagen_final180. B) Ahora deberá asignar en sentido contrario los píxeles de la hipermatriz imagen_final a la hipermatriz imagen_final180, de manera que el primer píxel de imagen_final sea el último píxel en imagen_final180, el segundo píxel sea el penúltimo; y así sucesivamente hasta que el último píxel de imagen_final sea el primero de imagen_final180. C) Abrir otra figura y dibujar la imagen contenida en imagen_final180 encuadrada sobre la figura con igual escala para los píxeles horizontales y verticales. Escuela Superior de Ingenieros de San Sebastián – Universidad de Navarra Informática 1 y Fundamentos de Computadores página 4 EJERCICIO 3. DERIVADA E INTEGRAL Crea un subdirectorio dentro de G:\Informatica1\Practica06 llamado Ejercicio03 y dentro de él, guarde los siguientes ejercicios. Realice una función en Matlab cuyo encabezado sea: function y=funcion(x) 3 Donde x es un número e y es el valor de la función matemática y=(xcos(x)) en el punto x. B) Realice una función en Matlab cuyo encabezado sea: function D=derivada(x) donde x es un número y D es el valor de la derivada numérica de funcion en el punto x con una constante de derivación k=0.001. D= funcion ( x + k ) − funcion ( x) k C) Realice una función en Matlab cuyo encabezado sea: function I=integracion(x0,x1) Donde I es el valor de la integración numérica de funcion entre los puntos x0 y x1 respectivamente, con un paso de integración k=0.001. I= x1− k ∑ funcion ( x) * k x= x0 D) Realice una función en Matlab cuyo encabezado sea: function dibujar(xi,xf). Esta función deberá abrir una gráfica y dibujar sobre ella lo siguiente: a) En azul: La función escrita en el fichero funcion.m entre los puntos xi y xf con un paso entre punto y punto de 0.1. b) En rojo: La derivada de la función entre los puntos xi y xf con un paso entre punto y punto de 0.1. c) En negro: El valor del área acumulada por la función desde xi hasta xf con un paso entre punto y punto de 0.1. TECNUN 6ª Práctica. Matlab página 5 Figura 3.1: Ejemplo del dibujo que realiza la función dibujar al pasarle como argumentos de entrada xi=-1 y xf=1. E) Realice una función en Matlab cuyo encabezado sea: function I=integracion2(x0,x1) Donde I es el valor de la integración numérica de funcion entre los puntos x0 y x1 respectivamente, con un paso de integración k=0.001. Sin embargo, el cálculo del área para la integración no va a realizarse como en el caso anterior, que era el caso que se presentó en clase y que se encuentra abajo a la izquierda, sino de una forma más exacta, que es la forma presentada abajo a la derecha, y que consiste en añadir al área del rectángulo el del triángulo superior. F) Añada a la función dibujar el código necesario para que abra una segunda figura y dibuje entre los puntos xi y xf con un paso entre punto y punto de 0.1 las gráficas de la integración mediante el primer método (integracion.m) y mediante el segundo método (integracion2.m) superpuestas en azul y rojo respectivamente. Escuela Superior de Ingenieros de San Sebastián – Universidad de Navarra