7 descripciÓn del algoritmo 7.1 e structura general de...

17
Capítulo 7: Descripción de Algoritmo “Extracción de características de textura basada en la transformada Wavelet discreta” 35 7 DESCRIPCIÓN DEL ALGORITMO 7.1 ESTRUCTURA GENERAL DE LA SIMULACIÓN El objetivo del programa es tomar una serie de muestras de varias imágenes patrón y determinar a qué textura patrón pertenece cada muestra. Se tiene un total de 20 texturas patrón. En el reconocimiento de patrones las clases son conocidas a priori, además para clasificar la textura ésta debe compararse con el resto de texturas a clasificar. Por tanto debe haber varias texturas de la misma clase en el conjunto de texturas utilizadas en el reconocimiento de patrones. Para conseguirlo se divide cada una de las 20 imágenes patrón de dimensión 640x640 píxeles en 100 imágenes muestra de tamaño 64x64, con lo cual se obtiene un total de 2000 imágenes muestra. Son estas imágenes muestra las que se deben identificar a partir de sus características y para ello hay que calcular su transformada Wavelet. Ya se explicó que el tipo de transformada utilizado es una representación Wavelet overcomplete spline biortogonal de orden 2 y profundidad 4. Así, son 4 los niveles de descomposición y en cada uno de ellos se obtienen 3 imágenes de detalles, en horizontal, vertical y diagonal. En total se manejan 12 imágenes de detalles por cada imagen muestra. Las características de energía, histograma y co-ocurrencia de estas imágenes de detalles son las que conformarán los vectores de datos que se van a comparar con el fin de determinar el grupo al que pertenece la imagen muestra correspondiente. El diagrama de flujo general de la simulación de la figura 25 muestra cada uno de los procesos por los que pasa la imagen patrón de 640x640 hasta conseguir identificar cada imagen muestra 64X64 con un tipo de textura. Las funciones ‘Muestreo’ y ‘Texturas’ conforman la primera parte del trabajo, ya que muestran la imagen y obtienen las características de cada muestra. La segunda parte se realiza mediante la función ‘ClasifPatron’ una vez que se han obtenido todas las características de todas las imágenes muestras. Dichas características se ordenan según su importancia utilizando un algoritmo SFFS, luego se compara el vector de características de la muestra que se va a clasificar con el resto de vectores (leave-one-out), de los que se conoce el grupo al que pertenece, usando el método del vecino más cercano. Cada una de estas funciones se estudiará detenidamente en apartados posteriores. La función Texturas’ a su vez hace llamadas a otras funciones, que también se explicarán detalladamente. Mientras que la función ‘ClasifPatron’ utiliza instrucciones Matlab bastante interesantes y que serán convenientemente descritas en los sub-apartados correspondientes.

Upload: trinhkhuong

Post on 28-Sep-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 35

7 DESCRIPCIÓN DEL ALGORITMO

7.1 ESTRUCTURA GENERAL DE LA SIMULACIÓN

El objetivo del programa es tomar una serie de muestras de varias imágenes patrón y determinar a qué textura patrón pertenece cada muestra. Se tiene un total de 20 texturas patrón. En el reconocimiento de patrones las clases son conocidas a priori, además para clasificar la textura ésta debe compararse con el resto de texturas a clasificar. Por tanto debe haber varias texturas de la misma clase en el conjunto de texturas utilizadas en el reconocimiento de patrones. Para conseguirlo se divide cada una de las 20 imágenes patrón de dimensión 640x640 píxeles en 100 imágenes muestra de tamaño 64x64, con lo cual se obtiene un total de 2000 imágenes muestra.

Son estas imágenes muestra las que se deben identificar a partir de sus características y para ello

hay que calcular su transformada Wavelet. Ya se explicó que el tipo de transformada utilizado es una representación Wavelet overcomplete spline biortogonal de orden 2 y profundidad 4. Así, son 4 los niveles de descomposición y en cada uno de ellos se obtienen 3 imágenes de detalles, en horizontal, vertical y diagonal. En total se manejan 12 imágenes de detalles por cada imagen muestra. Las características de energía, histograma y co-ocurrencia de estas imágenes de detalles son las que conformarán los vectores de datos que se van a comparar con el fin de determinar el grupo al que pertenece la imagen muestra correspondiente.

El diagrama de flujo general de la simulación de la figura 25 muestra cada uno de los procesos por

los que pasa la imagen patrón de 640x640 hasta conseguir identificar cada imagen muestra 64X64 con un tipo de textura.

Las funciones ‘Muestreo’ y ‘Texturas’ conforman la primera parte del trabajo, ya que muestran la

imagen y obtienen las características de cada muestra. La segunda parte se realiza mediante la función ‘ClasifPatron’ una vez que se han obtenido todas las características de todas las imágenes muestras. Dichas características se ordenan según su importancia utilizando un algoritmo SFFS, luego se compara el vector de características de la muestra que se va a clasificar con el resto de vectores (leave-one-out), de los que se conoce el grupo al que pertenece, usando el método del vecino más cercano.

Cada una de estas funciones se estudiará detenidamente en apartados posteriores. La función

‘Texturas’ a su vez hace llamadas a otras funciones, que también se explicarán detalladamente. Mientras que la función ‘ClasifPatron’ utiliza instrucciones Matlab bastante interesantes y que serán convenientemente descritas en los sub-apartados correspondientes.

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 36

Figura 25: Diagrama de flujo general de la simulación

7.2 MUESTREO

La función ‘Muestreo’ divide la imagen patrón ‘Nombre_Imagen’ que se le pasa como parámetro de entrada en una serie de imágenes muestra. La imagen patrón tiene dimensión 640x640 píxeles y de ella se obtienen 100 imágenes muestra de dimensión 64x64 que pertenecen al mismo grupo o tipo de textura que la imagen patrón. De esta forma se consiguen 100 imágenes de un mismo tipo que formarán parte del conjunto de imágenes a clasificar. Esto es importante ya que de ese conjunto se tomará una imagen y se clasificará comparándola con el resto de imágenes, con lo que debe haber más de una imagen del mismo grupo en el conjunto de imágenes a clasificar.

Esta función divide las 640 filas de la imagen patrón en 10 fracciones de 64 filas y las 640 columnas

en 10 partes de 64 columnas. Cada imagen muestras se obtiene tomando una fracción de filas y una fracción de columnas, de modo que las imágenes muestra no estén superpuestas.

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 37

Además, las va almacenando en una matriz 3D de dimensiones 64x64x100 que contiene todas las imágenes muestra pertenecientes a un mismo patrón. Será esta matriz ‘Muestras_Imagen’ la que devuelva la función como parámetro de salida. La función también permite visualizar por pantalla las 100 imágenes muestra, con lo que se comprueba visualmente que no existe superposición entre ellas.

Figura 26: Diagrama de flujo de la función “Muestreo”

7.3 TEXTURAS

Los parámetros de entrada de la función ‘Texturas’ son la matriz 3D ‘Muestras_Imagen’ con las 100 imágenes muestra pertenecientes al mismo patrón y el número que identifica el grupo al que pertenecen ‘Numero_Grupo’. Como resultado devuelve los vectores con todas las características de energía (‘caractE’), de histograma (‘caractH’) y de co-ocurrencia (‘caractCO’).

La función ‘Texturas’ hace una llamada a la función ‘Wavelet’ pasándole como parámetro una

imagen muestra. La función ‘Wavelet’ realiza dos tareas. Por un lado halla la transformada Wavelet con lo que obtiene las matrices de los coeficientes de aproximación o tendencia (‘A’) y de orientación horizontal

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 38

(‘H’), vertical (‘V’) y diagonal (‘D’) de la imagen muestra. Se trata de matrices 3D ya que contienen los coeficientes para cada uno de los cuatro niveles de descomposición. Por otra parte, a partir de estas matrices obtiene las características de energía (‘ENER’), histograma (‘HIST’) y matriz de co-ocurrencia (‘CO’) de esa imagen muestra.

Por último la función ‘Texturas’ va almacenando los vectores de características de cada imagen

muestra de todas las imágenes patrón en matrices 2D de energía (‘caractE’), histograma (‘caractH’) y co-ocurrencia (‘caractCO’), que será lo que devuelva. Dichos vectores se almacenan en columnas, de modo que cada columna de la matriz de energía (‘caractE’) será el vector energía (‘ENER’) de una de las 2000 imágenes muestra. Para identificar la columna en la que almacenar el vector de características se utiliza el número que identifica el grupo de texturas al que pertenece la imagen muestra ‘Numero_Grupo’. Así, las 100 primeras columnas de estas matrices se corresponden con las características de las 100 imágenes muestra del grupo 1 (texturas del tipo 1), las 100 columnas siguientes con las texturas del grupo 2, y así sucesivamente.

Figura 27: Diagrama de flujo de la función “Texturas”

7.3.1 Transformada Wavelet y Obtención de Características de Textura

En la siguiente figura se observa el diagrama de flujo de la función ‘Wavelet’:

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 39

Figura 28: Diagrama de flujo de la función “Wavelet”

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 40

La función ‘Wavelet’ realiza la primera parte del presente trabajo: transformada Wavelet y vectores de características. Se la pasa una imagen muestra y devuelve sus vectores de características. Para ello, en primer lugar, la función ‘Transformar’ obtiene la representación Wavelet overcomplete de profundidad cuatro mediante la transformada Wavelet spline biortogonal de orden dos que proporciona las matrices con los coeficientes de aproximación (‘A’) y de orientación horizontal (‘H’), vertical (‘V’) y diagonal (‘D’). Dichas matrices son de tres dimensiones ya que contienen cuatro sub-matrices correspondientes a los cuatro niveles de descomposición de la transformada Wavelet.

Partiendo de estas matrices ‘A’, ‘H’, ‘V’ y ‘D’ se calculan las características de energía, histograma y

co-ocurrencia que describen a la imagen muestra que se está procesando. De modo que la función ‘Energy’ devuelve el vector de energía y la función ‘Histograma’ el vector con los parámetros α y β que identifican el histograma, obtenidos a partir de la energía y la desviación media calculadas en ‘Energy’. Por otro lado, a la función ‘Coomat’ se le pasa una de las sub-matrices de detalles y devuelve sus matrices de co-ocurrencia para 0º, 45º, 90º y 135º. Luego la función ‘Cocaract’ calcula los ocho descriptores de cada una de las cuatro matrices de co-ocurrencia y las promedia, devolviendo el vector de co-ocurrencia de la sub-matriz de detalles correspondiente.

En los siguientes apartados se analiza más en profundidad cada una de las funciones que son

llamadas desde la función ‘Wavelet’ y que permiten realizar la transformada y obtener las características de las imágenes muestra.

7.3.1.1 Transformada Wavelet spline biortogonal

La función ‘Transformar’ tiene como objetivo hacer la transformada Wavelet. Como se vio en el apartado 4, se realizará una transformada Wavelet del tipo spline biortogonal de orden 2 y se obtendrá su representación overcomplete con 4 niveles de descomposición. En este apartado se estudian las instrucciones Matlab utilizadas para conseguir este fin.

La función ‘Transformar’ recibe la imagen muestra (I) y en número de niveles de descomposición (N),

en este caso N=4. Mientras que devuelve cuatro matrices con:

♦ Los coeficientes de aproximación A(:,:,i) del nivel de descomposición i, donde i=1…4.

♦ Los coeficientes de orientación horizontal H(:,:,i) del nivel i.

♦ Los coeficientes de orientación vertical V(:,:,i) del nivel i.

♦ Los coeficientes de orientación diagonal D(:,:,i) del nivel i.

Para ello lo primero es conseguir los filtros de descomposición paso de baja H y paso de alta G

visto en las ecuaciones (2) a (5), que son necesarios para obtener las representaciones Wavelet de la imagen original. Dichos filtros deben ser del tipo spline biortogonal y de orden 2. Estos filtros se consiguen gracias a dos instrucciones Matlab:

[RF,DF] = biorwavf ('biorNr.Nd'):

Biorthogonal spline Wavelet filtres. Computa los dos filtros escalados correspondientes:

filtro escalado de reconstrucción (RF) y filtro escalado de descomposición (DF), asociados a la Wavelet biortogonal especificada. El nombre que identifica al conjunto de Wavelets spline biortogonales ‘biorNr.Nd’, donde Nr y Nd son números que especifican el orden de los filtros. En este caso, la transformada es de orden dos, con lo cual Nd=2. Los valores de NR y Nd están relacionados de forma que si Nd=2, entonces Nr deber ser también igual a 2:

Nr = 1 Nd = 1, 3 ó 5

Nr = 2 Nd = 2, 4, 6 ó 8

Nr = 3 Nd = 1, 3, 5, 7 ó 9

Nr = 4 Nd = 4

Nr = 5 Nd = 5

Nr = 6 Nd = 8

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 41

[Lo_D,Hi_D,Lo_R,Hi_R] = biorfilt (DF,RF):

Biorthogonal Wavelet filter set. Computa los filtros paso de baja y paso de alta de

descomposición y de reconstrucción asociados a la Wavelet biortogonal utilizada en el paso anterior para obtener los filtros escalados RF y DF. Los filtros de descomposición paso de baja (Lo_D) y paso de alta (Hi_D) son los filtros H y G de las ecuaciones (2) a (5) necesarios para hallar la representación Wavelet utilizada en este trabajo.

Figura 29: Diagrama de flujo de la función “Transformar”

Como se puede apreciar en la figura 29, tras obtener los filtros asociados a la transformada que se

quiere representar, falta obtener las sucesivas sub-imágenes de detalle, así como la imagen tendencia, a partir de la imagen muestra inicial. Existe una instrucción en Matlab que permite obtenerlas con facilidad:

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 42

[A,H,V,D] = swt2 (I,N,Lo_D,Hi_D):

Discrete stationary Wavelet transform 2-D. Proporciona la transformada Wavelet estacionaria

con N niveles de descomposición mediante los filtros calculados anteriormente, Lo_D yHi_D. Además tiene la ventaja, para este trabajo, que no submuestrea con lo que se obtiene una representación overcomplete de la transformada Wavelet. De este modo, las sub-matrices de detalles y de aproximación obtenidas tendrán el mismo tamaño que la imagen muestra analizada, 64x64.

Para 1≤ i ≥N, las matrices de salida de ‘swt2’ contendrán los coeficientes de aproximación de

nivel i, A(:,:,i), y de detalles en las tres orientaciones: horizontal H(:,:,i), vertical V(:,:,i) y diagonal D(:,:,i). Estas matrices serán también las que se pasen como salida de la función ‘Transformar’. En realidad sólo serán útiles las tres matrices de detalles en los cuatro niveles de descomposición, son en total doce matrices a las que calcular sus características.

7.3.1.2 Vector de Características de Energía.

Una vez que se han conseguido las sub-matrices con los coeficientes Wavelet de la imagen muestra, la siguiente tarea consiste en calcular sus características. La función ‘Energy’ calcula la energía de cada una de las doce sub-imágenes, por tanto, el vector de energía estará formado por doce características. También calcula la desviación media ya que será necesaria para el cálculo de los parámetros del histograma, como se verá en el apartado siguiente.

Para ello simplemente se aplica las fórmulas (7) y (8) a las matrices tridimensionales H, V y D, recorriendo una a una las sub-matrices de cada nivel, obteniendo así las doce características de energía:

( )[ ] bk bj, Dni · N1 E

kj,

2ni ∑= (7)

bk) (bj, Dni · N1 MD

kj,ni ∑= (8)

El resultado lo devuelve de dos formas: en una matriz y en un vector. Lo hace en forma de matriz para que sea más sencillo obtener los parámetros del histograma ya que cada fila contiene la energía de las matrices horizontal, vertical y diagonal en los cuatro niveles:

⎥⎥⎥

⎢⎢⎢

⎡=

EDEVEH

E

⎥⎥⎥

⎢⎢⎢

⎡=

MDDMDVMDH

MD

Los vectores de energía y de desviación típica están formados por las correspondientes

características en el siguiente orden:

ENER = [ EH(1)...EH(4), EV(1)...EV(4), ED(1)...ED(4) ]

DM = [ MDH(1)...MDH(4), MDV(1)...MDV(4), MDD(1)...MDD(4) ]

El vector ‘ENER’ es ya uno de los que servirá para comparar imágenes con el fin de determinar el tipo de textura al que pertenece la imagen muestra.

A continuación se muestran los pasos dados en esta función:

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 43

Figura 30: Diagrama de flujo de la función “Energy”

7.3.1.3 Vector de Características de Histograma.

La función ‘Histograma’ aplica las fórmulas (12), (14) y (15) para obtener los parámetros α y β que caracterizan el histograma de la sub-imagen a analizar:

( )( )

( ) ( )xx

xxF13

22

ΓΓ

Γ= ⎟

⎠⎞

⎜⎝⎛=

2

211-

mmF β

⎟⎠⎞⎜

⎝⎛Γ

⎟⎠⎞⎜

⎝⎛Γ

=

β

βα

2

1

1m

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 44

Hay que tener en cuenta, como se explica en el apartado 5.3, que los momentos de primer y segundo orden, m1 y m2, necesarios para determinar α y β, se pueden estimar por la desviación media y la energía respectivamente. Por ello se le pasa como entrada las matrices E y MD, en lugar de las sub-matrices de detalles Wavelet.

Finalmente, ambos parámetros se unen en un único vector con 24 características, que será el que sirva para reconocer el patrón de la imagen muestra computada:

HIST = [αH(1..4), αV(1..4), αD(1..4), βH(1..4), βV(1..4), βD(1..4) ]

Figura 31: Diagrama de flujo de la función “Histograma”

7.3.1.4 Vector de Características de Co-ocurrencia.

En primer lugar, la función ‘Coomat’ obtiene cuatro matrices de co-ocurrencia para cada una de las doce sub-matrices de detalles, una para cada orientación principal: 0º, 45º, 90º y 135º. Luego la función ‘Cocaract’ les calcula a todas las matrices de co-ocurrencia derivadas de una misma sub-imagen las descriptores de co-ocurrencia. Por tanto, de cada sub-imagen hay cuatro valores de una determinada característica, que se deben promediar para conseguir el valor de la característica correspondiente. Así se tendrán ocho características de co-ocurrencia por sub-matriz de detalles Wavelet.

El esquema que sigue la función ‘Coomat’ viene dado por la figura 32:

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 45

Figura 32: Diagrama de flujo de la función “Coomat”

Es primordial, llegados a este punto, discretizar los coeficientes de las sub-matrices Wavelet ya que

la matriz de co-ocurrencia se define para valores discretos de niveles de gris. La siguiente instrucción Matlab facilita notablemente este cálculo:

glcm = graycomatrix (I, param1, val1, param2, val2,...)

Esta instrucción crea la matriz de co-ocurrencia de una imagen en escala de grises, dicha

imagen será en este caso cada una de las doce sub-matrices de coeficientes de detalle. Además, sendos parámetros permiten discretizar la imagen I con un número determinado de niveles de gris, así como fijar la orientación en la que se toma el vecino a considerar para crear la matriz de co-ocurrencia:

• 'NumLevels', n permite discretizar la imagen con n niveles de gris. Se toman n=256

niveles ya que es lo más usual al trabajar con imágenes en escala de grises.

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 46

• 'offset',[v h] indica el ángulo del píxel de interés respecto de su vecino, del siguiente

modo, donde D indica la distancia entre ambos, que en este trabajo será D=1: 0º [ 0 D]

45º [-D D]

90º [-D 0]

135º [-D -D]

Mediante la instrucción ‘graycomatrix’ se ha obtenido la matriz de co-ocurrencia, sin embargo dicha

matriz es asimétrica. Para hacerla simétrica, se le suma su matriz traspuesta. Luego se suman todos los coeficientes de la matriz simétrica, que se divide entre este sumatorio para obtener la matriz de co-ocurrencia simétrica normalizada de la que se sacarán más tarde las características de co-ocurrencia. Para calcular la matriz de co-ocurrencia en cada orientación se sigue el mismo procedimiento, variando los valores de offset.

Hasta ahora se han calculado cuatro matrices de co-ocurrencia por cada sub-matriz de detalles. La

función ‘Cocaract’ calcula la característica correspondiente para las cuatro matrices de co-ocurrencia, se tienen así cuatro valores distintos de una misma característica. Promediando dichos valores se obtiene el valor del descriptor que se está calculando.

En total se calculan ocho características de co-ocurrencia para cada una de las sub-imágenes de

detalles que formarán el vector de co-ocurrencia de 96 elementos. Cada característica de co-ocurrencia se corresponderá con los siguientes elementos del vector:

Contraste = CO (1...12) Energía = CO (13...24) Entropía = CO (25...36) Homogeneidad = CO (37...48) Prob. Máxima = CO (49...60)

Tonalidad = CO (61...72)

Importancia = CO (73...84)

Correlación = CO (85…96)

Para una misma característica, los doce valores corresponden con los resultados para las sub-

matrices de detalles calculadas en la función ‘Transformar’, en el orden:

[H(:,:,1)…H(:,:,4), V(:,:,1)…V(:,:,4), D(:,:,1)…D(:,:,4)]

La figura 33 muestra el diagrama de flujo de la función ‘Cocaract’:

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 47

Figura 33: Diagrama de flujo de la función “Cocaract”

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 48

7.4 RECONOCIMIENTO DE PATRONES DE TEXTURA

La función ‘Clasifpatron’ realiza la segunda parte del trabajo, se encarga del reconocimiento de patrones propiamente dicho. A esta función se le pasa la matriz con los 2000 vectores de características, correspondientes a las 2000 imágenes muestras pertenecientes a 20 grupos diferentes. Se le pueden pasar 4 matrices distintas: la de vectores de energía, la de vectores de histograma, la de vectores de co-ocurrencia o la de vectores de histograma y co-ocurrencia. Así mismo, recibe como entrada un vector con el grupo al que pertenece la imagen muestra correspondiente. De modo que la primera columna de la matriz de características, que contiene el vector de características de la primera imagen muestra, pertenece al tipo de textura indicado por el primer elemento del vector ‘grupo’. Los grupos se identifican por números del 1 al 20 ya que se trabajará con ellos en sucesivas instrucciones, como se detallará más adelante.

‘Clasifpatron’ devuelve, como resultado de la selección de características, la matriz cuyas 20

columnas contienen los índices ordenados de las características que mejor clasifican el grupo (de 1 a 20) correspondiente. Además, el resultado del reconocimiento de patrones se expresa de dos formas. Por un lado un vector con igual número de elementos que características (12 si es energía, 24 para histograma, 96 considerando las de co-ocurrencia y 120 sumando las de histograma y co-ocurrencia) de la sub-imagen, que indica el porcentaje de aciertos considerando 1, 2… hasta el total de características.

Según se concretó en el apartado 6, lo primero que se debe hacer es determinar cuáles son las

características que mejor clasifican un determinado grupo. Luego esas características se normalizan ya que el método de clasificación se vale de la distancia euclídea y hay que evitar que aquellas características con mayor varianza dominen esa medida.

Hecho esto, ya se puede realizar el reconocimiento de patrones, cuyo proceso se explica detenidamente en el apartado 7.4.2

7.4.1 Selección de Características.

En matlab existe una instrucción que permite ordenar las características de una matriz cuyas columnas sean vectores de observación y las filas se correspondan con las diferentes características que conforman un vector de observación. Además, se le debe pasar un vector con tantos elementos como columnas tenía la matriz anterior y cuyos elementos valgan 1 para aquellos vectores pertenecientes el mismo grupo que se quiere analizar y 0 el resto. Dicha instrucción es:

[IDX] = rankfeatures (X, Group, ...'NumberOfIndices', N, ...)

Esta función realiza un algoritmo SFFS para seleccionar las características más

significativas de un determinado grupo. En este trabajo la matriz que se le pasa es ‘caractE’ o ‘caractH’ o ‘caractCO’ o ‘caractHCO’,

creadas en la función ‘Texturas’, y cuyas columnas son los 2000 vectores de observación con las 12 características de energía, las 24 de histograma, las 96 de co-ocurrencia y las 120 de histograma y co-ocurrencia, respectivamente. El número de características en cada caso es igual al número de filas de la matriz respectiva.

A partir del vector ‘grupo’ que se le pasa a la función ‘Clasifpatron’ y que contiene los

identificadores de los veinte tipos de textura patrón que se han estudiado (números del 1 al 20, cada uno repetido 100 veces, ya que hay 100 imágenes muestra de cada patrón), se obtiene el vector ‘GPR’ formado por 0’s y 1’s dispuestos según se explicó varios párrafos más arriba, dependiendo del grupo de texturas que se esté analizando.

Además se utiliza la propiedad 'NumberOfIndices' para indicar cuantas características se

quieren tener ordenadas a la salida. En este caso se desean tener todas para poder comprobar cómo de efectivo es el reconocimiento de patrones en función del número de características usadas para discriminar, desde una sola hasta todas las posibles.

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 49

A la salida se tiene un vector con los índices de las características ordenados por significancia, aunque en este trabajo se han agrupado los vectores de todos los grupos en una matriz de modo que cada columna (son 20) contiene los índices de un grupo I(:,i).

Figura 34: Diagrama de flujo de la función “Clasifpatron”, parte en la que se seleccionan las

características más importantes para la clasificación

Finalmente, para dejar las características preparadas para la clasificación, éstas deben

normalizarse con en fin de que aquellas con mayor varianza no sean las que determinen la distancia euclídea entre vectores de características. Se obtienen la mediana y la desviación media de cada tipo de característica (fila de la matriz ‘caractE’, ‘caractH’, ‘caractCO’ o ‘caractHCO’) y a cada una se le resta la mediana y se divide entre la desviación media.

A partir de este momento se trabaja con la matriz de características Y, que es la matriz de entrada X

(‘caractE’, ‘caractH’, ‘caractCO’ o ‘caractHCO’) traspuesta y normalizada. Por tanto ahora las filas son los vectores de observación y las columnas cada una de las características. Ya se puede pasar al reconocimiento de patrones.

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 50

7.4.2 Clasificación de Texturas

Todo el proceso de reconocimiento de patrones se repite considerando una, dos,… hasta el total de características que conforman el vector de observación con el objetivo de determinar cuál es el número óptimo de características a comparar para conseguir la mejor clasificación. Para ello se utiliza la variable NOF que varía de 1 hasta m, que es el número de filas de X (columnas de Y).

Teniendo esto en cuenta, se van tomando uno a uno cada vector de observación (hasta 2000),

recorriendo las filas de Y. Se pretende usar el procedimiento leave-one-out, que consiste en comparar el vector seleccionado con la matriz de vectores de observación, a la que se le quita precisamente el vector el que va a ser clasificado. Se crea por tanto, cada vez que se elige un nuevo vector a clasificar, una matriz que es igual que la matriz Y menos la fila que contiene dicho vector. Será la matriz Z. Igual ocurre con el vector ‘grupo’, siendo el vector resultante ‘G’ el que se usará en la clasificación y que contendrá las etiquetas con los grupos que corresponden a los vectores de observación que componen la matriz Z.

A continuación se clasifican uno a uno todos los vectores de observación sucesivamente mediante el

método del vecino más cercano (knn). Este método se implementa fácilmente en Matlab con la instrucción:

Class = knnclassify (Sample, Training, Group, k, distance, rule)

Se le pasa el vector de observación que se pretende clasificar (Sample), la matriz con el resto de vectores de observación Z (Trainig) y el vector con las etiquetas de los respectivos grupos G (Group). Hay que tener en cuenta que Sample y Training deben tener el mismo número de columnas, es decir, el mismo número de características. Además, Training y Group deben tener las mismas filas, ya que cada vector de observación debe pertenecer a un grupo.

Por otro lado, las características deben considerarse en el orden dado por el algoritmo

SFFS, cuyos índices vienen dados por el vector I(:,i), donde i indica el grupo al que pertenece. Hay que recordar que en el reconocimiento de patrones los tipos son conocidos.

También se le indica a la instrucción knnclassify el número de vecinos más cercanos

usados para la clasificación. Se ha determinado k=1 ya que es el caso más desfavorable porque solo tiene en cuenta el vecino más cercano y no un conjunto de vecinos (los más cercanos) entre los que elegir el grupo al que pertenece como aquel que más se repite en ese conjunto.

Se puede elegir varias opciones de distancias a la hora de determinar el vecino más cercano

(Distance), y en este trabajo se ha elegido la opción por defecto: distancia euclídea, lo que ha obligado a normalizar las características. También se puede elegir la regla para decidir cómo clasificar en caso de empate (Rule). Se ha escogido aquella que se queda con al más cercano.

Devuelve la clase en la que ha clasificado al vector. Dicha clase se almacena en el vector

‘clase’, de 2000 elementos, que contiene el tipo en el que se ha clasificado cada vector de observación.

cp = classperf (grupo,clase); get(cp); OK(NOF) = cp.CorrectRate;

Los resultados de clasificar los 2000 vectores de observación se almacenan en ‘clase’ y se comparan con los grupos a los que realmente pertenecen dichos vectores. La instrucción classperf proporciona la tasa correcta de clasificación, así como otros resultados derivados de la clasificación.

Como se ha comentado, esto se hace para NOF= 1…m, así que la tasa correcta según el

número de características consideradas se almacena en el vector OK.

El siguiente apartado muestra los resultados del reconocimiento de patrones, que se analizarán para mostrar las conclusiones obtenidas.

Capítulo 7: Descripción de Algoritmo

“Extracción de características de textura basada en la transformada Wavelet discreta” 51

Figura 35: Diagrama de flujo de la función “Clasifpatron”, parte en la que se lleva a cabo el

reconocimiento de patrones.