Sunteți pe pagina 1din 7

PRÁCTICA INDIVIDUAL 2- PROCESADO DE IMÁGENES.

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)

uint16: Enteros de 16 bits en el rango de [0, 65535] (2 bytes por elemento)


uint32: Enteros de 32 bits en el rango de [0, 4294967295] (4 bytes por elemento)
int8: Enteros de 8 bits en el rango de [-128, 127] (1 byte por elemento)
int16: Enteros de 16 bits en el rango de [-32768, 32767] (2 bytes por elemento)

int32: Enteros de 32 bits en el rango de [-2147483648,2147483647] (4 bytes por elemento)


logical:Los valores son 0 ó 1 (1 bit por elemento)

2.2. Tipos de imágenes


Dependiendo del tipo de imagen, la matriz podrá ser de una forma u otra:
Imágenes RGB: Estas imágenes requieren una matriz 3D, por lo que se dispondrá de 3 planos. Un
primer plano representará las intesidades de pixel rojas, otro segundo las intesidades de pı́xeles verdes
y el último las inensidades de pı́xeles azules. [1]

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

Imágenes en escala de grises: son matrices numéricas IBG

2.3. Funciones generales matlab


Algunas de las funciones mostradas a continuación pueden variar según las versión de Matlab (a partir
de R2014).

Cargar imagen: imread


Mostrar imagen: image o imshow
Pasar de color a escala de grises: rgb2gray
Pasar la imagen a binario: im2bw
Será necesario que la imagen que se vaya a utilizar esté guardada en la misma carpeta que el documento
Matlab.

Figura 1: Código para cargar una imagen.

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.

Borde con ruido Borde suavizado

Figura 2

Figura 3: Código para suavizar imágenes

Como se muestra en la imagen anterior, el filtro será:


imf ilter(A, f special,0 gaussian0 )
Donde para el caso de ejemplo, A es el nombre de la imagen y ’gaussian’ entre comillas es el filtro que se
aplica.

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.

Figura 4: Código para la obtención de bordes

Figura 5: Código para la obtención de bordes completo

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.

(a) imagen original (b) Imagen con bordes suavizados (imfilter)

(c) imagen en escala de grises (rgb2gray) (d) Imagen con reconocimiento de bordes con algo-
ritmo LoG (edge)

Figura 6: Respuesta para cada filtro

3.3. Cáculo de Áreas


Para el cálculo de Áreas se aplica la función : regioncrops

Esta función permite identificar objetos presentes en la imagen.

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:

Identificar los objetos presentes en la imagen: bwlabel


Visualizar la imagen etiquetada:imshow(label2rgb)

Determinar las propiedades de los objetos en la imagen: regionprops


Si se accede a la variable creada como propiedades, en la pestaña ”Workspace”, aparece una tabla con
diferentes parámetros, entre ellos se entuentra el área (como el número de pixels del objeto), el centro de
masas (en coordenadas xy) y por último también ofrece las dimensiones de la caja más pequeña que podrı́a
contener al elemento.

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.

’Centroid’ Calcula los centroides de los objetos de la matriz.

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 Borrado de imagen

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.

Figura 7: Código con algoritmo de ’Canny’

Al comparar los resultados para los algortimos de LG y Canny se obtiene lo siguiente

(a) LoG (b) Canny

(c) Código para la comparación de al-


goritmos

Figura 8: Respuesta para cada filtro

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.

3. Determinar cual es el componente más grande de la imagen ’borrar.jpg’, ¿Y el más pequeño?


4. A partir de la imagen’elastic X’ :
Eliminar las pequeñas manchas que aparecen utilizando dos funciones distintas.
Obtener el diámetro mı́nimo del filamento.

5. Realizar el reconocimiento y detección de bordes en Octave (puede ser necesaria la instalación de


paquetes).

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

[2] mathworks, im2bw,


https://es.mathworks.com/help/images/ref/im2bw.html?searchHighlight=im2bw&s_tid=doc$_
$srchtitle
[3] Octave GNU, https://www.gnu.org/software/octave/about.html

[4] mathworks, bwconncomp,


https://es.mathworks.com/help/images/ref/bwconncomp.html

S-ar putea să vă placă și