TEST - SAV

Anuncio
Mari Carmen Barba Riquel
e-mail:[email protected]
Texturas Caracterizadas Topológicamente
ÍNDICE
LISTA DE FIGURAS ........................................................................................................................................ 3
1. INTRODUCCIÓN ......................................................................................................................................... 4
2. IDEA GENERAL ........................................................................................................................................... 7
3. TRABAJO PREVIO ............................................................................................................................................. 9
4. LA ESTRUCTURA DE DATOS {Ns(t)}s  I ...................................................................................... 10
4.1. Cálculo de los grafos Ns(t) ................................................................................................................. 11
5. USO DEL MRCG PARA CARACTERIZAR TEXTURAS ........................................................... 13
5.1. Texturas uniformes .............................................................................................................................. 13
5.2. Modelos de filtro .................................................................................................................................. 17
5.3. Propiedades del MRCG para texturas ........................................................................................... 18
5.3.1. Transformaciones de niveles de gris......................................................................................... 18
5.3.2. Alisar / perfilar una imagen ......................................................................................................... 18
5.3.3. Características básicas de las texturas .................................................................................. 19
6. RESULTADOS EXPERIMENTALES ................................................................................................... 20
7. CÓDIGO ........................................................................................................................................................ 22
9. CONCLUSIONES ....................................................................................................................................... 34
10. REFERENCIAS .......................................................................................................................................... 35
ANEXO I................................................................................................................................................................ 36
Barba Riquel, Mari Carmen
2
Texturas Caracterizadas Topológicamente
LISTA DE FIGURAS
Figura 1. Representación de la 4-vecindad ............................................................................................................... 6
Figura 2. Esquema de la idea general ....................................................................................................................... 8
Figura 3. Obtención del MRCG a partir de la imagen binarizada .......................................................................... 10
Figura 4. Representación de los Arrays L e idx. ..................................................................................................... 11
Figura 5. Representación del caso unidimensional ................................................................................................. 13
Figura 6 . Perímetro para un pixel. ......................................................................................................................... 15
Figura 7. Perímetro para dos píxeles. ..................................................................................................................... 15
Figura 8. Perímetro para tres píxeles. ..................................................................................................................... 15
Figura 9. Otro perímetro para tres píxeles. ............................................................................................................. 15
Figura 10. Ejemplo de una imagen con líneas y su correspondiente binarización. ................................................ 19
Figura 11. Interfaz del programa. Pestaña Imagen. ................................................................................................ 31
Figura 12. Interfaz del programa. Pestaña Componentes conexas. ........................................................................ 32
Barba Riquel, Mari Carmen
3
Texturas Caracterizadas Topológicamente
1. INTRODUCCIÓN
La caracterización de texturas es una herramienta muy importante
para el análisis de imágenes, algunas de sus aplicaciones son:
Clasificación de regiones en imágenes médicas.
Análisis de fotografías tomadas por satélite.
El concepto de textura aún no está muy claro pero podemos dar una
definición informal:
Textura: una escena es considerada una textura si cualquier
vista parcial de la escena es similar a cualquier otra.
Podemos considerar dos grandes tipos de texturas:
Estructurales: aquellas texturas formadas por una repetición de
elementos básicos llamados texelas.
Estadísticas: aquellas texturas que no necesitan un elemento básico.
Ej: hierba, corcho, lona, etc.
La clasificación de texturas se utiliza para tareas de segmentación,
detección de defectos en las texturas, etc.
Normalmente, las texturas se caracterizan por una función o por un vector
de características. Aquí vamos a presentar un método para caracterizar
texturas, basado en las propiedades topológicas de los diferentes niveles de
gris y de las distintas resoluciones.
Se usará una estructura de datos llamada MRCG(Multi Resolution
Cluster Graphs). Esta estructura está formada por una secuencia de grafos
denotados por {Ns(t)}s  I. En la que dados s y t, Ns(t) se define como el
número de componentes conexas formadas por al menos s píxeles, para una
imagen binarizada con umbral t.
La secuencia de grafos no se calcula exhaustivamente, pero los píxeles
de la imagen re recorren linealmente. En el peor de los casos, la complejidad
en tiempo para crear la secuencia completa de grafos es casi lineal.
Barba Riquel, Mari Carmen
4
Texturas Caracterizadas Topológicamente
Exactamente es de O((n,n) n), donde n es el número de píxeles de la imagen
y (n,n) es la inversa de la función de Ackerman.
Barba Riquel, Mari Carmen
5
Texturas Caracterizadas Topológicamente
La estructura {Ns(t)}s  I es una representación multinivel de la imagen
donde el parámetro s controla la resolución.
En este estudio consideraremos que un píxel es vecino de otro si entre
ellos existe una relación de 4-vecindad.
Figura 1. Representación de la 4-vecindad
Este documento está estructurado de la siguiente manera: en el
apartado 2 se expone una idea general de este método, en el apartado 3 hay
una breve descripción del trabajo previo, en el apartado 4 se describe la
estructura de datos {Ns(t)}s  I. En el apartado 5 se discuten las propiedades
más relevantes de este caracterizador de texturas. El apartado 6 contiene
resultados experimentales, en el apartado 7 se muestra el código del
programa, en el 8 un breve manual de usuario y en el apartado 9 se recogen
las conclusiones. Se añade también un anexo con un test de 10 preguntas
referentes al trabajo realizado.
Barba Riquel, Mari Carmen
6
Texturas Caracterizadas Topológicamente
2. IDEA GENERAL
La idea de este nuevo enfoque para caracterizar texturas consiste en
lo siguiente:
Dada una imagen en niveles de grises, calcularemos su histograma y a partir
de él haremos binarizaciones con distintos valores umbrales. El estudio de las
componentes conexas de las imágenes binarizadas nos dirá si se trata de una
imagen muy granulosa, granulosa o poco granulosa. Si el número de
componentes conexas cambia rápidamente cuando tomamos valores umbrales
cercanos, estaremos frente a una imagen muy granulosa, si por el contrario el
número de componentes conexas no varía al ir cogiendo distintos valores
umbrales cercanos, pero varía cuando cogemos valores umbrales muy lejanos
querrá decir que la imagen es poco granulosa.
Barba Riquel, Mari Carmen
7
Texturas Caracterizadas Topológicamente
Figura 2. Esquema de la idea general
Barba Riquel, Mari Carmen
8
Texturas Caracterizadas Topológicamente
3. TRABAJO PREVIO
Las características más sencillas de las texturas son las estadísticas de
primer orden extraídas del histograma. Otras características más fiables son
aquellas estadísticas que contienen información espacial y que no se
obtienen a partir del histograma. Estamos hablando del método de la
diferencia de los niveles de gris (GLMD).
Como estos, existen multitud de métodos para caracterizar texturas,
algunos de ellos son:
Análisis de Wavelets.
Caracterización de texturas según el área de la imagen.
Cálculo de las 5 características del histograma.
Gray Level Run Lengths.
Markov Random Field.
...
Barba Riquel, Mari Carmen
9
Texturas Caracterizadas Topológicamente
4. LA ESTRUCTURA DE DATOS {Ns(t)}s  I
Sea I la imagen de entrada y sea It la imagen resultante de binarizar la
imagen I con un umbral t.
Se define {Ns(t)}s  S como el conjunto de Ns(t), donde:
Ns(t) es el número de componentes conexas con un tamaño de al
menos s píxeles en una imagen binarizada con umbral t.
t  [0, 255]
s se toma de un conjunto de valores de resoluciones R.
Figura 3. Obtención del MRCG a partir de la imagen binarizada
En el peor de los casos la secuencia de grafos {Ns(t)}s  S puede ser
calculada en O((n,n) | T |  | R |  n), donde:
(n,n)es la inversa de la función de Ackerman y es casi constante
| T | es independiente del tamaño de entrada de la imagen
| R | es prácticamente una constante
n es el número de píxeles de la imagen
Por tanto podemos decir que la complejidad del cálculo de {Ns(t)}s  S
es lineal.
Barba Riquel, Mari Carmen
10
Texturas Caracterizadas Topológicamente
4.1. Cálculo de los grafos Ns(t)
A continuación expondremos los pasos que hay que seguir.
Para cada tamaño s hay que construir el grafo de la función Ns(t). Por
tanto para cada valor umbral t, el número de objetos de tamaño s tendrá que
ser calculado. Denotaremos por It la imagen resultante de binarizar la imagen
de entrada con un umbral t. Cada píxel de It será blanco o negro
dependiendo del valor del píxel correspondiente en la imagen de entrada, si
el nivel de gris es menor que el umbral será negro, en otro caso será blanco.
Es fácil de ver que los píxeles negros de It+1 serán también píxeles negros en
It. Por tanto el cálculo de Ns(t+1) se basa en los cálculos hechos para Ns(t).
Sea m el número de niveles de gris (en nuestro caso 256) y n el número
de píxeles de la imagen de entrada, la construcción del grafo Ns(t) se hace
de la siguiente manera:
a) Construir una lista L de n píxeles y un array idx de tamaño m, tal que idx(i)
sea el índice del primer elemento de L con nivel de gris i.
Figura 4. Representación de los Arrays L e idx.
b) Definir una estructura en la que inicialmente cada píxel sea un conjunto
disjunto.
c) Contar el número de objetos. Para ello inicializaremos la cuenta a cero y
recorreremos la lista L. Sea t el nivel de gris del píxel p, uniremos p con cada
uno de sus vecinos(4-adyacentes) si el nivel de gris del vecino de p no es mayor
que t. Si la unión se lleva a cabo actualizaremos el número de Ns(t) de la
siguiente manera:
Barba Riquel, Mari Carmen
11
Texturas Caracterizadas Topológicamente
Sean s1 y s2 los tamaños de los dos conjuntos que voy a unir. Si s1 y
s2 son menores que s, y s1+s2>=s entonces tenemos un nuevo objeto, por
tanto incrementamos la cuenta.
Pero si s1 y s2 no son menores que s entonces decrementamos en uno
la cuenta.
El valor de Ns(t) será el resultante después de procesar el último píxel con
nivel de gris t.
Barba Riquel, Mari Carmen
12
Texturas Caracterizadas Topológicamente
5. USO DEL MRCG PARA CARACTERIZAR
TEXTURAS
5.1. Texturas uniformes
Si la imagen de entrada I es una imagen con textura uniforme entonces
It (que será la imagen I binarizada), no será más que una imagen de ceros y
unos repartidos aleatoriamente donde la probabilidad de que sea un 1 es p(t),
y la probabilidad de que sea un 0 es 1- p(t). p(t) es una función monótona
creciente y su valor depende de la distribución de la uniformidad. Si la
distribución del ruido blanco es uniforme en el intervalo [tmin,tmax]
entonces podemos definir p(t) como:
Para comprender mejor el significado del Ns(t) vamos a ver el caso
unidimensional. Para el caso unidimensional, la imagen uniforme es una
secuencia binaria aleatoria con una probabilidad p(t) de que sea “1” y una
probabilidad 1-p(t) de que sea “0”. En este caso una componente conexa es
una secuencia de unos rodeado de ceros. El número de componentes conexas
para cualquier tamaño de s será N1(t). Cada componente conexa tiene
exactamente una ocurrencia de “10”, excepto la última componente. Por
tanto, dado un número de n bits, el número de ocurrencias de “10” será el
número de componentes conexas con una desviación de 1 como mucho. Y la
probabilidad de ser “10” es de p*q.
1
0
0
1
0
1
0
Figura 5. Representación del caso unidimensional
De este razonamiento podemos sacar la siguiente proposición:
Proposición 1:
Dada una imagen unidimensional, uniforme, con probabilidad p de
que un píxel sea negro, el valor de Ns(t) viene dado por la
expresión: (n-s-1) psq.
Barba Riquel, Mari Carmen
13
Texturas Caracterizadas Topológicamente
El caso de dos dimensiones es más complicado, pero intentaré
explicarlo. Sea Es una componente conexa de s píxeles. Diremos que Es le
ocurre al píxel x si x es el píxel más a la derecha y más abajo de entre todos
los píxeles de la columna de x. La probabilidad de que Es le ocurra a algún
píxel x viene dada por psqr donde r es el número de píxeles del perímetro.
Veámoslo con un ejemplo:
Barba Riquel, Mari Carmen
14
Texturas Caracterizadas Topológicamente
Para s = 1
r=4
Figura 6 . Perímetro para un pixel.
Para s = 2
r=6
Figura 7. Perímetro para dos píxeles.
Para s = 3
r=8
Figura 8. Perímetro para tres píxeles.
Para s = 3
r=7
Figura 9. Otro perímetro para tres píxeles.
Si nos fijamos, podemos darnos cuenta de que cuando la componente
es una línea, r viene dado por r = 2s + 2. Y para valores grandes de s r = s.
Denotemos por as, r, i, j al número de componentes conexas distintas de s
píxeles, cuando el píxel más a la derecha y más abajo es el (i, j). Por ejemplo,
para i,j >=s, a 1,4 = 1, a 2,6 = 2, a 3,8 = 2, a 3,7 = 2, etc. (Ver figura anterior).
Proposición 2:
Para imágenes 2D uniformes, el valor de Ns(t) es una combinación
lineal de psqr
Barba Riquel, Mari Carmen
15
Texturas Caracterizadas Topológicamente
Barba Riquel, Mari Carmen
16
Texturas Caracterizadas Topológicamente
5.2. Modelos de filtro
En este apartado se describe la relación de los modelos de filtro con la
estructura {Ns(t)}s  S para texturas uniformes.
Un modelo de filtro se define como una cuadrícula o enrejado en el
que cada vértice se declara como abierto con una probabilidad p y como
vértice cerrado con una probabilidad de 1-p. Podemos establecer las
siguientes relaciones entre el modelo de filtros y la estructura Ns(t):
Modelo de filtro
Imagen binaria
vértice abierto
píxel negro
componente conexa abierta objeto formado por al menos s píxeles
Es decir, que un vértice abierto en el modelo de filtros es equivalente
a lo que nosotros hemos llamado píxel negro en una imagen binaria. Y un
subgrafo conexo de al menos s vértices abiertos del modelo de filtros se
corresponde en una imagen binaria a un objeto formado por al menos s
píxeles.
Se define probabilidad crítica como la probabilidad de que dado un
vértice pertenezca a una componente abierta. Para el modelo anteriormente
definido pc = 0.592764, es decir, que si la probabilidad de que un vértice sea
negro es >pc entonces existe una componente conexa en Z2 con
probabilidad 1. Esto implica que para valores lo suficientemente grandes de s
existe un t' tal que Ns(t)=0 para t <= t'.
Barba Riquel, Mari Carmen
17
Texturas Caracterizadas Topológicamente
5.3. Propiedades del MRCG para texturas
Lo explicado en el apartado anterior también se puede aplicar a
texturas más complejas.
5.3.1. Transformaciones de niveles de gris
El comportamiento del MRCG cuando hacemos transformaciones de
niveles de gris se recoge en la siguiente proposición:
Proposición: Sea I una imagen de entrada y sea II la imagen
obtenida al aplicarle a I la transformación de escala de grises a(t). Si
Ns(t) es el MRCG de I entonces el MRCG de II será Ns(a(t)).
Demostración: para cualquier t se cumple que It = IIa(t), es decir,
que las imágenes binarizadas son las mismas.
Como la ecualización del histograma es una transformación de
escala de grises monótona creciente de la propiedad anterior se
obtiene el siguiente corolario:
Corolario: Sean
I: imagen de entrada y II: la imagen ecualizada, entonces MRCG de
I y MRCG de II se diferencian en una transformación monótona de
t.
Este corolario nos proporciona una herramienta para normalizar
texturas como una etapa previa al procesamiento, o sea, que antes de
trabajar con las imágenes podremos hacerles un preprocesamiento que
consistirá simplemente en una ecualización del histograma.
5.3.2. Alisar / perfilar una imagen
El efecto de alisar una imagen es similar a incrementar el valor del
parámetro s. Una componente conexa se corresponde con un valle en la
superficie de la imagen que está por debajo del plano binarizado. El tamaño
de la componente conexa es el área en el plano binarizado, el cual es cortado
por la superficie de la imagen. Los valles que cortan el plano binarizado con
un área menor que s no cuentan para el cálculo de Ns(t). Por tanto cortar los
valles por debajo de la primera cima que crea una componente conexa de
tamaño >=s no tiene efecto alguno sobre el grafo Ns(t).
Barba Riquel, Mari Carmen
18
Texturas Caracterizadas Topológicamente
5.3.3. Características básicas de las texturas
En este apartado examinaremos la influencia que tienen algunas
características “clásicas” de texturas sobre el MRCG.
Antes de nada cabe comentar que el MRCG es invariante respecto a la
orientación, es decir, que el resultado será el mismo sea cual sea la
orientación de la imagen y esto hace que sea un método muy bueno en
comparación con otros métodos.
Características de las texturas:
Regularidad: una textura es regular cuando está formada por
una repetición de elementos básicos. Cuanto más regular sea una
textura más liso será su grafo Ns(t).
Linealidad: si cogemos dos imágenes: I1 y I2, donde I1 está
formada por líneas de s' píxeles, I2 está formada por cuadrados de
s' píxeles, nos damos cuenta de que al binarizar con umbral t, las
imágenes que obtenemos contienen sólo porciones de esas líneas (o
cuadrados) esto es porque son imágenes digitales y el nivel de gris
de los píxeles de un objeto no es el mismo. Es más fácil romper
líneas que cuadrados, por tanto los Ns(t) grafos serán mayores para
valores pequeños de s' (y al revés).
Figura 10. Ejemplo de una imagen con líneas y su correspondiente binarización.
Densidad: para valores lo suficientemente grandes de s,
texturas densas o tupidas implican valores grandes para la función
Ns(t). Además los objetos densos se unen más rápidamente.
Falta de finura: una textura poco fina significa grandes
componentes conexas en la imagen.
Barba Riquel, Mari Carmen
19
Texturas Caracterizadas Topológicamente
6. RESULTADOS EXPERIMENTALES
En este apartado se presentarán los resultados obtenidos de la
comparación de los métodos SGLDM y Fractal signature con el método que
estamos estudiando.
Para la obtención de los resultados se tomó un conjunto de 13
imágenes, entre ellas estaban una imagen de corcho, de un tejido, de lana, de
lona, e incluso de agua. Cada imagen fue escaneada con una resolución de 75
dpi y 256 niveles de gris. De estas imágenes se tomaron muestras de 128x128.
Se aplicó una ecualización a cada una de ellas para neutralizar los efectos de
las estadísticas de primer orden, ya que normalmente estas estadísticas son
poco fiables. Es importante que nos demos cuenta de que en estas imágenes
hay texturas que son diferenciables fácilmente con sólo mirarlas, debido a las
diferencias significativas que presentan las estadísticas de primer orden,
pero que después de la ecualización del histograma ya no son tan
diferenciables. En estos experimentos se caracterizan a las texturas por los
valores de sus grafos N2(t). Se escogió una resolución de tamaño 2 por el
siguiente motivo: si ns(t) es el número de componentes conexas de tamaño s
exactamente en la imagen binarizada con umbral t, Ns(t)=nu(t). Se observa
claramente que Ns(t) contiene más información para valores pequeños de s.
Para medir resultados definiremos el concepto de distancia:
La distancia entre dos grafos Ns(t) se define como la suma normalizada
de los cuadrados de las diferencias:
D( Ns'(t), Ns''(t) ) = (1/x) [ Ns'(t) - Ns''(t) ]²,
donde x = max(a, b)², siendo a y b los valores máximos de Ns'(t) y Ns''(t)
respectivamente.
Resumiendo los experimentos realizados, comentaré que para los otros
métodos se obtenían distancias mayores entre muestras que pertenecían a
una misma textura que con el MRCG. Incluso, hubo ocasiones en las que la
distancia entre muestras de diferentes texturas era menor que la distancia
entre muestras sacadas de la misma textura.
En general podemos decir lo siguiente:
SGLDM
Salen valores más bajos que para el método MRCG.
Es más apropiado para microtexturas.
Barba Riquel, Mari Carmen
20
Texturas Caracterizadas Topológicamente
Las diferencias con el método MRCG son muy acusadas y no son
consecuencia de una mala elección de características sino una
falta de información en las matrices de co-ocurrencias.
Fractal Signature
Los resultados del MRCG son mejores que los del Fractal Signature
y los del Fractal Signature son mejores que los del SGLDM.
Barba Riquel, Mari Carmen
21
Texturas Caracterizadas Topológicamente
7. CÓDIGO
El programa está implementado en Visual Basic. A continuación se
describen los módulos del mismo y se muestran las funciones más importantes:
El programa está formado por los siguientes cinco módulos:
Botonera: en este módulo se implementan las funciones necesarias
para el funcionamiento de los botones del programa.
Colores: en este módulo se implementan las funciones para pasar al
formato RGB, a escala de grises, etc.
Representaciones: en este módulo se implementan las funciones
necesarias para la representación de las imágenes en pantalla.
Tipos: en este módulo se definen los tipos de datos utilizados en el
programa.
Transformaciones: en este módulo es donde se encuentra la
funcionalidad del programa.
A continuación se muestran las funciones más importantes del módulo
de Transformaciones:
Este método redimensiona la matriz donde se guardan los datos de la imagen y
obtiene los distintos valores de color necesarios.
Sub redimensionaTextura(imagen As PictureBox, textura As TipoTextura)
Dim altura As Long, anchura As Long
altura = imagen.ScaleY(imagen.Picture.Height, vbHimetric, vbPixels)
anchura = imagen.ScaleX(imagen.Picture.Width, vbHimetric, vbPixels)
textura.ancho = anchura
textura.alto = altura
ReDim textura.punto(anchura - 1, altura - 1)
End Sub
Barba Riquel, Mari Carmen
22
Texturas Caracterizadas Topológicamente
Este método obtiene la imagen en escala de grises a partir de la imagen que se
ha abierto.
Sub obtenerEscalaGrises(imagen As PictureBox, textura As TipoTextura)
Dim i As Long, j As Long
Dim color As Long
For i = 0 To textura.ancho - 1
For j = 0 To textura.alto - 1
' Obtenemos el color del punto a partir de la imagen
color = imagen.Point(i, j)
'Establacemos el valor del nivel de gris
textura.punto(i, j).nivelGris = colorToGris(color)
Next j
Next i
End Sub
Mediante este método se obtiene el histograma de la imagen cargada.
Sub obtenerHistograma(textura As TipoTextura)
Dim i As Long, j As Long
Dim color As Long
Dim maximo As Long
' Inicializa los valores del histograma
textura.histo.valorMaximo = 0
For i = 0 To 255
textura.histo.valores(i) = 0
Next i
For i = 0 To textura.ancho - 1
For j = 0 To textura.alto - 1
color = textura.punto(i, j).nivelGris
textura.histo.valores(color) = textura.histo.valores(color) + 1
' Va calculando el valor máximo del histograma
If textura.histo.valores(color) > textura.histo.valorMaximo Then
textura.histo.valorMaximo = textura.histo.valores(color)
End If
Next j
Next i
End Sub
Barba Riquel, Mari Carmen
23
Texturas Caracterizadas Topológicamente
Método para binarizar la imagen.
Sub binarizarImagen(textura As TipoTextura, umbral As Long)
Dim i As Long, j As Long, k As Long
Dim color As Long
For i = 0 To textura.ancho - 1
For j = 0 To textura.alto - 1
' Transformaciones para poner el color en binario
textura.punto(i, j).binario = binarizaPunto(textura.punto(i, j), umbral)
Next j
Next i
End Sub
Función para binarizar un punto
Function binarizaPunto(punto As TipoPunto, umbral As Long) As Byte
' Si el punto está por debajo del umbral
If punto.nivelGris < umbral Then
binarizaPunto = True
Else
binarizaPunto = False
End If
End Function
Método para ecualizar el histograma.
Sub ecualizarHistograma(textura As TipoTextura)
Dim suma(255) As Double
Dim i As Long, j As Long, ancho As Long, alto As Long
Dim totalPuntos As Long
Dim gris As Long
ancho = textura.ancho
alto = textura.alto
totalPuntos = alto * ancho
' Realizamos la suma correlativa
For i = 1 To 255
suma(i) = suma(i - 1) + textura.histo.valores(i)
Next i
'Normalización
For i = 0 To 255
suma(i) = suma(i) * 255 / totalPuntos
Next i
' Sustitución de la imagen por la ecualizada
For i = 0 To ancho - 1
For j = 0 To alto - 1
gris = textura.punto(i, j).nivelGris
gris = Round(suma(gris))
Barba Riquel, Mari Carmen
24
Texturas Caracterizadas Topológicamente
textura.punto(i, j).nivelGris = gris
Next j
Next i
End Sub
Barba Riquel, Mari Carmen
25
Texturas Caracterizadas Topológicamente
Función que obtiene el número de componentes conexas de una textura.
Function numeroComponentesConexas(textura As TipoTextura) As Long
Dim i As Integer, j As Integer
Dim ancho As Long, alto As Long
Dim numeroComponentes As Long
ReDim ContadorComponentes(1)
ReDim numeroPuntosDeComponente(1 To 100)
' Inicializamos la tabla de componentes
ancho = textura.ancho
alto = textura.alto
ReDim componentes(ancho, alto)
' Inicializamos la pila
Set pila = New CPila
pila.inicializar ancho * alto
numeroComponentes = 0
' Usamos un algoritmo de búsqueda en profundidad
For i = 0 To ancho - 1
For j = 0 To alto - 1
'Si todavía no se ha procesado el punto, es que tenemos una nueva componente
If Not procesado(i, j, ancho, alto) And textura.punto(i, j).binario = True Then
' Entramos a procesar una nueva componente
numeroComponentes = numeroComponentes + 1
componentes(i, j) = numeroComponentes
' Añadimos una componente mas para contar los puntos que tiene
ReDim Preserve numeroPuntosDeComponente(1 To numeroComponentes)
numeroPuntosDeComponente(numeroComponentes) = 1
' Miramos los datos que todavía no se han procesado,
' como estamos recorriendo de arriba a abajo y de izquierda a derecha
' quedarán los de abajo y los de la derecha
' Miramos los de abajo
If Not procesado(i, j + 1, ancho, alto) Then
If textura.punto(i, j).binario = textura.punto(i, j + 1).binario Then
descubreVecinos i, j + 1, numeroComponentes, textura
End If
End If
' Miramos los de la derecha
If Not procesado(i + 1, j, ancho, alto) Then
If textura.punto(i, j).binario = textura.punto(i + 1, j).binario Then
descubreVecinos i + 1, j, numeroComponentes, textura
End If
End If
End If
Barba Riquel, Mari Carmen
26
Texturas Caracterizadas Topológicamente
Next j
Next i
numeroComponentesConexas = numeroComponentes
End Function
Función que va recorriendo todos los vecinos a partir de un punto. Es
importante el uso de ByVal en i, j y numeroComponentes, para que no
cambien de valor al salir de la función. No se hace recursivo porque el
tamaño de las imágenes a procesar produce un desbordamiento de la pila.
Function descubreVecinos(ByVal i As Integer, ByVal j As Integer, ByVal
numeroComponentes, imagen As TipoTextura)
Dim elem As Variant ' Para obtener el dato almacenado en la pila
Dim ancho As Long, alto As Long
' Usamos el estado para que no vuelva a preguntar por vecinos que ya ha
' comprobado, y así ganar tiempo
Dim estado As Integer
estado = 1
ancho = imagen.ancho
alto = imagen.alto
Do
Select Case estado
Case 1 ' Estado inicial
'El punto pertenece a la componente actual y lo consideramos procesado
componentes(i, j) = numeroComponentes
'Añadimos un punto más a esta componente
numeroPuntosDeComponente(numeroComponentes) =
numeroPuntosDeComponente(numeroComponentes) + 1
' Comprueba los vecinos por arriba
If Not procesado(i, j - 1, ancho, alto) Then
If imagen.punto(i, j).binario = imagen.punto(i, j - 1).binario Then
pila.apila i, j, estado ' Apilamos el elemento pues vamos a seguir
' mirando a partir de él
j = j - 1 ' Establecemos la coordenada del siguiente vecino
estado = 0 ' Establecemos el estado para procesar el siguiente vecino
' Lo iniciamos a 0 porque se incrementará luego
End If
End If
Case 2
' Comprueba los vecinos por la izquierda
If Not procesado(i - 1, j, ancho, alto) Then
If imagen.punto(i, j).binario = imagen.punto(i - 1, j).binario Then
pila.apila i, j, estado ' Apilamos el elemento pues vamos a seguir
' mirando a partir de él
i=i-1
estado = 0 ' Establecemos el estado para procesar el siguiente vecino
Barba Riquel, Mari Carmen
27
Texturas Caracterizadas Topológicamente
End If
End If
Case 3
' Comprueba los vecinos por abajo
If Not procesado(i, j + 1, ancho, alto) Then
If imagen.punto(i, j).binario = imagen.punto(i, j + 1).binario Then
pila.apila i, j, estado ' Apilamos el elemento pues vamos a seguir
' mirando a partir de él
j=j+1
estado = 0 ' Establecemos el estado para procesar el siguiente vecino
End If
End If
Case 4
' Comprueba los vecinos por la derecha
If Not procesado(i + 1, j, ancho, alto) Then
If imagen.punto(i, j).binario = imagen.punto(i + 1, j).binario Then
pila.apila i, j, estado ' Apilamos el elemento pues vamos a seguir
' mirando a partir de él
i=i+1
estado = 0 ' Establecemos el estado para procesar el siguiente vecino
End If
End If
Case 5 ' Ya se han mirado todos los vecinos del punto, entonces debemos volver
' atrás
' Hay que desapilar en caso de que se haya apilado algo
If pila.tamaño > 0 Then
elem = pila.desapila()
i = elem(0)
j = elem(1)
estado = elem(2)
End If
End Select
' Pasará al siguiente estado
estado = estado + 1
'DoEvents ' Por si se queda pillado
Loop Until pila.tamaño = 0 And estado > 5
End Function
Barba Riquel, Mari Carmen
28
Texturas Caracterizadas Topológicamente
Método que calcula el número de componentes que existen con un número
de puntos que va desde 1 hasta al tamaño de la componente conexa más
grande.
Sub calculaNumeroComponentesConNPuntos()
Dim i As Long, numero As Long, sumador As Long
Dim cantidadPosiciones As Long
Dim fin As Long
ReDim numeroComponentesConNPuntos(1 To getMaximoPuntosEnComponentes())
ReDim nComponentesConNPuntosSinCeros(2, 1)
fin = UBound(numeroPuntosDeComponente)
For i = 1 To fin
numero = numeroPuntosDeComponente(i)
numeroComponentesConNPuntos(numero) =
numeroComponentesConNPuntos(numero) + 1
If numeroComponentesConNPuntos(numero) = 1 Then
cantidadPosiciones = cantidadPosiciones + 1
End If
Next i
ReDim nComponentesConNPuntosSinCeros(2, cantidadPosiciones)
Dim j As Long
fin = UBound(numeroComponentesConNPuntos)
For i = 1 To fin
If numeroComponentesConNPuntos(i) <> 0 Then
' Guardamos el número de puntos
nComponentesConNPuntosSinCeros(0, j) = i
' Guardamos el número de componentes que tienen i puntos
nComponentesConNPuntosSinCeros(1, j) = numeroComponentesConNPuntos(i)
j=j+1
End If
Next i
' Calculamos Ns(t) para los datos que quedan
fin = j
For i = fin - 1 To 0 Step -1
sumador = sumador + nComponentesConNPuntosSinCeros(1, i)
nComponentesConNPuntosSinCeros(2, i) = sumador
Next i
End Sub
Barba Riquel, Mari Carmen
29
Texturas Caracterizadas Topológicamente
Función que nos dice si un elemento se ha procesado ya o no.
Function procesado(i As Integer, j As Integer, ancho As Long, alto As Long) As
Boolean
procesado = False
' Comprueba que no se salga de los límites, si se sale lo considera como procesado
If i < 0 Or i >= ancho Or j < 0 Or j >= alto Then
procesado = True
ElseIf componentes(i, j) <> 0 Then
procesado = True
End If
End Function
Función que calcula el tamaño en puntos de la componente conexa más
grande.
Function getMaximoPuntosEnComponentes() As Long
Dim i As Long, numero As Long, maximo As Long
Dim fin As Long
fin = UBound(numeroPuntosDeComponente)
For i = 1 To fin
numero = numeroPuntosDeComponente(i)
If (numero > maximo) Then
maximo = numero
End If
Next i
getMaximoPuntosEnComponentes = maximo
End Function
Barba Riquel, Mari Carmen
30
Texturas Caracterizadas Topológicamente
8. MANUAL DE USUARIO
La interfaz de usuario presenta el aspecto que se muestra a
continuación. Se muestra sobre la interfaz el significado de cada elemento.
Barra de menús
Barra de botones
En este cuadro se cargará la
imagen que vamos a analizar
En este cuadro aparecerá la
imagen en niveles de grises
En este cuadro aparecerá el
histograma de la imagen
Muestra el
valor umbral
con el que se
binarizará
Muestra el nº
de puntos que
tiene la imagen
con nivel de
gris igual al
umbral
En este cuadro aparecerá la
imagen binarizada
Barra para
modificar el
valor umbral
Muestra el nº Botón de estado
de componentes
conexas que
tiene la imagen
Figura 11. Interfaz del programa. Pestaña Imagen.
Barba Riquel, Mari Carmen
31
Texturas Caracterizadas Topológicamente
Botón para cargar una imagen
Botón para transformar la imagen a escala de grises
Botón para calcular el histograma
Botón para calcular la ecualización del histograma
Botón para binarizar la imagen
Botón para calcular las estadísticas
cargar una imagen
En este cuadro se mostrarán las
distintas componentes conexas
en diferentes colores
En este cuadro se mostrará una
tabla con las estadísticas
obtenidas
Figura 12. Interfaz del programa. Pestaña Componentes conexas.
El funcionamiento del programa es el siguiente: cargaremos la imagen
con la que deseemos trabajar con el primer botón que aparece en la barra de
botones. Todas las acciones que proporcionan los botones pueden realizarse
a través de la barra de menús.
Los botones y las opciones del menú están preparados para habilitarse en el
momento adecuado, con lo cual es imposible que el usuario se pierda en el
proceso.
Barba Riquel, Mari Carmen
32
Texturas Caracterizadas Topológicamente
Al cargar la imagen se habilita el botón de conversión a escala de grises,
una vez pulsado este botón, el programa muestra la imagen convertida a
niveles de gris, se deshabilitará el botón y se habilitará el siguiente botón, que
en este caso será el del cálculo del histograma. Una vez mostrado el
histograma podremos seleccionar el umbral de binarización mediante la barra
que aparece debajo del histograma. Cuando se pulsa el botón de binarizar, se
obtiene la imagen binarizada para el umbral seleccionado, y el cálculo del
número de componentes conexas, que tiene la imagen. Además se pinta la
imagen de componentes con un color para cada componente conexa que
tiene la imagen. Se habilitará entonces el botón de estadísticas.
Mientras el botón de binarizar esté marcado, se calcularán
automáticamente la binarización de la imagen cuando cambie el valor del
umbral.
Mientras que esté marcado el botón de estadísticas, se obtendrán
también las estadísticas una vez que se binarice y se calculen las
componentes conexas de la imagen.
El botón de ecualizar se habilita cuando se pulsa el botón del
histograma. Se puede usar o no, y está activo hasta que se use. Si no se usa
los cálculos se harán con el histograma normal. Si se usa, se harán los nuevos
cálculos con los datos de la imagen ecualizada.
De esta manera, se pueden ver resultados con la imagen original, y más tarde
ecualizar y comprobar los nuevos resultados con la imagen ecualizada.
Barba Riquel, Mari Carmen
33
Texturas Caracterizadas Topológicamente
9. CONCLUSIONES
El MRCG es una secuencia de grafos de la forma {Ns(t)}s  I tal que
dado un valor s, definimos la función Ns(t) como el número de componentes
conexas con un número de píxeles >=s en una imagen binarizada con un
umbral t.
En el peor de los casos la complejidad es casi lineal.
Es un método bueno tanto para macrotexturas como para
microtexturas.
Es invariante respecto de la orientación.
Barba Riquel, Mari Carmen
34
Texturas Caracterizadas Topológicamente
10. REFERENCIAS
"Efficient Topological Characterization of Gray-Level Textures,
Using a Multiresolution Representation".
Graphical Models and Image Processing. Vol. 59, n. 1, 1-17, 1997
"Tratamiento digital de imágenes"
González, R.C. y Woods, R.E.
Editorial:Addison-Wesley/Díaz de Santos, 1996
Apuntes de Tecnologías para Imagen Documental (3º ITIG)
Apuntes de Tratamiento de Imágenes (5º II)
Trabajo dirigido de Texturas: Propiedades estadísticas.(José.A.
Díaz-Otero Muñoz-Repiso Federico Navarro Giráldez)
"Microsoft Visual Basic 5, manual del programador"
Editorial: McGraw-Hill 1998
"Programación avanzada con Visual Basic 6.0"
Francesco Balena
Editorial: McGraw-Hill 1999
"The pocket handbook of image processing algorithms in C"
Harley R. Myler, Arthur R. Weeks
Editorial: Prentice Hall 1993
"Microsoft Visual Basic 6.0. Developer's Workshop. Fifth edition"
John Clark Craig, Jeff Webb
Microsoft Press (1998)
http://www.ee.siue.edu
"Color Conversion Algorithms"
http://www.cs.rit.edu/~ncs/color/t_convert.html
Nan C. Schaller
Professor, Computer Science Department
Rochester Institute of Technology
Barba Riquel, Mari Carmen
35
Texturas Caracterizadas Topológicamente
ANEXO I
TEST
1. Si el número de componentes conexas cambia rápidamente al coger
umbrales cercanos, estaremos ante una imagen...
a) muy granulosa
b) granulosa
c) poco granulosa
2. El
a)
b)
c)
MRCG es...
un método matemático para medir 4-conectividad
un método para texturizar una imagen
un método para caracterizar texturas
3. En la expresión {Ns(t)}s  S, t es...
a) el tamaño
b) la textura
c) el umbral
4. Los resultados obtenidos por el MRCG...
a) dependen de la orientación de la imagen
b) no dependen de la orientación de la imagen
c) en ocasiones dependen de la orientación de la imagen
5. Si
a)
b)
c)
una textura es poco fina significa que en la imagen hay...
componentes conexas grandes
componentes conexas pequeñas
no hay componentes conexas
6. Las texturas formadas por una repetición de elementos básicos se
denominan...
a) estadísticas
b) estructurales
c) topológicas
7. El
a)
b)
c)
MRCG se basa en...
4-conectividad
6-conectividad
8-conectividad
Barba Riquel, Mari Carmen
36
Texturas Caracterizadas Topológicamente
8. Un vértice abierto en un modelo de filtro es equivalente dentro de una
imagen binaria a ...
a) un píxel blanco
b) un píxel negro
c) a ninguno de los anteriores
9. Señale cuál de estas afirmaciones es correcta:
a) El MRCG es un método para caracterizar macrotexturas
b) El cálculo de los grafos del MRCG es complejo pero obtenemos unos
resultados muy buenos
c) El cálculo de los grafos del MRCG es de orden lineal
10. ¿Es bueno realizar la ecualización del histograma antes de trabajar con la
imagen?
a) Sí
b) No
c) Depende
Barba Riquel, Mari Carmen
37
Descargar