Procesamiento Digital de Imagenes

2012 Procesamiento Digital de Imágenes Memorias de las prácticas Recopilación y explicaciones de las prácticas realizad

Views 138 Downloads 1 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

2012

Procesamiento Digital de Imágenes Memorias de las prácticas Recopilación y explicaciones de las prácticas realizadas en la asignatura

José Manuel Serrano Mármol (jmsm0011) 09/02/2012

Procesamiento Digital de Imágenes

Ingeniería Informática

ÍNDÍCE Introducción .................................................................................................................................. 2 Práctica 1: Introducción a Matlab ................................................................................................. 3 1)

Ejercicio 1 - Código Fuente - distancia3D.m...................................................................... 3

2)

Ejercicio 2 - Código Fuente - promedioMatriz.m .............................................................. 4

3)

Ejercicio 3 - Código Fuente - maxMin.m ........................................................................... 4

Práctica 2: Introducción a GUI’s en Matlab................................................................................... 6 1)

Ejercicio 1 – Código fuente - CalculadoraGUI.m ............................................................... 6

Práctica 3: Manipulación de imágenes ......................................................................................... 9 1)

Ejercicio 1 - Código Fuente -NivelGrisPosicion.m ............................................................. 9

2)

Ejercicio 2 - Código Fuente -PromedioNivelesGris.m...................................................... 10

3)

Ejercicio 1 - Código Fuente - SubImagen.m .................................................................... 11

Práctica 4: Muestreo e interpolación de imágenes .................................................................... 13 1)

Ejercicio 1 - Código Fuente - TranformNivelGris.m ......................................................... 13

2)

Ejercicio 2 - Código Fuente - Submuestrea.m ................................................................. 14

3)

Ejercicio 3 - Código Fuente - ErrorCuadratico.m ............................................................. 16

4)

Ejercicio 4 - Código Fuente – InterpolacionLinealImg.m................................................. 18

Práctica 5: Convolución y Correlación de imágenes ................................................................... 21 1)

Ejercicio 1 - Código Fuente - convolucion.m ................................................................... 21

2)

Ejercicio 2 - Código Fuente - correlacion.m .................................................................... 22

Práctica 6: Mejora de la imagen.................................................................................................. 24 1)

Ejercicio 1 - Código Fuente – fraccionamiento.m ........................................................... 24

2)

Ejercicio 2 - Código Fuente - tPolinomial.m .................................................................... 26

3)

Ejercicio 3 - Código Fuente - filtroMedia.m .................................................................... 27

4)

Ejercicio 1 - Código Fuente - filtroMediana.m ................................................................ 29

Apéndice: Interfaz gráfica ........................................................................................................... 31

1

Procesamiento Digital de Imágenes

Ingeniería Informática

Introducción Esta memoria pretende recoger todos los ejercicios y actividades prácticas que se han realizado en la asignatura, pretendiendo dar las indicaciones de cómo se a realizado cada una de las actividades, las decisiones de diseño que se han tomado y ejemplos de cómo utilizar cada una de las funciones. Este documento no contiene el código fuente (salvo algunas reseñas), ya que éste se entrega junto a esta documentación. El código fuente esta comentado y contiene (a especie de documentación doxygen de C) descripción, parámetros a utilizar y lo que devuelve cada función. Además se ha construido una interfaz gráfica que recoge los ejercicios realizados. A continuación se procede al desarrollo de la propia memoria de cada una de las prácticas realizadas a lo largo del cuatrimestre.

2

Procesamiento Digital de Imágenes

Ingeniería Informática

Práctica 1: Introducción a Matlab 1) Ejercicio 1 - Código Fuente - distancia3D.m Diseñar una función para el cálculo de la distancia euclídea entre 2 puntos de un espacio 3D. Apóyate en al menos 2 subfunciones para su implementación. En primer lugar, para abordar entre problema, es conocer la función para el cálculo de la distancia euclídea entre dos puntos en 3D: 𝒅𝒊𝒔𝒕𝒂𝒏𝒄𝒊𝒂 = √(𝒙𝒂 − 𝒙𝒃 )𝟐 + (𝒚𝒂 − 𝒚𝒃 )𝟐 + (𝒛𝒂 − 𝒛𝒃 )𝟐 El programa realizado se apoya en dos funciones: 

Primera subfunción:

Calcula la raíz cuadrada de un número. 

Segunda subfunción:

Calcula el cuadrado de un número. La función principal (distancia3D) realiza un bucle que va acumulando el cuadrado de las restas y posteriormente se calcula la raíz cuadrada de dicha acumulación, siendo este el resultado final. En cuanto al uso de la función:   

Nombre: distancia3D Parámetros de entrada: Dos puntos, es decir, dos vectores de 3 posiciones Parámetros de salida: Valor de la distancia

Ejemplos:

Ilustración 1: Función distancia3D

3

Procesamiento Digital de Imágenes

Ingeniería Informática

2) Ejercicio 2 - Código Fuente - promedioMatriz.m Diseñar una función que permita conocer el promedio de los valores contenidos en una matriz pasada como argumento. La función realizada, en primer lugar toma el tamaño de la matriz (m x n), posteriormente acumula en una variable (suma) la suma de todos los elementos de la matriz mediante dos bucles. Por último realiza el promedio y lo devuelve. En cuanto al uso de la función:   

Nombre: promedioMatriz Parámetros de entrada: una matriz Parámetros de salida: el valor promedio

Ejemplos:

Ilustración 2: Función promedioMatriz

3) Ejercicio 3 - Código Fuente - maxMin.m Diseñar un algoritmo para determinar, dada una matriz, el máximo de los elementos que sean los mínimos de su columna. El algoritmo o función realizada, en primer lugar, toma el tamaño de la matriz (m x n), posteriormente se declara un vector cuya longitud es igual a número de columnas que tiene la matriz, el cual va a servir para almacenar el mínimo de cada columna. Ahora pasamos a buscar el mínimo de cada columna y a almacenarlo en el vector anterior. Por último se devuelve el valor máximo de vector de mínimos.

4

Procesamiento Digital de Imágenes

Ingeniería Informática

En cuanto al uso de la función:   

Nombre: maxMin Parámetros de entrada: una matriz Parámetros de salida: el valor máximo de los elementos mínimos de las columnas

Ejemplos:

Ilustración 3: Función maxMin

5

Procesamiento Digital de Imágenes

Ingeniería Informática

Práctica 2: Introducción a GUI’s en Matlab 1) Ejercicio 1 – Código fuente - CalculadoraGUI.m Diseño de una calculadora con interfaz gráfica que implemente las operaciones aritméticas básicas. En primer lugar vamos a ver la interfaz como se ha desarrollado y de que funciones hemos dotado a la calculadora realizada. 

Componentes de la interfaz: o Un visor Componente Static Text o Teclado numérico del 0 – 9  Componentes Push Button o Operaciones aritméticas (suma, resta, multiplicación y división) Componentes Push Button o Bloque de borrado, compuesto por las teclas AC (borrado completo del visor) y DEL (borrado carácter a carácter)  Componentes Push Button

Acontinuación podemos ver como nos queda la interfaz de la calculadora:

Ilustración 4: Calculadora GUI



Propiedades de los objetos y funciones Callback:

Para cada uno de los botones se le ha cambiado una serie de propiedades desde del inspector de elementos. Principalmente se le ha cambiado las siguientes propiedades:    

BackgroundColor: Cambio de color de fondo de los componentes FontSize: Cambio del tamaño de letra FontWeight: Cambiamos la letra a negrita (bold) Tag: Para cambiar el nombre del metodo Callback. Los números ha sido llamados como botonNumero* siendo el asterisco el numero de cada boton. Los operadores 6

Procesamiento Digital de Imágenes

Ingeniería Informática

has sido llamados como operación* siendo el asterisco la operación que representa (Ej: operacionSuma).Por último, el botón AC ha sido llamado como botonBorrado y el botón DEL como botonBorrarCaracter. Ahora pasamos a ver lo más importante, la implementación del código asociado a cada función Callback de cada uno de los componentes: 

Teclado numérico 0-9 y los botones de las operaciones aritméticas. Las funciones ha sido implementadas de la siguiente manera:

o o

o o 

Extraemos lo que hay en el visor Realizamos una breve comprobación de que si la cadena que hay en el visor es un cero (ya que el visor muestra al empezar o al borrar 0) lo eliminamos, ya que queda muy antiestético ceros a las izquierda de un número. Concatenemos el número del botón a la cadena extraída anteriormente. Por último ponemos en el visor la cadena resultante

Botón de resultado (=). La función Callback asociada al botón de igual es la que evalúa la expresiones del visor para dar el resultado:

o o o o

Extraemos la expresión del visor Calculamos el resultado con la función eval() que nos proporciona Matlab El resultado obtenido lo ponemos en el visor. En esta función he utilizado captación de excepciones, ya que si el resultado de evaluar la expresión o es correcto emitimos un mensaje de error al visor (ERROR: Operación invalida!)

7

Procesamiento Digital de Imágenes 

Botón de borrado total (AC). Al pulsar este botón borramos el visor y lo ponemos a 0. La función Callback que implementa esta funcionalidad es la siguiente:

o 

Simplemente ponemos a cero el contenido del visor

Botón de borrado parcial (DEL). Al pulsar este botón borramos el último carácter escrito. La función Callback que implementa esta funcionalidad es la siguiente:

o o o o



Ingeniería Informática

Extraemos la expresión del visor Ponemos el último elemento a espacio Eliminamos los espacios con la función deblank() que nos proporciona Matlab Posteriormente comprobamos si la cadena la hemos eliminado completamente para poner en el visor un 0, sino la ponemos tal cual

Ejemplos:

Ilustración 5: Operación aritmética correcta

Ilustración 6: Resultado de la operación

8

Procesamiento Digital de Imágenes

Ingeniería Informática

Ilustración 7: Operación incorrecta

Ilustración 8: Error por operación incorrecta

Práctica 3: Manipulación de imágenes 1) Ejercicio 1 - Código Fuente -NivelGrisPosicion.m Diseñar una función en Matlab capaz de devolver el nivel de gris de una posición dada de la imagen Esta función, como indica el enunciado, solamente accede a la posición indicada (pixel) devolviendo su valor de nivel de gris, teniendo en cuenta si son unas coordenadas correctas. Antes de pasar a comentar la función indicamos su uso:  



Nombre: NivelGrisPosicion Parámetros de entrada: o nombre_imagen: Ruta donde se encuentra la imagen o x: Coordenada x del pixel que queremos acceder o y: Coordenada y del pixel que queremos acceder Parámetros de salida: o nivel: Nivel de gris del pixel seleccionado (Escala de 256 niveles)

La función consiste principalmente en la comprobación de que las coordenadas pasadas estén dentro del rango de la imagen, es decir x ϵ [1, Width] e y ϵ [1, Height]. Si no es así se lanza un error con la función error (‘Cadena de error’). Si las coordenadas son correctas se accede a la imagen con la función imread() obteniendo la matriz y finalmente se acede con los índices al valor de la matriz indicado por las coordenadas.

9

Procesamiento Digital de Imágenes

Ingeniería Informática

Ejemplos:

Ilustración 9: Función NivelGrisPosicion

2) Ejercicio 2 - Código Fuente -PromedioNivelesGris.m Diseñar una función en Matlab capaz de devolver el valor promedio de los niveles de gris de una imagen Antes de pasar a describir como se ha realizado esta función, veamos su uso:   

Nombre: PromedioNivelesGris Parámetros de entrada: o nombre_imagen: Ruta donde se encuentra la imagen Parámetros de salida: o promedio: Media aritmética realizada como la suma de todos los coeficientes dividida entre el número de elementos totales

Para realizar esta función primeramente hemos obtenido la información de la imagen (imfinfo()) y para saber las dimensiones de la imagen, es decir el objetivo es obtener el número total de los elementos haciendo Width x Height. Finalmente usamos la función sum() que nos ofrece Matlab para realizar la suma de todos los elementos. Esta función es mucho más eficiente que realizar dos bucles para recorrer la matriz. Cuando realizamos sum() de una matriz, esta función nos devuelve un vector resultado de sumar cada una de las columnas de la matriz, si a su vez le aplicamos al vector resultante la misma función obtenemos la suma total de los elementos de la matriz. Ya solo queda dividirlo entre el número de elementos y ya obtenemos el promedio.

10

Procesamiento Digital de Imágenes

Ingeniería Informática

Ejemplos:

Ilustración 10: Función PromedioNivelesGris

3) Ejercicio 1 - Código Fuente - SubImagen.m Diseñar una función en Matlab capaz de extraer y visualizar una subimagen a partir de las coordenadas pasadas como argumento Para realizar este ejercicios, tal y como dice el enunciado tenemos que extraer una subimagen de la imagen original. Para tal fin la función realizada coge el punto superior izquierdo y el punto inferior derecho. Antes de continuar con la explicación de la implementación veamos el uso de la función:  



Nombre: SubImagen Parámetros de entrada: o nombre_imagen: Ruta de la imagen o ox: Coordenada x superior izquierda o oy: Coordenada y superior izquierda o dx: Coordenada x inferior derecha o dy: Coordenada y inferior derecha Parámetros de salida: o subImg: Matriz de niveles de gris de la subimagen

Ahora nos centramos en la descripción de la implementación de la función. En primer lugar comprobamos que las coordenadas estén en los rangos correctos. Si no es así se emite un error (error (‘Coordenadas incorrectas’)). Posteriormente comprobamos que las coordenadas no estén cruzadas, es decir que el primer punto sea el superior izquierda y el segundo punto sea el inferior derecho (en caso incorrecto se lanza un nuevo error). Una vez comprobado esto pasamos a procesar la imagen. Calculamos las dimensiones de la subimagen como:  

filas =dy –oy columnas = dx –ox

Posteriormente declaramos la submatriz con las dimensiones halladas anteriormente, leemos la imagen y extraemos la submatriz de la siguiente manera: 11

Procesamiento Digital de Imágenes

Ingeniería Informática

subImg(1:filas,:) = imagenOriginal(oy:oy+filas-1,ox:ox+columnas-1);

Como podemos ver en una sola instrucción extraemos la submatriz sin ningún bucle, esto hace que sea muy eficiente.

Ejemplos: Visualizamos la imagen original. He señalado los puntos los cuales vamos a sacar la subimagen.

Ilustración 11: Imagen original. Indicación de la subimagen a extraer

12

Procesamiento Digital de Imágenes

Ingeniería Informática

Ejecutamos la función y vemos el resultado:

Ilustración 12: Extracción de una subimagen

Práctica 4: Muestreo e interpolación de imágenes 1) Ejercicio 1 - Código Fuente - TranformNivelGris.m Diseñar una función en Matlab capaz de transformar una imagen en color a una imagen de niveles de grises Como indica en enunciado esta función realiza una conversión de una imagen en color (RGB) a una imagen en escala de grises. Este proceso se pude realizar de varias formas:   

Cogiendo una de las componentes de la imagen, es decir nos quedamos con la componente R, G o B. Realizando la media de las componen Realizando el análisis de componentes principales de la imagen (aplicando Hotelling);

De todas estas opciones, la que da peores resultados es la primera y la que da mejores resultados la última. Esta función ha sido implementada realizando la media de las componentes de la imagen, que no siendo la mejor solución es bastante aceptable.

13

Procesamiento Digital de Imágenes

Ingeniería Informática

Antes de continuar con la explicación de la implementación veamos el uso de la función:   

Nombre: TransformNivelGris Parámetros de entrada: o rutaImg: Ruta donde se encuentra la imagen que se desea transformar Parámetros de salida: o matrizGris: Matriz asociada a imagen en escala de grises

En cuanto a la implementación de la función, simplemente sumamos las matrices de las componentes y dividimos cada uno de los elementos resultantes de la suma entre 3. La forma de hacerlo si bucles es la siguiente: matrizGris = ( double(matriz(:,:,1)) + double(matriz(:,:,2)) + double(matriz(:,:,3)) ) ./3.0 ; Ejemplo:

Ilustración 13: Transformación RGB - Escala de Grises

2) Ejercicio 2 - Código Fuente - Submuestrea.m Diseñar una función en Matlab capaz de submuestrear una imagen cada 2x2 y cada 4x4 píxeles. Para la realización de esta función de nuevo tenemos varias posibles opciones:  

Emborronar cada 2x2 o cada 4x4 píxeles Tomar uno de cada 2x2 o 4x4

Aquí se ha optado por la segunda opción por razones de eficiencia. Por lo tanto, antes de pasar a ver la implementación de la función pasaremos a ver el uso de esta:

14

Procesamiento Digital de Imágenes  



Ingeniería Informática

Nombre: Submuestra Parámetros de entrada: o matriz: matriz que contiene la imagen a submuestrear. No se ha indicado la ruta de la imagen por razones de la interfaz gráfica realizada (para no estar constantemente haciendo imread, ya que leyendo una imagen podemos hacer distintas operaciones sobre ella). Parámetros de salida: o muestra2: matriz con la imagen submuestreada dada 2x2 píxeles o muestra4: matriz con la imagen submuestreada dada 4x4 píxeles

En cuanto a la implementación de esta función, nos apoyamos en dos subfunciones (aunque se podía hacer en una sola perfectamente) para dejar muy claro lo que se intenta hacer. Una de las subfunciones submuestrea la imagen cada 2x2 píxeles y la otra cada 4x4 píxeles. Como hemos dicho cada tantos píxeles nos vamos a quedar con uno de ellos. Esto podemos hacerlo en Matlab muy eficientemente de la siguiente manera: Muestra = matrizImgOriginal ( 1 : 2 : end , 1 : 2 : end) %En el caso de submuestrear 2x2 Muestra = matrizImgOriginal ( 1 : 4 : end , 1 : 4 : end) %En el caso de submuestrear 4x4 Ejemplos:

Ilustración 14: Submuestra 2x2 imagen de 512x512 pixeles

15

Procesamiento Digital de Imágenes

Ingeniería Informática

Ilustración 15: Submuestra 4x4 imagen de 512x512 pixeles

3) Ejercicio 3 - Código Fuente - ErrorCuadratico.m Diseñar una función en Matlab capaz de realizar el error cuadrático medio para comparar dos imágenes. La realización de esta función es muy simple solamente tenemos que aplicar la siguiente fórmula:

Siendo:    

A la matriz asociada a una de las imágenes B la matriz asociada a la otra imagen M el número de filas de las imágenes N el número de columnas de las imágenes

16

Procesamiento Digital de Imágenes

Ingeniería Informática

Una vez que sabemos esto solamente queda implementar la formula. Veamos el uso de la función:  



Nombre: ErrorCuadratico Parámetros de entrada: o rutaImg1: Ruta donde se encuentra la primera imagen o rutaImg2: Ruta donde se encuentra la segunda imagen Parámetros de salida: o errorC: Error cuadrático medio obtenido

Ejemplo: Vamos a ver un ejemplo del error cuadrático medio cometido al submuestrear (2x2) una imagen de 512x512. El resultado nos da una imagen de 256x256 que compararemos con la misma imagen pero de 256x256.

Ilustración 16: Error cuadrático medio en imagen submuestreada

17

Procesamiento Digital de Imágenes

Ingeniería Informática

4) Ejercicio 4 - Código Fuente – InterpolacionLinealImg.m Diseñar una función en Matlab capaz de realizar una interpolación lineal en una imagen (x2 o x4) Esta función hace la acción contraria a la de submuestrear. Para comprender como se ha realizado esta función lo explicaremos muy gráficamente. 

En primer lugar, teniendo la imagen a interpolar y el tamaño (x2 o x4), declararemos una matriz con el tamaño final.



Posteriormente ponemos los pixeles de la imagen original sobre la interpolada

18

Procesamiento Digital de Imágenes

Ingeniería Informática



Ahora interpolamos por filas



Ahora interpolamos por columnas para obtener la imagen final

Este es el proceso seguido para realizar la interpolación lineal de una imagen. Ahora veremos el uso de la función:  



Nombre: InterpolacionLinealImg Parámetros de entrada: o matriz: Matriz asociada a la imagen que queremos interpolar (no se ha usado la ruta de la imagen por comodidad de la interfaz gráfica). o ampliación: Este parámetro indica si la interpolación es x2 o x4 (indicando un 2 o 4 como parámetro). Parámetros de salida: o imagen: Matriz asociada a la imagen resultado de la interpolación

19

Procesamiento Digital de Imágenes

Ingeniería Informática

Ejemplos:

Ilustración 17: Imagen 128x128 interpolada x2

Ilustración 18: Imagen 128x128 interpolada x4

20

Procesamiento Digital de Imágenes

Ingeniería Informática

Práctica 5: Convolución y Correlación de imágenes 1) Ejercicio 1 - Código Fuente - convolucion.m Diseñar una función en Matlab capaz de realizar la convolución La convolución de una imagen se define como:

Donde h es el núcleo de convolución que se desea aplicar, f la imagen original de la cual partimos y g la imagen resultado. Para la aplicación de esta operación se han tomado las siguientes decisiones de diseño:   

El núcleo debe ser impar, cuadrado y se admite de cualquier tamaño. El centro del núcleo es el que coincide con el pixel a procesar. Al procesar los bordes de la imagen, los elementos del núcleo que queden fuera de la imagen se han procesado como si los pixeles de la imagen fuesen cero.

El uso de la función es el siguiente:  



Nombre: correlacion Parámetros de entrada: o rutaImagen: ruta donde se encuentra la imagen o nucleo: matriz que contiene el núcleo de convolución Parámetros de salida: o resultado: Matriz asociada a la imagen resultado de hacer la convolución

En la implementación, cada uno de los pixeles de la imagen los hacemos coincidir con el centro del núcleo de convolución elegido. Entonces realizamos una sumatoria de la multiplicación de cada uno de los pixeles del núcleo con los pixeles de la imagen (multiplicamos los píxeles de igual color, tal y como muestra la figura) tal que así:

21

Procesamiento Digital de Imágenes

Ingeniería Informática

Como podemos ver esto equivale a rotar el núcleo de convolución 180° y a superponer el núcleo de convolución sobre la imagen, multiplicando cada celda por la inferior y sumar los productos. Ejemplo: Aplicaremos un núcleo de realce de bordes.

Ilustración 19: Convolución - Núcleo detección de bordes

2) Ejercicio 2 - Código Fuente - correlacion.m Diseñar una función en Matlab capaz de realizar la correlación La correlación de una imagen se define como:

Donde h es el núcleo de convolución que se desea aplicar, f la imagen original de la cual partimos y g la imagen resultado. Para la aplicación de esta operación se han tomado las siguientes decisiones de diseño: 22

Procesamiento Digital de Imágenes   

Ingeniería Informática

El núcleo debe ser impar, cuadrado y se admite de cualquier tamaño. El centro del núcleo es el que coincide con el pixel a procesar. Al procesar los bordes de la imagen, los elementos del núcleo que queden fuera de la imagen se han procesado como si los pixeles de la imagen fuesen cero.

El uso de la función es el siguiente:  



Nombre: correlacion Parámetros de entrada: o rutaImagen: ruta donde se encuentra la imagen o nucleo: matriz que contiene el núcleo de convolución Parámetros de salida: o resultado: Matriz asociada a la imagen resultado de hacer la convolución

En la implementación, cada uno de los pixeles de la imagen los hacemos coincidir con el centro del núcleo de convolución elegido. Entonces realizamos una sumatoria de la multiplicación de cada uno de los pixeles del núcleo con los pixeles de la imagen (multiplicamos los píxeles de igual color, como se muestra en la figura) tal que así:

El proceso seguido es superponer el núcleo de convolución sobre la imagen y multiplicar cada celda por la inferior y sumar los productos.

Como podemos observar la diferencia con la convolución es la forma en la que combinamos los pixeles.

23

Procesamiento Digital de Imágenes

Ingeniería Informática

Ejemplo: Realizaremos la correlación con un núcleo de alisado:

Ilustración 20: Correlación - Núcleo de alisado

Práctica 6: Mejora de la imagen 1) Ejercicio 1 - Código Fuente – fraccionamiento.m Diseñar una función en Matlab capaz de realizar el fraccionamiento de niveles de gris de una imagen Con esta técnica lo que pretendemos es realzar un determinado rango de niveles de gris de una imagen. Para la realización de la función se ha optado por llevar al nivel 255 (blanco) los pixeles que se encuentre dentro del rango definido. Los pixeles fuera del rango los ponemos en el nivel 0 (negro). Por lo tanto obtendremos una imagen binaria.

24

Procesamiento Digital de Imágenes

Ingeniería Informática

El uso de la función es el siguiente:  



Nombre: fraccionamiento Parámetros de entrada: o rutaImagen: ruta donde se encuentra la imagen o rInf: Límite inferior del rango a procesar o rSup: Límite superior del rango a procesar Parámetros de salida: o resultado: Matriz asociada a la imagen resultado de hacer el fraccionamiento

Ejemplo: Aplicaremos la técnica para realzar el agua del puerto de la imagen.

Ilustración 21: Fraccionamiento en el rango 0 - 60

25

Procesamiento Digital de Imágenes

Ingeniería Informática

2) Ejercicio 2 - Código Fuente - tPolinomial.m Diseñar una función en Matlab capaz de realizar una transformación polinomial a una imagen Con la aplicación de este método lo que pretendemos es realizar una modificación del contraste de la imagen. Además este tipo de transformaciones son no lineales, ya que se realizan con un polinomio de la siguiente forma: T(r) = (ar + b) ^p Siendo a y b los parámetros que define el polinomio y p el grado del polinomio. Sabiendo lo anterior definamos el uso de la función:  



Nombre: tPolonomial Parámetros de entrada: o rutaImagen: Ruta donde se encuentra la imagen o a: Parámetro del polinomio o b: Parámetro del polinomio o p: Grado del polinomio Parámetros de salida: o resultado: Matriz asociada a la imagen resultado aplicar la transformación polinomial

Ejemplo: Vamos a realizar una transformación polinomial con el siguiente polinomio:

 1  T (r )   r  0   20 

3

Vemos visualmente la representación de esta función:

Ilustración 22: Polinomio a utilizar en la transformación polinomial

26

Procesamiento Digital de Imágenes

Ingeniería Informática

El resultado de aplicar este polinomio de grado 3 a la imagen es:

Ilustración 23: Transformación polinomial - polinomio de grado 3

3) Ejercicio 3 - Código Fuente - filtroMedia.m Diseñar una función en Matlab capaz de aplicar filtrado de media En este ejercicio nos proponemos realizar un filtrado de media. Este proceso es equivalente a decir que vamos a realizar un filtrado de paso bajo para eliminar las altas frecuentes (ruido). Para ello realizaremos la convolución de la imagen proporcionada con un núcleo de convolución de media, es decir el valor de cada pixel se obtiene promediando los valores de intensidad del entorno de vecindad del pixel que estamos procesando. Este proceso realizará un emborronamiento y alisamiento en la imagen tratada.

27

Procesamiento Digital de Imágenes

Ingeniería Informática

El uso de la función es el siguiente:  



Nombre: filtroMedia Parámetros de entrada: o rutaImagen: Ruta donde se encuentra la imagen o tamaNucleo: Tamaño del núcleo de media utilizado Parámetros de salida: o resultado: Matriz asociada a la imagen resultado aplicar el filtrado de media

La implementación de esta función se ha llevado acabo apoyándonos un las siguientes funciones de Matlab:



fspecial('average',[tamaNucleo,tamaNucleo]) – Con esta función obtenemos un filtro de media del tamaño indicado



imfilter(img,filtro) – Con esta función aplicamos el filtro de media a la imagen

Ejemplos:

Ilustración 24: Imagen original con ruido

Ilustración 25: Filtrado de media 3

Ilustración 26: Filtrado de media - 5

28

Procesamiento Digital de Imágenes

Ingeniería Informática

4) Ejercicio 1 - Código Fuente - filtroMediana.m Diseñar una función en Matlab capaz de aplicar filtrado de mediana En ejercicios nos proponemos realizar un filtrado de mediana. Este proceso es de mayor calidad que el de la media y respeta bastante más los bordes de la imagen sin llegar a emborronarlos tanto. El uso de la función es el siguiente:  

Nombre: filtroMediana Parámetros de entrada: o rutaImagen: Ruta donde se encuentra la imagen o tamaNucleo: Tamaño del núcleo de media utilizado Parámetros de salida: o resultado: Matriz asociada a la imagen resultado aplicar el filtrado de mediana



La implementación de esta función se ha llevado acabo apoyándonos un la siguiente funcion de Matlab: 

medfilt2(img,[tamaNucleo,tamaNucleo]) – Realiza un filtrado de mediana. Esta función obtiene el filtro y lo aplica a la imagen, todo en la misma función.

Ejemplos:

Ilustración 27: Imagen Original con ruido

Ilustración 28: Imagen con filtrado de mediana – 3

29

Procesamiento Digital de Imágenes

Ingeniería Informática

Ilustración 29: Filtrado de mediana - 5

30

Procesamiento Digital de Imágenes

Ingeniería Informática

Apéndice: Interfaz gráfica He realizado una interfaz gráfica para agrupar todas las prácticas realizadas durante el cuatrimestre en la asignatura. Todas las funciones descritas en los apartados anteriores las podemos ejecutar de dos formas: 1. Mediante la Command Window de Matlab. Especificamos la función con los parámetros descritos y obtendremos el resultado. 2. Mediante la interfaz gráfica realizada. En la carpeta Interfaz se encuentra el fichero GUI.m el cual contiene la interfaz grafica. Si ejecutamos este fichero nos encontraremos con los siguiente:

Ilustración 30: GUI de las prácticas

Como podemos ver tenemos un menú con botones y un panel donde mostrar información. Cada uno de los botones (del menú) corresponde a cada una de las prácticas realizadas.

31

Procesamiento Digital de Imágenes

Ingeniería Informática

Simplemente tener en cuenta que para su uso correcto tendremos que añadir todos los directorios y subdirectorios de las prácticas realizadas en Matlab de la siguiente manera: 1. Añadimos el directorio que contiene todas las prácticas y la interfaz:

2. Seleccionamos todas las carpetas y las añadimos a Matlab para que a la hora de buscar las funciones e imágenes las tenga en cuenta:

32