Documente Academic
Documente Profesional
Documente Cultură
José Hermenegildo Garcı́a Ortiz; Paula Aragón Periñán; Ángela Ganfornina Alcón
7 de diciembre de 2019
1. Introducción
Esta práctica tiene como objetivo introducir a los alumnos en el campo del procesado de imágenes, una
técnica muy utilizada en Mecánica de Fluidos experimental en particular, y cada vez mas presente en la
industria en general. Mediante esta práctica se pretende que los estudiantes desarrollen aquellas habilidades
de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomı́a indicada en
la competencia general CB5 en la ficha de la asignatura.
La práctica consistirá en realizar uno o varios script usando un software matemático (Matlab u Octave)
con el objetivo de analizar imágenes utilizando una serie de herramientas que se indicarán en las secciones
posteriores. El profesor evaluará esta práctica ejecutando el script de cada alumno usando unas fotos test
comprobando la funcionalidad del mismo.
2. Contenido
2.1. Formatos de las imágenes
En este espacio de trabajo, las imágenes se representan como matrices, cada elemento de la matriz
corresponderá a un pı́xel de la misma. El tipo de dato matriz, que contendrá una imagen puede ser de varios
tipos (según el tipo de dato de cada pixel):
double: Doble precisión, números en punto flotante que varı́an en un rango aproximado de -10308 a
10308 (8 bytes por elemento)
uint8: Enteros de 8 bits en el rango de [0,255] (1 byte por elemento)
1
Imágenes BINARIAS: cada pixel asume uno de los dos unicos valores discretos (1 o 0) y se almacena
como una matriz numérica BW
El código de la figura devolverá 3 imágenes en distintas ventanas, cada imagen nombradas como ’A’, ’IBG’
y ’BW’ aparecerán como la imagen original, imagen en escala de grises y en binario, respectivamente.
3. Procedimiento
3.1. Tratamiento de imágenes
El tratamiento de imagenes sirve para detectar aspectos especı́ficos de una imagen. Se precisa de ciertos
factores para la realización del análisis. Los primeros pasos son básicamente los explicados en el apartado
anterior. Se parte de una imagen a color, la cual cargamos con el comando ’imread ’, para luego pasarla a
una imagen en escala de grises (’rgb2gray’) y por último pasar la imagen a binario. Como se ha comentado
ya, la obtención de dicha imagen se hará a partir de la siguiente forma:
BW = im2bw(I, level)
Esto convierte la imagen en escala de grises en imagen binaria, reemplazando todos los pı́xeles de la
imagen de entrada con mayor luminosidad con el valor blanco y reemplazando todos los demás pı́xeles por
el valor negro. Cuando un tono es considerado luminoso o no es bastante relativo, por tanto se utilizará un
valor de intensidad medio, level=0.5. Este nivel se puede variar y observar qué sucede.
Esta binarización tiene como caracterı́stica que sus pixeles están únicamente entre 1 y 0, lo que permite
un procesamiento de la imagen más rápido y eficaz [2].
2
3.2. Reconocimiento o detección de bordes
En esta actividad se utilizará detección de bordes mediante el operador LoG,en Matlab la función que
detecta bordes es edge. El operador LoG es una composición del operador diferencial de segundo orden
Laplaciano δ 2 (∆) y de un Kernel gaussiano G. Esta función encuentra los bordes de una imagen de distintos
niveles de intensidad. Los bordes no son mas que variaciones fuertes de la intensidad que corresponden a las
fronteras de los objetos visualizados. El resultado es una imagen binaria del mismo tamaño que la imagen
original en la cual, “1” significa que ha detectado un borde y “0” es que no lo ha detectado.
El borde en sı́ puede tener ruido, por lo que será necesaria una suavisación de la imagen para que no se
sobredetecten los bordes.
Figura 2
Una vez se tiene la imagen suavizada, se pasa a escala de grises, y es a esa imagen a la que se le
aplicará la función de detección de bordes. Como se ha comentado anteriormente, se utilizará el operador
LoG(”Laplacian of gaussian”), el cual se implementrá en la función.
3
Existen varias funciones para la detección de bordes, insertando la función help edge, el programa ofrece
los ditintos filtros que se tienen a disposición para la obtenicón de bordes, por si se necesitase una resolución
mejorada.
(c) imagen en escala de grises (rgb2gray) (d) Imagen con reconocimiento de bordes con algo-
ritmo LoG (edge)
En primer lugar se debe cargar la imagen que se desea estudiar, a continuación se transforma dicha
imagen a binaria, es decir, que solo tome los valores de 0 y 1 .
Finalmente para la identificación y etiquetado de objetos presentes en la imagen, para ello:
El cálculo de áreas de objetos puede ser interesante cuando se detectan manchas en la imagen filtrada.
Como lo que realmente se necesita son los bordes de las imágenes, los pequeños puntos que aparezcan podrı́an
entorpecer la visualización de los bordes reales. La eliminación de estos puntos indeseados puede realizarse
mediante la detección de estos con la ayuda del cálculo de área y la cantidad de pı́xeles, es decir, estos tendrán
4
áreas muy pequeñas y ocuprán muy pocos pı́xeles, por lo que resultará relativamente sencillo detectarlos
para luego proceder a su eliminación y ası́ obtener una imagen más limpia.
4. Otras funciones
En esta sección se nombrarán algunas funciones de interés:
bwconncomp: Devuelve los componentes conectados encontrados en la imagen binaria. utiliza una
conectividad predeterminada de 8 para dos dimensiones, 26 para tres dimensiones.
Determine cuál es el componente más grande en la imagen. Para ello, en primer lugar hay
que encontrar el número de componentes conectados en la imagen.(mirar en command window lo que
devuelve esta función), seguidamente se obtiene el número de pı́xeles por comulamna de la matriz de
la imagen, para luego localizar la columana con mayor número de pı́xeles.
Borrar el componente más grande la la imagen. Fijar los valores de los pı́xeles del componente como
0.[4]
bwareaopen(X, Y, 8)
Donde ’X’ es el nombre de la imagen que se pasa para filtrar e ’Y’ es el tamaño del área que se quiere
borrar.
5
5. Detección de bordes-Algortimo de Canny
La función aplicada para la detección de bordes ha sido LoG, pero como se ha comentado, existen otras
funciones para la detección de bordes. En este apartado se hablará del algoritmo de Canny.
El método de Canny utiliza un filtro basado en la primera derivada de un Kernel gaussiano G, donde
luego permite discriminar los valores en que el gradiente no es máximo local, por lo que se debe a variaciones
ruidosas de la intensidad de pixel, de esta manera se logran mejores resultados que el operador de LoG o
sólo utilizar operadores como Sobel, Prewitt o Roberts.
6. OCTAVE
”GNU Octave es un lenguaje de alto nivel, destinado principalmente a cálculos numéricos. Proporciona
una interfaz de lı́nea de comandos conveniente para resolver problemas lineales y no lineales numéricamente,
y para realizar otros experimentos numéricos utilizando un lenguaje que es principalmente compatible con
Matlab. También se puede usar como un lenguaje orientado a lotes.” [3]
El funcionamiento es bastante similiar al utlizado en matlab. Los códigos para cargar y visualizar imáge-
nes son los mismos tratados en los apartados anteriores.
6
Figura 9: Código para cargar y visualizar una imagen en Octave
Para funciones más complejas, como la de detectar bordes, es probable que el paquete necesario no esté
instalado, por lo que la función no compilará. La solución es buscar y descargar los paquetes que nos permitan
trabajar con funciones como ’edge’.
7. Cuestiones a resolver
1. Comprobar en matlab el reconocimeinto y detección de bordes con el algoritmo LoG de una imagen.
2. Aplicar a la misma imagen el algoritmo de Canny y comparar con el resultado anterior.
8. Entregable en pdf
El documento a entregar en pdf será del formato entregable (indicado en las prácticas). Para la respuesta
a cada una de las cuestiones se debe añadir al pdf el código utilizado para obtener la solución, ası́ como la
explicación del mismo.
9. Contenido extra
En esta práctica, el contenido extra se obtendrá por la aplicación de algún tipo de función de búsqueda
en subpixel aplicado a la imagen elastic X.
En el archivo .pdf se deberá crear una sección donde se responda a esta cuestión, además del código
utilizado y su explicación.
Referencias
[1] mathworks, Trabajar con imágenes en gráficos MATLAB,
https://es.mathworks.com/help/matlab/creating_plots/working-with-images-in-matlab-graphics.
html