3. tratamiento digital de imÁgenes para...
TRANSCRIPT
Eugenia Ramírez Solano Página 19
3. TRATAMIENTO DIGITAL DE
IMÁGENES PARA CLASIFICACIÓN
3.1. Estado del arte En las últimas décadas muchos han sido los autores que se han centrado en
desarrollar algoritmos de detección de patrones en las lesiones pigmentadas de la piel
por ser el método más usados por los dermatólogos. Los patrones pueden ser globales o
locales en función de si cubren la mayor parte de la lesión o de si están repartidos por
distintas regiones de la misma [14].
La red pigmentada, los puntos y glóbulos irregulares, el velo azul-blanquecino,
las estructuras de regresión o las estructuras vasculares son algunos de los patrones
locales que se detectan en los métodos desarrollados. El patrón local más estudiado es la
red pigmentada ya que es muy típico de las lesiones melanocíticas por lo que su
detección contribuye a la primera fase del procedimiento en dos etapas, la
diferenciación entre lesión melanocítica y no melanocítica. Además, si la red no es
regular el diagnóstico estará asociado al melanoma. Así pues gracias a toda la
información que aporta este patrón, los especialistas se han centrado en su detección.
Anantha et al. [6] trabajaron con dos algoritmos de identificación de texturas
llamados NGLDM y LAWS para la detección de la red pigmentada. Los resultados que
se obtuvieron en la correcta clasificación de las imágenes fueron de un 78% y un 65%
respectivamente sobre 155 lesiones a estudiar.
Sadegui et al. [9] desarrollaron un método basado en la detección de borde y la
búsqueda de estructuras cíclicas y mallas. La imagen se pasa por un filtro LOG el cual
detecta los cambios de intensidad dando como resultado una imagen binaria. En esta
imagen binaria se buscan estructuras circulares y en función de la densidad de la imagen
obtenida se decide si la imagen presenta una red pigmentada o no (Presento or Absent).
Un ejemplo de este proceso se recoge en la siguiente figura.
Eugenia Ramírez Solano Página 20
Ilustración 11 - Ejemplo del método de Sadeghi
Para probar el método se evaluaron 500 imágenes y se obtuvo un porcentaje de
acierto del 94.3%
Baratah et al[7] se centraron también en la detección de la red pigmentada. Su
método usó bancos de filtros direccionales obteniendo, al igual que en el caso anterior,
una imagen binaria con la que detectar la presencia de la red o no. Los filtros
direccionales usados estaban basados en los filtros 2-D Gabor. El diagrama de bloques
del sistema que propusieron se recoge en la siguiente figura:
Eugenia Ramírez Solano Página 21
Ilustración 12 - Diagramas de bloques del algoritmos de Barata et al.
Muchos otros autores, como Celebi et al. [8], centraron su atención en otros
patrones locales. Celebi detectó el velo azul-blanco (blue-white veil).
Betta. Et al. [10] desarrollaron un método para detectar la red pigmentada atípica
o el patrón vascular atípico. Para la red pigmentada usaron técnicas espectrales y
estructurales de análisis mientras que para la segunda característica se basaron en las
componentes HLS del color. Tras realizar las pruebas pertinentes se observó que el
método para detectar la red pigmentada atípica daba buenos resultados, sin embargo el
segundo método tuvo algunas detecciones erróneas.
Gola et al. [11] por su parte intentaron detectar tres patrones globales. Para ello
desarrolló tres algoritmos distintos. Los dos primeros, basados en la detección de
bordes, detectaban el patrón globular y el reticulado. En el tercero analizaron el color en
RGB para detectar el “blue veil pattern”. Los tres algoritmos se probaron con un
conjunto de 20 imágenes por patrón global y tuvo un porcentaje de acierto del 85%.
Eugenia Ramírez Solano Página 22
Existen también muchos trabajos que usan bancos de filtros para el estudio de la
textura, formando distribuciones de entrenamiento a partir de las representaciones
estadísticas de las respuestas de los filtros.
En este campo, a pesar de aunque hay varios autores que trabajaron en él, se ha
cogido el clasificador VZ de Varma y Zisserman [2] como referente.
El clasificador VZ, como es habitual, se divide en dos etapas. En la primera
etapa de aprendizaje se crean los modelos de las texturas a partir de las respuestas a los
bancos de filtros de las imágenes de entrenamiento. En la segunda etapa una imagen
nueva se clasificará comparando su distribución con las de los modelos del
entrenamiento.
En la fase de entrenamiento las imágenes de entrenamiento son convolucionadas
con los bancos de filtros. El número de filtros del banco era normalmente 50 por lo que
para cada píxel de cada imagen se obtendrían 50 respuestas distintas, es decir, un píxel
quedaría representado por Nfil respuestas, siendo Nfil el número de filtros del banco.
En este punto habría que preguntarse si realmente es útil toda la información
obtenida ya que si cada píxel está representado por Nfil respuestas tendremos una
cantidad elevada de datos que manejar. Repasando nuestro objetivo y el explicado hasta
ahora, nuestra intención es ser capaz de clasificar imágenes según su textura. La textura
es una propiedad de los materiales que no se puede medir, es algo intuitivo.
Observemos las siguientes imágenes de texturas:
Ilustración 13 – Ejemplos de texturas
Eugenia Ramírez Solano Página 23
La mayoría de la gente coincidiría en que la primera sería una textura granulada,
y la segunda una textura rugosa, por lo que aunque no tenemos forma de cuantificar la
textura sí somos capaces de diferenciar entre ambas. Esto se debe a que los píxeles de
cada imagen guardan una relación entre sí que los caracteriza. En el primer ejemplo la
imagen está compuesta de mucho gránulos, en el caso de que tuviéramos una imagen
lisa todos los píxeles serían iguales y así con cada tipo de textura. Se deja ver pues, que
una textura tiene ciertas propiedades espaciales que se repiten, es decir, contiene mucha
información redundante en sí misma.
Retomando la pregunta que nos hacíamos anteriormente, ¿toda la información
que obtenemos de los bancos de filtros es necesaria? La respuesta obviamente es
negativa por la explicación que acabamos de dar. Así pues, tras procesar todos los
píxeles de todas las imágenes tendríamos Nfil componentes por cada píxel procesado
como comentamos anteriormente. Sin embargo, al tener información redundante surgió
la idea del “clustering”, que se basa en reducir la información obtenida a un conjunto
pequeño de prototipos de respuesta a los filtros. Estos prototipos son conocidos como
textons. El algoritmo de cuantización usado normalmente es el K-means.
Antes de explicar los fundamentos del k-means explicaremos un par de
conceptos que nos ayudarán a entender el método. Llamamos “cluster”, o grupo, a un
conjunto de objetos que son similares entre ellos y diferentes de los objetos que
pertenecen a otro “cluster”. De esta forma cuando hablamos de “clustering” estamos
hablando de subdividir el conjunto de datos que tenemos en grupos que guarden
similitudes entre sí.
El k-means, como hemos dicho, es el algoritmo de clustering más usado y
conocido. Su nombre se debe a que representa cada uno de los cluster por la media de
sus puntos, es decir, por el centroide del grupo. El método se inicia con K cluster
iniciales. A continuación se asignan los datos al cluster más cercano. Cuando todos los
datos tienen un centroide asociado se recalcula el centroide formado por el conjunto de
puntos y de nuevo se vuelven a reasignar los puntos. Este proceso se repetirá hasta que
el sistema converja y obtengamos los cluster definitivos o textons. Un ejemplo del K-
means se muestra en la siguiente figura:
Eugenia Ramírez Solano Página 24
Ilustración 14 - Ejemplo de Clustering
En el ejemplo vemos cómo se han dibujado un elevado número de puntos. Sin
embargo como están localizados por zonas podemos quedarnos con los centroides de
esas nubes. En nuestro algoritmo haremos lo mismo para reducir puntos pero en un
espacio 8-dimensional.
Así pues, continuando con el clasificador VZ, para simplificar los resultados
obtenidos del banco de filtros se aplicó k-means. Los centroides de los clusters, o
textons, obtenidos formaron la base del diccionario de modelos de texturas. Una vez que
se obtuvo este diccionario de textons se pasó a formar los modelos de las imágenes de
entrenamiento. Para ello, se asignó cada píxel de una imagen al centroide más cercano.
Estos datos quedaron recogidos en un histograma que sería el modelo de la imagen. Este
histograma por tanto estaría compuesto por tantos bins como componentes tuviera el
banco de filtros.
Este proceso se repitió para todas las imágenes que formaron el entrenamiento
por lo que cada textura quedó representada por tantos modelos como imágenes de
entrenamiento hubiera de dicha textura en el conjunto.
Para catalogar una imagen nueva, en la etapa de clasificación se compararía el
modelo de dicha imagen con los modelos aprendidos anteriormente. Para ello la imagen
nueva se convolucionaría con el banco de filtros de nuevo obteniendo las respuestas
Eugenia Ramírez Solano Página 25
correspondientes. Estas se compararían con los textons del diccionario quedando otra
vez cada píxel de la imagen de prueba asociado a un texton y dando lugar al histograma
propio de la imagen de test. El último paso sería comparar este histograma con los
modelos formados en la etapa de entrenamiento. La imagen de test pertenecerá a la
textura del modelo más cercano al histograma de test. Para medir la distancia entre los
histogramas y poder realizar la comparación Varma usó la medida de distancia χ².
3.2. Algoritmo implementado Tras investigar los algoritmos implementados para el análisis de patrones
centramos nuestro proyecto en Varma y Zisserman y su algoritmo basado en el conjunto
de vecinos [2]
Al desarrollar el clasificador VZ basado en bancos de filtros, Varma y Zisserman
se centraron en reducir la carga computacional que este requería. Es por ello que se
comenzó a investigar sobre cómo extraer la información que caracteriza la textura sin
tener redundancia. Finalmente demostraron que, en lugar de trabajar con un banco de
filtros, se podría trabajar con el conjunto de vecinos de cada píxel ya que en ellos se
encontraba el patrón que definiría la textura, ahorrando tener tanta información
redundante y tanto coste computacional [1]. Implementaron varios algoritmos basados
en esta idea que explicaremos a continuación.
Este algoritmo, es prácticamente igual al clasificador VZ con la salvedad de que
se sustituye el banco de filtros y en su lugar se trabaja con el vecindario de cada píxel de
la imagen. De esta forma, para cada píxel, se cogía su conjunto de vecinos (NxN, en
nuestro caso 3x3), se reordenaba y se almacenaba en un vector formando un espacio N²
dimensional. De esta forma, el algoritmo procesaba, por cada imagen de una textura, el
píxel central y sus vecinos y los iba guardando en una matriz. Aplicando k-means a esta
matriz se obtendrían los centroides, o más comúnmente, los textons que se usarían para
formar el modelo de cada imagen de entrenamiento. Estos textons estarían en un espacio
N-dimensional, es decir, cada texton tendría N componentes. Para el caso de un
vecindario de 3x3, los textons serían puntos de 9 coordenadas.
Varma y Zisserman demostraron en su estudio que había suficiente información
en la distribución de probabilidad conjunta de los 9 valores (el píxel central y sus 8
vecinos) para poder discriminar entre tipos de texturas. Este clasificador recibió el
nombre de Joint Classifier.
Eugenia Ramírez Solano Página 26
A continuación estudiaron las relaciones entre el píxel central y el conjunto de
vecinos y cómo de significante era la distribución de probabilidad conjunta para la
clasificación. Se llegó a la conclusión de que aunque el píxel central es significativo la
probabilidad estaba condicionada realmente por el conjunto de vecinos por lo que
eliminaron el píxel central y trabajaron únicamente con el vecindario. De esta forma en
lugar de almacenar el píxel central con sus 8 vecinos se quedaron con estos últimos. En
este caso los textons pasaron a tener N-1 componentes. Los resultados obtenidos con
este método fueron muy similares a los del Joint Classifier. Este método recibió el
nombre de Neighbourhood classifier.
Finalmente, se pasó al otro extremo y se estudió la distribución del píxel central
condicionada por sus vecinos. Para ello, en primer lugar se obtuvieron los textons
teniendo en cuenta solamente los 8 vecinos, como se hizo en el Neighbourhood
classifier. A continuación se asignaron los píxeles de las imágenes a los textons más
próximos, como se hacía en los anteriores clasificadores. Sin embargo en este
algoritmo, para cada texton, para los píxeles asociados, se tuvo en cuenta el valor de
cada uno de ellos obteniendo así un histograma. El modelo por tanto ahora estaba
formado por tantos histogramas como textons hubiera, y cada histograma tendría tantos
bins como intervalos de intensidad del píxel central se consideraran.
Resumiendo, el modelo de una imagen de entrenamiento sería un conjunto de
histogramas unidimensionales, uno por cada textons, en el cual se indicaría el valor de
los píxeles centrales asociados al textons en cuestión. Este clasificador se denominó
MRF (Markov Random Field) Classifier. Los resultados obtenidos en la clasificación de
imágenes nuevas fueron mejores que con los dos algoritmos anteriores como
demostraron VZ en sus pruebas [2].
A continuación explicaremos con algo más de detalle los algoritmos
desarrollados en nuestro caso.
Eugenia Ramírez Solano Página 27
3.2.1. Estudio en escala de grises
Como ya se ha comentado en este proyecto nos hemos centrado en detectar
cuatro texturas: homogéneo, paralelo, reticulado y empedrado. El primer paso es crear
el diccionario de textons para formar los modelos de las texturas. Estos modelos serán
comparados con los modelos de las imágenes a clasificar pudiendo clasificar así dichas
imágenes.
Tras estudiar los tres algoritmos de Varma y Zisserman se decidió implementar
el MRF Classifier por ser el más eficiente.
En primer lugar, se cargaron las imágenes en escala de grises de forma que cada
píxel podía tener un valor de intervalo [0,255]. A continuación se recorrió el conjunto
de imágenes de cada textura reordenando los píxeles de la imagen. Para ello por cada
píxel se tomó su vecindario 3x3 formando un vector en un espacio 8-dimensional.
Todos los vectores se almacenaron en una matriz de dimensiones [Nº píxel totales, 8].
Para reducir la gran cantidad de puntos obtenidos, y recordando que tenemos
redundancia en los datos, se aplicó k-means para quedarnos solo con 10 centroides.
Este proceso se realizó para las cuatro texturas por lo que finalmente se
obtuvieron 40 textons, 10 por cada textura, que formaron el diccionario de textons. Una
vez obtenidos los textons, se asignó cada punto 8-dimensional (el vecindario) al
centroide más cercano al mismo (este proceso lo hace internamente el k-means).
Finalmente solo quedaría calcular la distribución del píxel central condicionada
por sus vecinos para obtener el modelo de la imagen de entrenamiento. Para ello, se
formó un histograma unidimensional por cada centroide con tantos bins como
particiones se hubieran tomado en el intervalo [0,255]. Así pues la búsqueda que se
llevó a cabo fue, por cada imagen, por cada centroide, por cada píxel central asociado a
dicho centroide, a qué intervalo del rango [0,255] pertenecía. De esta forma, el modelo
de cada imagen de entrenamiento estaría formado por 40 histogramas (uno por cada
centroide), cada uno de los cuales representaría el valor del píxel central para los
conjuntos de vecinos asociados al centroide del histrograma.
Repitiendo este proceso de formación de histogramas para cada una de las
imágenes de entrenamiento obtuvimos el “Diccionario de texturas”. A continuación se
muestra el diagrama de bloques del algoritmo implementado:
Eugenia Ramírez Solano Página 28
Ilustración 15 - Diagrama de bloques del algoritmo implementado
Eugenia Ramírez Solano Página 29
Una vez obtenidos los modelos de las imágenes de aprendizaje se pasa a la etapa
de clasificación en la cual se compara el modelo de la imagen a clasificar con los
modelos del entrenamiento por lo que lo primero que había que hallar era el modelo de
la imagen de test. Para obtener este modelo se cargó la imagen en escala de grises y se
procesó de la misma forma que las imágenes de aprendizaje, guardando los vecindarios
de cada píxel en una matriz. A continuación se asignó el centroide más cercanos de los
40 del diccionario a cada uno de los puntos 8-dimensionales almacenados. Finalmente
se hallaron los histogramas para cada centroide según el valor del píxel central de cada
conjunto de vecinos. Este proceso se llevaba a cabo respondiendo a la siguiente
pregunta: por cada centroide, para cada píxel central asociado a ese centroide, ¿a qué
intervalo pertenecía? De esta forma ya tendríamos formado el modelo de la imagen y
estaríamos en disposición de comparar con los modelos del entrenamiento con el nuevo
modelo formado.
En un principio se usaron varios algoritmos de medición de distancias entre
histogramas para realizar estas comparaciones: batthacharyya distance, χ² y The Earth
Mover's Distance (EMD).
Los dos primeros son del tipo “bin-to-bin” porque se asume que los histogramas
ya están alineados de forma que el bin de un histograma es comparado con el
correspondiente bin del otro histograma. Estas distancias se definen a continuación
[12],[13]:
( )
∑
( )
√ ∑√
En el caso del EMD la comparación es “cross-bin”, es decir, una comparación
global entre bins, sin suponer que los histogramas están alineados. El EMD se basa en la
solución de un problema de transporte calculando los costes que suponen los transportes
en el histograma para igualarlos. La distancia EMD se muestra a continuación y se
observa como en este caso sí que se tiene en cuenta las relaciones entre bins distintos.
Eugenia Ramírez Solano Página 30
( ) ∑ ∑
∑ ∑ donde {
Tras hacer pruebas para comprobar cuál era el más eficiente y más apropiado
para nuestro caso, nos quedamos con el EMD, como era de esperar al ser “cross-bin”.
El algoritmo implementado nos devolvía la imagen de entrenamiento a la que
más se parecía la imagen a catalogar, por lo que comprobando a qué textura pertenecía
el modelo de entrenamiento señalado ya teníamos la imagen clasificada.
3.2.2. Estudio en color, Lab
En un intento de mejorar el algoritmo anterior, se contempló la idea de
introducir el color en lugar de trabajar en escala de grises. El fundamento del algoritmo
es exactamente igual que el explicado en el apartado anterior.
El primer paso sería leer la imagen en Lab, que es el espacio de color en el que
vamos a trabajar. Sin embargo en este caso tendríamos por cada píxel, tres componentes
(Lab) en lugar de un valor del rango [0,255] como teníamos antes.
Así pues, al trabajar en color, necesitamos un pre-procesado de la imagen antes
de poder estudiar la textura para conseguir tener un único valor por píxel en lugar de
tres componentes. La solución está en la línea de lo hecho hasta el momento.
Al leer las imágenes tendremos por cada píxel, un vector de tres componentes
correspondientes a las componentes “L”, ”a” y ”b” que forman el color del píxel. De
esta forma leeremos todos los píxeles de todas las imágenes y almacenaremos su color
en una matriz. De nuevo podemos intuir que en esta matriz de colores habrá muchos de
ellos repetidos, ya que algunos formarán parte de la misma imagen e incluso, los colores
de las distintas lesiones son similares. Además las lesiones de la piel suelen tener
colores marrones, negros, azules y rara vez aparecerán colores como el rosa, el naranja,
etc. Es por ello que cuantificaremos los colores aplicando de nuevo k-means. De esta
forma pasaremos de tener colores a tener el número de colores que le indiquemos al
kmeans.
Pondremos un ejemplo aclaratorio. Supongamos que los colores recogidos de los
píxeles de las imágenes son los que se muestran en la siguiente figura (sabemos que esto
no es así porque ya hemos comentado que hay algunos colores que no se darán en las
lesiones pigmentadas de la piel):
Eugenia Ramírez Solano Página 31
Ilustración 16 - Ejemplo del k-means del color
En la imagen comprobamos que tenemos una cantidad muy elevada de colores
con la cual es difícil trabajar. Si aplicamos k-means podríamos reducir dichos colores a
tantos como nº de centroides le indiquemos al k-means. De esta forma, si
introdujéramos K=9, obtendríamos los centroides de 9 nubes de puntos, unificando los
colores de tonalidades similares y quedándonos finalmente con 9. La reducción de los
datos se puede apreciar en la siguiente figura:
Eugenia Ramírez Solano Página 32
Una vez que tengamos los centroides de los colores, debemos indexar dichos
colores. De esta forma haremos corresponder cada píxel, definido por un color en Lab
de tres componentes, con el índice del color más cercano. De este modo ya tendremos
los píxeles de las imágenes definidos por un único valor, el índice del color asociado.
En esta situación nos encontramos ya en el punto de partida del algoritmo en
escala de grises. Los píxeles de la imagen serán un único valor, si bien en el caso
anterior este valor era un número en la escala de grises [0,255], ahora será el índice del
centroide, es decir, del color, al que está asignado el píxel.
Ilustración 17 – Ejemplo del k-means para k=9
Eugenia Ramírez Solano Página 33
El procesamiento de las imágenes, junto con el desarrollo del algoritmo serán
iguales que en el estudio en escala de grises excepto al calcular los centroides asociados
a la textura.
En escala de grises almacenábamos el vecindario de cada píxel en una matriz y a
ese conjunto de puntos 8-dimensionales (el vecindario) le aplicábamos k-means para
obtener los centroides que definirían la textura. Los valores de los puntos eran números
de [0,255] correspondientes a la escala de grises. En el caso que nos ocupa los valores
de los puntos serían un valor del intervalo [1-nº de centroides], es decir, el índice del
color asociado. El k-means basa su funcionamiento en el cálculo de distancias entre
puntos, en el caso de grises calculaba la diferencia entre distintos grados de grises. En
este caso ha habido que modificar el k-means para que en lugar de realizar la distancia
entre índices de colores, que es el dato que recibe, calculara la distancia entre los
colores indexados por dichos índices. Explicaremos esto con un ejemplo sencillo.
Supongamos que los índices [34, 50, 35, 52, 40] corresponden con los colores [negro,
verdoso, amarillo, rosa, rojo] respectivamente. Supongamos también que el k-means
recibe, entre otros puntos, los dos siguientes: [34, 50, 35] y [35, 52, 40]. Al aplicar k-
means a estos vectores, este se basaría en las distancias entre dichos números, sin
embargo estos índices no se corresponden realmente con la posición que tienen los
colores a los que indexan en el espacio (índices cercanos no significa colores cercanos).
Para solucionar esta situación hubo que modificar el k-means para que no
subdividiera el conjunto de datos en función del índice del color al que estaban
asociados. Para definir los centroides a los que asociar los vecindarios compararía los
colores en sí de los puntos y no sus índices, es decir, calcularía la distancia euclídea
entre los colores representados por esos índices.
Una vez obtenidos los textons de la textura se hallaron los histogramas como se
hizo en el algoritmo en escala de grises, basándonos en el MRF classifier. Una vez que
se obtuvieron los modelos se implementó la etapa de clasificación.
En esta fase también se realizaron algunas modificaciones respecto al trabajo en
grises. La imagen a clasificar se cargó en Lab y a continuación se asoció el color de
cada píxel con el centroide de color más cercano de los obtenidos en la etapa de
entrenamiento. Una vez que los píxel de la imagen estaban definidos por el índice de un
color se aplicaba el k-means modificado y se formaban los histogramas del modelo.
Eugenia Ramírez Solano Página 34
Finalmente, había que comparar el modelo de la imagen de test con los modelos
de entrenamiento para poder catalogar la imagen con la textura del modelo al que
guardara más parecido. En este caso también hubo que modificar el EMD para que
calculara la distancia euclídea entre los colores indexados y no entre los índices en sí.