Está en la página 1de 70

DETECCIÓN DE DEFECTOS EN IMÁGENES A COLOR

DE TEXTURAS DE TELAS EN LA EMPRESA DE


HILADOS Y TEJIDOS UNICA S.A.

CARLOS GUSTAVO AGUDELO SANCHEZ

UNIVERSIDAD NACIONAL DE COLOMBIA


FACULTAD DE INGENIERÍA Y ARQUITECTURA
INGENIERÍA ELECTRÓNICA
MANIZALES
2000
DETECCIÓN DE DEFECTOS EN IMÁGENES A COLOR
DE TEXTURAS DE TELAS EN LA EMPRESA DE
HILADOS Y TEJIDOS UNICA S.A.

CARLOS GUSTAVO AGUDELO SANCHEZ


Código 895001

TRABAJO DE GRADO

Director
GUSTAVO OSORIO L.
Ingeniero Electrónico

UNIVERSIDAD NACIONAL DE COLOMBIA


FACULTAD DE INGENIERÍA Y ARQUITECTURA
INGENIERÍA ELECTRÓNICA
MANIZALES
2000
Nota De Aceptación

Presidente Del Jurado

Jurado

Jurado

Manizales, Noviembre Del 2000


AGRADECIMIENTOS

Presento mis agradecimientos a mi familia por su apoyo

incondicional durante toda mi vida.

A mis amigos por su compañía y comprensión en todo momento.

Al Ingeniero Gustavo Osorio L. por su ayuda en la realización de

este trabajo, y muy especialmente al Ingeniero Flavio Prieto por la

asesoría prestada en la finalización del mismo.


RESUMEN

En este proyecto se analizan y caracterizan texturas por medios


estadísticos, bajo la premisa de que una textura es un campo
aleatorio homogéneo bidimensional. Se utilizan los principales
momentos estadísticos del histograma, la matriz de coocurrencia de
niveles y una variante, la matriz de coocurrencia con información
de bordes para extraer la mayor cantidad de información de
texturas en imágenes digitalizadas a diferentes resoluciones. Los
vectores característicos hallados se alimentan a una red neuronal
para realizar una clasificación de texturas en general obteniendo
resultados favorables. Se aplican los métodos de caracterización
para mostrar la realización factible de detección de defectos en
telas como aplicación real. Se desarrolla un software para la
manipulación de los métodos descritos.

ABSTRACT

In this project, textures are analyzed and characterized by


statistical means, under the premise that a texture is a two-
dimensional homogeneous random field. The main statistical
moments of the histogram, the level co-occurrence matrix and a
variant, the edge based co-occurrence matrix are used to encode
the biggest quantity of information in textures images digitized in
different resolutions. The found features vectors are fed to a neural
network to carry out a classification of general textures obtaining a
favorable average accuracy. The features extraction methods are
applied to show the feasible realization of defect detection in fabrics
like a real application. A software is developed for the manipulation
of the described methods.
CONTENIDO

1. INTRODUCCIÓN 10

2. OBJETIVOS 18

3. ANÁLISIS DE FUNDAMENTOS 19

3.1. CARACTERIZACIÓN 19
3.1.1. Momentos Estadísticos. 20
3.1.2. Matriz De Coocurrencia De Niveles 22
3.1.3. Matriz De Coocurrencia De Bordes 28
3.2. CLASIFICACION 36
3.2.1. Descripción 37
3.2.2. Entradas y Salidas 39
3.2.3. Entrenamiento 40
3.2.4. Indicaciones 42
3.3. DETECCION 45
3.3.1. Método Euclidiano 45
3.3.2. Método de Correlación 46

4. PROCEDIMIENTO 48

4.1. CLASIFICACION 48
4.2. DETECCION 50

5. ANÁLISIS DE RESULTADOS 52

6. PERSPECTIVAS 58
7. CONCLUSIONES 60

8. APENDICE. SOFTWARE 62

9. BIBLIOGRAFIA 64
LISTA DE FIGURAS

FIGURA 1 ESQUEMA DEL ANÁLISIS SUPERVISADO DE TEXTURAS. 13


FIGURA 2 IMAGEN INICIAL DEL PROCESO DE BORDES. 29
FIGURA 3 IMAGEN CON BORDES INTENSIFICADOS. 31
FIGURA 4 IMAGEN DE LOS ÁNGULOS EN LOS BORDES. 32
FIGURA 5 IMAGEN DESPUÉS DEL NON MAX SUPPRESSION. 33
FIGURA 6 IMAGEN CON BORDES ETIQUETADOS. 34
FIGURA 7 TOPOLOGÍA DE LA RED NEURONAL UTILIZADA. 37
FIGURA 8 FUNCIÓN DE ACTIVACIÓN SIGMOIDEA. 39
FIGURA 9 IMAGEN EN BUEN ESTADO PARA DETECCIÓN. 55
1. INTRODUCCIÓN

La visión artificial es un nuevo campo en continua y rápida


expansión. Cada vez se fortalecen más sus bases y procedimientos,
además de que se encuentran nuevos campos de acción. El análisis
de texturas es la rama en que este proyecto se propone
profundizar.

DEFINICIÓN DE TEXTURA

Una textura es un concepto intuitivo, y su concepto ha sido difícil de


formular. Realmente no existe una definición de textura
formalmente aceptada. Aún así, su análisis y estudio se ha ido
incrementando considerablemente en los últimos tiempos.

Aunque se carezca de palabras para expresar que es una textura,


dos cosas si son ciertas, primero, una textura posee una variación
significante de intensidades entre píxeles vecinos, y segundo, existe
una propiedad homogénea en algún nivel espacial mayor que la
resolución de la imagen.

10
Intrínsecamente bajo estas condiciones se asume que una imagen
de una textura posee una resolución, una imagen física puede
contener varias texturas dependiendo de la resolución de la
imagen. Por ejemplo, en la imagen de un bosque a gran escala la
textura predominante seguramente será la flora verde contrastada
con el cielo al fondo, mientras en una escala mucho menor la
textura predominante puede ser la hoja de un árbol.

De todas maneras una definición globalmente aceptada es :

Un arreglo local de intensidades que dependiendo de su escala da la


noción de regularidad u homogeneidad constante o periódica.

Algunos tipos de texturas poseen una unidad estructural que se


repite llamada texel, pero en general a veces no es fácil encontrarlo
y en gran cantidad de oportunidades ni siquiera existe, por esta
razón no existe un mejor método de caracterización de texturas y
depende del tipo de aplicación el método a seleccionar.

En este proyecto se ataca el problema de analizar y clasificar


texturas basándose en el hecho de que una textura es
esencialmente una interacción estadística de píxeles, un campo
aleatorio homogéneo bidimensional. Siendo el enfoque principal su
aplicación directa en telas con texturas homogéneas.

11
Para esto se analiza la textura por medios estadísticos con la matriz
de coocurrencia y se aplica estos resultados a la clasificación de
texturas y detección de defectos en las telas.

Los resultados prácticos son muy favorables para el objetivo


principal de este proyecto que es proponer una alternativa viable y
efectiva para el análisis y detección de defectos en telas, además
de dejar al alcance nuevas perspectivas y aplicaciones.

DESCRIPCIÓN

El marco de trabajo consiste en un análisis supervisado de texturas,


y se divide principalmente en tres bloques : caracterización,
clasificación y detección. En donde, entre cada bloque, existe la
relación como se muestra en la figura 1.

Cada bloque se explica a continuación.

CLASIFICACION

TEXTURA CARACTERIZACION

DETECCION

12
Figura 1 Esquema del análisis supervisado de texturas.

CARACTERIZACIÓN

En esta fase se extrae un vector de características descriptivas de


cada textura, que la identifique unívocamente.

En realidad, en este caso estamos hablando de una textura, pero


teóricamente, estos vectores de características se extraen de
cualquier entidad susceptible a diferenciarse en clases (imágenes,
formas, señales, etc).

Cada clase no tiene un vector de características único, sino que


tiene una familia de vectores que son muy similares entre sí pero
que no son iguales, son vectores que tienen características como
media, varianza y otras medidas de mayor orden muy cercanas
entre sí. Que tan similares son en realidad no importa mucho, lo
que realmente los hace diferenciables es que cada familia esté lo
suficientemente alejada de las otras.

La caracterización es tal vez una de las etapas más difíciles de


llevar a cabo, ya que si se extraen vectores de buena calidad, es
13
decir, que contengan toda la información posible sobre la entidad,
su clasificación será más fácil debido a que no se darán lugar a
ambigüedades entre vectores ya que cada familia de vectores no se
sobrelapará con otra, mientras que si algunos grados de libertad se
mezclan con otros existirán vectores particulares que
eventualmente serán clasificados erróneamente. Lamentablemente
en la práctica es muy difícil conseguir familias de vectores que no
se sobrelapen, por lo que se trata de trabajar con el promedio de
vectores y no con estos vectores particulares ambiguos.

Aunque no existe un método estándar para diferenciar un vector de


otro, por medio de algunos trabajos de investigación en imágenes
sobre sets libres en la internet como Brodatz, MeasTex y VisTex, los
clasificadores bayesianos y las redes neuronales han dado mejores
resultados en la clasificación supervisada de imágenes. De todas
maneras mientras los vectores característicos sean bien
seleccionados cualquier clasificador funcionará de una manera
aceptable.

Uno de los principales objetivos e innovaciones de este proyecto es


precisamente llegar a una buena caracterización de texturas por
diferentes medios estadísticos y aplicarlos a una tarea real. Los
métodos de caracterización se explican más adelante.

14
CLASIFICACIÓN

Una vez obtenidas vectores característicos apropiados la siguiente


fase que se lleva a cabo es la de clasificación. Aquí se toman los
vectores obtenidos en la etapa de caracterización y se comparan
con otros vectores representativos obtenidos a priori, y de acuerdo
con los resultados de la comparación a un vector se le asigna una
clase en particular.

Existen varias formas de hacer dicha asignación. En este proyecto


se obtienen los vectores característicos de unas clases predefinidas
o etiquetadas de texturas, luego se toma cada nuevo vector
extraído (etapa de caracterización) y se le asigna una clase basados
en una regla de comparación de modo que la clase asignada a este
nuevo vector pertenezca a la familia de vectores a priori más
parecida o similar. Para estos efectos se utilizó en particular una
red neuronal.

15
DETECCIÓN

En este proyecto se enfrenta una fase de detección de defectos.


Aquí se toma un vector característico (que no se sabe si
corresponde a una textura buena o mala) y se le compara con un
patrón ya definido. Este proceso arroja dos posibles resultados,
textura en buen estado o en mal estado.

Más adelante se describe en más detalle este procedimiento.

PROPÓSITOS

Este proyecto se propone analizar texturas por medio de métodos


estadísticos con el fin de clasificar texturas y detectar defectos en
telas relacionados con su textura como una aplicación práctica del
análisis de texturas como una rama de la visión artificial.

Además se espera abrir una posibilidad más de investigación y


desarrollo no sólo a nivel académico sino tecnológico.

SOFTWARE

16
En el apéndice se describe el software desarrollado pare este
proyecto que implementa estas tres etapas y permite manipular
diferentes opciones en cada uno de los procedimientos.

17
2. OBJETIVOS

GENERAL

Analizar texturas por medio de métodos estadísticos.

ESPECÍFICOS

• Analizar imágenes en color de texturas.


• Clasificar texturas y detectar defectos en telas relacionados con
su textura por medio de una herramienta de software.

18
3. ANÁLISIS DE FUNDAMENTOS

3.1. CARACTERIZACIÓN

La parte más difícil de realizar y uno de los objetivos de este


proyecto es la de caracterización.

Primero que todo se debe tener en cuenta que el material a


manipular son imágenes digitalizadas que contienen su información
en escala de grises o en componentes de color RGB (Red, Green,
Blue). La escala de grises es ampliamente utilizada debido a que en
aplicación reales dedicadas existen algunas limitaciones prácticas
primordialmente en presupuesto, lo cual conlleva continuamente a
la tecnología a adaptarse a soluciones económicas pero efectivas.
Además estamos interesados en describir texturas, entidad que por
sí sola implica muchos significados subjetivos. En este proyecto se
caracteriza texturas basadas en métodos estadísticos que involucra
principalmente los momentos estadísticos y la matriz de
coocurrencia. Existen otros métodos como los estructurales que

19
están basados en reglas estructurales y los espectrales que están
basados en la aplicación del espectro de Fourier bidimensional.
Algunos de los procedimientos realizados en este proyecto están
descritos con detalle en libros, algunos citados en la bibliografía
adjunta, por lo que sólo se mencionarán los detalles más
representativos.

3.1.1. Momentos Estadísticos.

Los momentos estadísticos están aplicados al histograma de una


imagen, o al histograma de cada componente si es una imagen a
color. Antes de definir los momentos es necesario introducir la
media de un histograma :

n −1
m = ∑ xi f d ( xi )
i =0

Aquí x es una variable aleatoria discreta con una función de

densidad fd. n es el valor máximo que puede tomar x y fd(xi) es la

probabilidad de que x = xi, debido a que es una variable aleatorio


discreta. En este caso el histograma debidamente normalizado es la
función de densidad, que debe cumplir con todas las propiedades
estadísticas de cualquier función de densidad. Aquí m indicará el

20
valor esperado de la variable aleatoria x que, a propósito, en este

caso significa el valor de intensidad de un pixel. Así entonces, fd(0)


nos indicaría la probabilidad de que un pixel sea de color negro
(valor de intensidad cero). Luego se define el momento n-ésimo
como :

N −1
µ n ( x ) = ∑ ( xi − m ) n f d ( xi )
i =0

Se puede comprobar que µ0 = 1 y µ1 = 0. El segundo momento se


denomina varianza y se representa por σ2(x) en donde σ se le llama
la desviación estándar y está ligada directamente con la distribución
gaussiana e indica que tan dispersos están los valores de x con
respecto a su media y se puede normalizar con la siguiente
transformación :

1
R = 1−
1+ σ 2

En donde R = 0 para varianzas pequeñas y se aproxima a uno para


valores grandes de la varianza.

21
El tercer momento es una medida de la desviación del histograma,
mientras el cuarto mide la monotonía relativa. Los momentos de
orden superior no están fácilmente relacionados con la forma del
histograma pero proporcionan información acerca de éste.

Las medidas extraídas directamente del histograma no tiene en


cuenta la información proporcionada por la posición relativa de cada
pixel, una forma de adquirir esta información es tomar en cuenta
no solamente la distribución de intensidades, sino también las
posiciones de pixels que tienen iguales o casi iguales valores de
intensidad. Cuando se dice que tiene un valor de intensidad casi
igual se refiere a que la intensidad de los píxeles se encuentra en
esa franja de intensidades que se pierde al cambiar de resolución
una imagen, por ejemplo, si en una imagen se tiene un pixel que
puede tener intensidades entre [0-255] y se reduce la resolución a
64 niveles, entonces los pixeles que estén dentro de la misma
franja de 4 píxeles de los últimos dos bits serán asignados al mismo
nivel en la nueva resolución.

3.1.2. Matriz De Coocurrencia De Niveles

Aquí se introduce la matriz de coocurrencia de niveles, [González,


Woods. 1992].

22
Se define un operador de posición P y una matriz A cuyo elemento
aij es el número de veces que aparecen pixels con nivel xi en la
posición especificada por P en relación a pixels con nivel xj . Por

ejemplo, considérese una imagen en tres niveles de intensidad X1 =

0, X2 = 1 y X3 = 2 de la siguiente forma :

0 0 0 1 2
1 1 0 1 1
2 2 1 0 0
1 1 0 2 0
0 0 1 0 1

Si se define el operador posición P como “dirección –45º, distancia


1”, distancia dada en el sentido D8, es decir, uno de los ocho
píxeles vecinos circundantes, se genera la siguiente matriz :

4 2 1 
A = 2 3 2
0 2 0

En donde el elemento a11 es el número de veces que un punto con

nivel x1 = 0 aparece en la dirección –45º, distancia 1 de un pixel

23
con el mismo nivel; y a13 es el número de veces que un punto con

nivel x1 = 0 aparece en la posición dada por el operador de un pixel

con nivel x3 = 2. El tomar la fila como el primer pixel y la columna


como segundo pixel o al revés, lo único que hace es hallar la misma
matriz pero traspuesta. El tamaño de A está determinado
únicamente por la cantidad de niveles que se estén utilizando, por
esta razón normalmente se requiere que la imagen se vuelva a
cuantificar en unas cuantas bandas de niveles para mantener el
tamaño de A razonable. En esta Proyecto se trabaja principalmente
con 16 niveles, aunque puede variarse desde 4 hasta 64 niveles.
Hasta ahora tenemos una matriz de enteros, se procede a formar
una matriz C dividiendo A por la suma de todos sus componentes,
entonces cij es una estimación de la probabilidad conjunta de que

un par de puntos, que satisfacen P, tengan valores (xi,xj). C se

denomina matriz de coocurrencia de niveles. Ya que C depende del

operador posición P para hallarse, se puede detectar la presencia


de un patrón de textura dado eligiendo un operador de posición
apropiado. Por ejemplo, el operador utilizado en el ejemplo anterior
es sensible a bandas de intensidad constante ejecutándose a –45º.
Más globalmente el problema de caracterizar un textura consiste en
analizar una matriz C con el fin de establecer la categoría de dicha

textura en la región sobre la cual se calculó C. Para este fin se


pueden utilizar varios descriptores útiles que son :

24
MÁXIMA PROBABILIDAD :

máx i , j (C ij )

Que indica la respuesta más fuerte a P (operador de posición).

ELEMENTO MOMENTO DIFERENCIAL DE ORDEN K :

∑∑ (i − j)
i j
k
Cij

Este descriptor tiene un valor relativamente bajo cuando los


mayores valores de C están próximos a la diagonal principal,
debido a que las diferencia (i-j) son menores en esta región.

ELEMENTO MOMENTO INVERSO DIFERENCIAL DE ORDEN K :

Cij
∑∑ 1 + (i − j )
i j
k

Este descriptor tiene el efecto opuesto al descriptor anterior, se


hace relativamente grande cuando los valores mayores de C están
alrededor de la diagonal principal. El uno que suma en el
denominador es tan sólo para evitar valores infinitos.

25
ENTROPÍA :

− ∑∑ C ij Log (Cij )
i j

Este descriptor es una medida de la aleatoriedad, que alcanza su


valor máximo cuando todos los elementos de C son iguales.

UNIFORMIDAD :

∑∑ C
i j
2
ij

Este descriptor es opuesto al anterior, es mínimo cuando los Cij son


todos iguales.

HOMOGENEIDAD :

Cij
∑∑ 1 + i − j
i j

Este descriptor es similar al elemento momento inverso diferencia


de orden 2.

26
CONTRASTE :

∑∑∑ k
k i j
2
C ij

En donde N es el número de niveles y para k = | i – j |. Este


descriptor mide la información que tiene la matriz en las diagonales
a medida que se alejan de la principal.

CORRELACIÓN :

(i − µ i )( j − µ j )Cij
∑∑ σ iσ j

En donde se define :

µ i = ∑ i ∑ C ij ;
i j

µ j = ∑ j ∑ Cij ;
j i

σ i = ∑ (i − µ i ) 2 ∑ Cij ;
i j

σ j = ∑ ( j − µ j ) 2 ∑ Cij
j i

27
Este descriptor es la implementación de la correlación estadística
entre dos variables aleatorias que permite calcular
cuantitativamente el grado de independencia entre dos variables
aleatorias, que en este caso serían cada uno de los ejes de la
matriz de coocurrencia. Este descriptor toma la matriz de
coocurrencia, que es una función de densidad conjunta, y halla el
grado de interacción entre los ejes de la matriz, siendo cada eje
una variable aleatoria que puede tomar tantos valores discretos
como niveles tenga la imagen.

El propósito es utilizar estos descriptores para diferenciar una


textura de otra. El método utilizado con la matriz de coocurrencia
para clasificación y detección se describe en la sección de análisis
de resultados.

3.1.3. Matriz De Coocurrencia De Bordes

Otra alternativa a utilizar es la matriz de coocurrencia de bordes,


[Kuan, Lewis. 1998] que es similar a su contraparte de niveles pero
tiene un poco más de preprocesamiento sobre la imagen.
Básicamente se trabaja sobre la relación que existe, ya no entre
niveles, sino entre las diferentes clases de bordes que contiene la
textura. Antes que todo se definen cinco tipos de bordes :
Horizontales, Verticales, Derechos, Izquierdos y Blancos.

28
Los bordes horizontales son aquellos que tienen un gradiente
(vector perpendicular al borde) a 90º, los verticales tienen
gradiente a 0º, los izquierdos tienen gradiente a 45º, los derechos
tienen un gradiente a –45º (que es la misma dirección a 135º) y los
blancos son pixeles que son fondo y no tienen información de
borde.

A continuación se describe el proceso paso a paso con una textura


ejemplo para entender mejor la técnica utilizada. Tenemos la
0
textura dada en la figura 2, I .

0
Figura 2 Imagen inicial del proceso de bordes, I .

Antes de construir la matriz de coocurrencia de bordes se tiene que


hallar la información de bordes que contiene la imagen, para esto

29
primero se aplican las máscaras de Sobel [González, Woods. 1992]
para diferenciar, intensificar y suavizar los bordes, donde para cada
1
pixel de la nueva imagen I están dadas por :

I 1i , j = J x2 + J y2

En donde J está dado por :

J = ∑ M ijiij0
i, j

0 0
aquí i es una submatriz de I centrada en el pixel de evaluación

con las mismas dimensiones de la máscara M. Cada componente en


x e y se obtienen con las siguientes máscaras :

1 0 − 1 
M x = 2 0 − 2
1 0 − 2

Que nos proporciona información si existe un borde vertical en el


pixel de evaluación, y la máscara

− 1 − 2 − 1
M y =  0 0 0 
 1 2 1 

30
que nos proporciona información si existe un borde horizontal en el
pixel evaluado. Al realizar estos cálculos se obtiene la figura 3.

1
Figura 3 Imagen con bordes intensificados, I .

Para cada pixel se halla la información de ángulo con las


intensidades dada por cada máscara, así :

 Jy 
θ = tg  
−1

 Jx 

2
De modo que se obtiene la figura 4, I .

31
2
Figura 4 Imagen de los ángulos en los bordes, I .

En la imagen anterior el ángulo está codificado de tal forma que los


tonos claros están cercanos a -π/2 y los tonos oscuros están
cercanos a π/2. Se aprecia que existe un patrón en los ángulos de
acuerdo al tipo de textura. Este proceso es llamado Canny
Enhancer.

Una vez hecho esto, se procede a separar la información de bordes


y el fondo de la imagen. Esto se puede hacer a través de un
proceso llamado Non Max Suppression [Trucco, Verri.1996] que
consiste en reducir los bordes a un grosor de un pixel. Para este
1
procedimiento se considera la imagen de intensidad I , la imagen de
2 3
orientación I , la imagen de salida I y las cuatro posibles

32
direcciones de gradiente d1...d4, identificadas como –45º, 0º, 45º y

90º. Para cada pixel (i,j):

1. Se encuentra la dirección, dk, que mejor aproxima la dirección de

I2(i,j) (la normal al borde).


1
2. Si I (i,j) es más pequeño que al menos uno de sus dos vecinos a
3
lo largo de la dirección dk, se asigna I (i,j) = 0 (Supresión), de
3 1
otra forma se asigna I (i,j) = I (i,j).

En la figura 5 se muestra la imagen después del algoritmo y


debidamente umbralizada (para obtener una imagen a blanco y
negro) :

Figura 5 Imagen después del Non Max Suppression, I3.

33
Luego recorremos esta última imagen y con la ayuda de la
información de bordes etiquetamos cada pixel como borde (y en tal
caso el tipo de borde) o blanco. A continuación en la figura 6 se
muestra la imagen etiquetada en donde cada color es una
orientación diferente y el color blanco es fondo :

Figura 6 Imagen con bordes etiquetados.

El color rojo identifica los bordes verticales, el negro los


horizontales, el verde los izquierdos y el azul los derechos. En este
punto se puede construir la matriz de bordes.

34
La matriz de coocurrencia de bordes B se define de la siguiente
forma :

H V LI LD B
H P(H/H) P(V/H) P(LI/H) P(LD/H) P(B/H)
V P(H/V) P(V/V) P(LI/V) P(LD/V) P(B/V)
LI P(H/LI) P(V/LI) P(LI/LI) P(LD/LI) P(B/LI)
LD P(H/LD) P(V/LD) P(LI/LD) P(LD/LD) P(B/LD)
B P(H/B) P(V/B) P(LI/B) P(LD/B) P(B/B)

En donde, por ejemplo, P(V/H) es la probabilidad de que dado un


pixel etiquetado como borde Horizontal, en su inmediata vecindad
(8 vecinos) se encuentre un pixel etiquetado como borde Vertical.
Esto se generaliza para todas las probabilidades condicionales en la
matriz.

Una de las claras ventajas de esta matriz es que no importa con


cuantos niveles se trabaje o que tan grande sea la imagen, siempre
obtendremos una matriz de 5x5.

Una vez hallada la matriz se puede utilizar algunos descriptores


como Elemento Momento Diferencial de Orden k, Elemento

35
Momento Inverso Diferencial de Orden k, Entropía, Uniformidad o
cualquier otro de los mencionados anteriormente.

En la sección de análisis de resultados se describe como se utilizó la


matriz de coocurrencia de bordes y se dan algunos comentarios al
respecto.

3.2. CLASIFICACION

La fase de clasificación en este proyecto fue llevada a cabo por una


red neuronal de capa oculta entrenada con el algoritmo de Back
Propagation.

Las redes neuronales por sí mismas ya son un tema bastante


extenso y la finalidad de este proyecto no es entrar en detalles, así
que sólo se esbozará brevemente lo realizado.

36
3.2.1. Descripción

La topología de la red se muestra en la figura 7, el número de


entradas, de neuronas en la capa oculta y el número de salidas son
variables que al iniciar la red son pasadas al objeto. La red tiene
algunos parámetros internos como son el η y el tipo de activación. η
es el factor de entrenamiento de la red y generalmente su valor
está alrededor de 0.35 ya que en este punto la red converge más
eficientemente, es una variable que entra a jugar en el momento en
que la red es entrenada e indica que tanto varían los pesos actuales
con la realimentación hecha con los errores. (Figura 7).

Capa Oculta Capa Salida

1 W1 1 W2

X1
X2
X3
X4
oi
hi

Nentradas Nocultas Nsalidas

Figura 7 Topología de la red neuronal utilizada.

Cada neurona recibe tanta señales como neuronas o entradas


hayan en la capa anterior, por ejemplo, una neurona en la capa

37
oculta recibe señales de cuantas entradas haya, y una neurona en
la capa de salida recibe señales de cuantas neuronas haya en la
capa oculta, cada una de estas señales está ponderada por un
peso, que en este caso están organizados en matrices (W1, W2).
Además de estas señales existe una señal más que actúa como
bias, es un offset que se encarga de cambiar el punto de operación
y se implementa como una entrada de valor 1.

Cada matriz de pesos se define de la forma :

 w11 w12 L w1n 


w 
Wi =  21 
 M O 
 
 wm1 wmn 

En donde wij representa el peso desde el origen i hasta la neurona

destino j. Esto quiere decir que cada fila está asociada a una
neurona y cada columna a cada entrada. En cada neurona se lleva
a cabo la siguiente operación para establecer su salida, f :

f = ∑ wi xi
i

En donde xi es la entrada i a la neurona y wi es su ponderación.


Ya que cada neurona tiene sus pesos asociados en cada fila de la
matriz se tiene que las salidas de todas las neuronas se puede
expresar como :

38
f i = WX ∀ i = 1..m

En donde X es el vector columna de entradas. La salida de cada


neurona se introduce en una función que determina si la neurona es
activada o no. Existen varios tipos de activación, en particular la
red implementada trabaja con la activación sigmoidea, pero tiene la
opción de activación simple, dura y lógica. (Figura 8).

Figura 8 Función de activación sigmoidea.

1
Factivación( s) =
1 + e −s

3.2.2. Entradas y Salidas

Sobre el comportamiento de la red es importante anotar que esta


clase de red está diseñada para trabajar con entradas entre cero y
uno [0,1], la red tal vez nunca llegue a entrenarse si las entradas y
obviamente las salidas no están en este rango. Las salidas pueden
codificarse de diferentes maneras, aunque hay dos maneras más

39
comunes, en la primera cada clase activa una neurona de salida
mientras las otras permanecen en cero, y en la segunda se toma el
valor en binario, por ejemplo, si se tienen tres neuronas de salida
se podrían tener 8 estados (por lo tanto clases) diferentes. De
todas maneras cualquier codificación puede darse en el
entrenamiento.

3.2.3. Entrenamiento

Existen muchos algoritmos para entrenamiento de redes, para esta


Proyecto el algoritmo utilizado fue Back Propagation, el cual
básicamente consiste en evaluar la salida para un vector de entrada
y comparar dicha salida con la salida conocida, esto genera un error
con que se ajustan los pesos de W2, que van desde la capa oculta
hasta la capa de salida, luego con este error se genera el error en
la capa oculta y se ajustan los pesos de W1, que van desde las
entradas hasta la capa oculta. Para estos errores propagados y
ajustes en las matrices es importante que la función de activación
sea diferenciable, por esta razón se utiliza la función de activación
sigmoidea. Cada ciclo de estos debe hacerse para cada muestra,
hasta que el error sea cero, es decir, hasta que ya no haya vectores
de entrada mal clasificados. El procedimiento es el siguiente :

1. W1[i][j] = aleatorio[-1,1] para i=1..Nocultas, j=0..Nentradas

2. W2[i][j] = aleatorio[-0.1,0.1] para i=1..Nsalidas, j=0..Nocultas

3. X0 = h0 = 1. Entrada bias.

40
4. Se escoge un par Entrada/Salida del conjunto de entrenamiento
(X,Y). (Entrenamiento supervisado).
5. Se propaga activaciones hacia la capa oculta con función de
activación sigmoidea.

1
hi = ∀ i = 1..Nocultas
 
Nentradas
− ∑ W1 [i ][ j ] X j
 
 1 − e j =0

 
 

6. Se propaga activaciones hacia la capa de salida.

1
oi = ∀ i = 1..Nsalidas
 − ∑ W2 [i ][ j ] X j 
Nocultas

 
 1 − e j =0

 
 

7. Se computa el error para cada neurona δ. Primero en la capa de


salida :

δ 2 j = o j (1 − o j )(Y j − o j )

8. Se calculan los errores en la capa oculta :

41
Nsalidas
δ 1 j = h j (1 − h j ) ∑δ W2 [i ][ j ]
2i ∀ j = 0..Nocultas
i =1

9. Se ajustan pesos para W2.

∆W 2 [i ][ j ] = ηδ 2 j hi ∀ i = 0..Nocultas , j = 1..Nsalidas

10. Se ajustan pesos para W1.

∆W1 [i ][ j ] = ηδ 1 j X i ∀ i = 0..Nentradas , j = 1..Nocultas

En este procedimiento se tiene en cuenta que X0 y h0 son los bias


que actúan como dos entradas más.

11. Volver al punto 4 por otro par de Entradas/Salidas y repetir


cuantas épocas sean necesarias hasta que el error sea cero.

3.2.4. Indicaciones

A la hora de entrenar la red es bueno tener presente algunos


detalles como la cantidad de muestras, el número de neuronas
ocultas y el factor η. El número de muestras no puede ser ni muy
pequeño ni muy grande, si el número de muestras es pequeño la
red no tiene suficientes ciclos para reajustar sus pesos y tal vez no

42
haya suficientes muestras representativas, y si el número de
muestras es muy grande la red se puede sobreentrenar y ajustar
sus pesos de tal forma que sólo responde a las muestras de
entrenamiento, perdiendo así su capacidad de generalización. En
este proyecto se trabajó con un número de muestras entre cuatro y
dieciséis [4-16].

Modificando el factor η se puede lograr un entrenamiento más


rápido, aunque con un valor alrededor de 0.35 generalmente
funciona adecuadamente.

El número de neuronas ocultas debe seleccionarse básicamente de


acuerdo a dos parámetros, el número de entradas y la dificultad del
mapa que se debe entrenar. Si el número de entradas es grande,
el número de neuronas en la capa oculta debe ser como mínimo
iguales, esto para aumentar el número de dimensiones con que la
red puede trabajar. Si los vectores están suficientemente
espaciados unos de otros la red podrá separarlos fácilmente, pero si
están extrañamente mezclados la red necesitará funciones más
complicadas para poderlos diferenciar, necesitando más neuronas
en la capa oculta.

Dependiendo de estos factores y de algunos más no muy bien


definidos y aleatorios (valores iniciales de matrices por ejemplo) la
red necesitará más o menos ciclos de entrenamiento. Generalmente

43
existen dos posibles salidas del ciclo de entrenamiento, una
corresponde a un valor en el error de cero y la otra a que se
completó un máximo de ciclos predefinidos. No sobra decir que el
hecho de que se haya llegado al máximo de ciclos no significa que
la red no pueda entrenarse satisfactoriamente, esto se puede
corroborar monitoreando los errores individuales de cada clase.
Para hallar el error se observa la salida de la evaluación de la red
para una entrada particular, al diferir de la deseada se dice que
existe un error. Ya que la red nunca dará ceros o unos exactos, se
utiliza un delta para indicar que tan cerca está de cero o de uno la
salida de una neurona, este delta se utiliza para exigirle mayor o
menor precisión a la red en el entrenamiento. Claramente este
delta puede tomar valores entre [0,0.5].

En la sección de análisis de resultados se describe como se utilizó la


red en nuestro procedimiento de trabajo.

44
3.3. DETECCION

En la fase de detección lo que se hace es la comparación entre dos


vectores. De acuerdo al resultado de la comparación se asigna el
vector prueba como bueno o como defecto.

Se utilizó dos técnicas de comparación : euclidiana y correlación. Es


necesario anotar que realmente las características no van en forma
de vectores sino en forma de matrices, por lo que estas técnicas
van en este formato.

3.3.1. Método Euclidiano

La comparación euclidiana consiste en medir que tan cerca está un


vector de otro. Para esto se toma la sumatoria de las diferencias en
n
cada dimensión R de los vectores. Esta medida no está
normalizada, por lo que los vectores deben ir con valores
debidamente escalados. Cuando los vectores son iguales esta
medida nos da como resultado cero, lastimosamente no se tiene un
parámetro estándar para determinar que tan diferentes son, para
esto se utiliza un umbral predefinido que se ajusta de acuerdo al
tipo de vectores que se estén utilizando. Si los vectores a

45
1 2
comparar son V y V , y ajustando las sumatorias a una matriz en
lugar de un vector, la función euclidiana está dada por :

Euclidiana = ∑∑ Vij1 − Vij2


i j

3.3.2. Método de Correlación

La comparación por correlación es una medida normalizada por


amplitud que me indica que tan parecidas son dos matrices (una
imagen es también una matriz). Esta coeficiente de correlación
está en el rango [–1.. 0 .. 1]. Si las matrices son muy similares, el
coeficiente nos da cercano a 1, si no están correlacionadas
(diferentes) nos da valores cercanos a cero. Si la matriz es muy
similar pero negativa nos da valores cercanos a –1. Con esta
medida también necesitamos un umbral para diferenciar los
vectores que son aceptablemente parecidos al patrón.

Si tenemos una matriz f con valor medio f , y una segunda matriz


w con valor medio w con iguales dimensiones el coeficiente de
correlación está dado por :

46
∑∑ [ f ( x, y) − f ][w( x, y) − w ]
x y
γ = 1
 2
2

∑∑ [ f ( x, y ) − f ] ∑∑ [w( x, y ) − w ] 
2

 x y x y 

La forma en que el coeficiente de correlación se utiliza en este


proyecto se describe en la sección de análisis de resultados.

47
4. PROCEDIMIENTO

El procedimiento que se llevó a cabo es muy similar tanto para la


coocurrencia de niveles como para la de bordes. Para cada una de
estas herramientas se implementó una opción en el software que es
sólo para el análisis de una imagen entera, con el fin de visualizar
la matriz de coocurrencia y los resultados que se pueden obtener
al variar algunos de los parámetros del algoritmo.

4.1. CLASIFICACION

Para la etapa de clasificación lo primero que se hizo fue


implementar un método para adquirir las muestras para el
entrenamiento de la red neuronal. En este proyecto se utilizaron
ocho (8) clases codificadas con tres neuronas de salida. Cada clase
debe estar en una imagen aparte que posteriormente se divide en
subimágenes cuadradas de tamaño ajustable para extraerle a cada
una la matriz de coocurrencia. Las imágenes iniciales tienen un
tamaño de 256x256 píxeles y se dividieron en subimágenes de
100x100 píxeles para la extracción de los vectores característicos,
obteniendo así 4 muestras por clase.

48
Para extraer los vectores característicos no se partió de los
descriptores de las matrices sino de las matrices mismas. Esto
debido a que la matriz en si misma contenía mayor información que
el vector de descriptores. Para llevar esto a cabo es necesario
mantener el tamaño de las matrices en un punto razonable, por lo
que la matriz de coocurrencias de niveles se trabajó sólo hasta 16
niveles (que equivale a una matriz de 16x16), mientras que la de
bordes puede quedar en su forma estándar de 5x5.

Luego de adquirir la matriz de coocurrencia se le practicó algunas


transformaciones adicionales. A la matriz de coocurrencia de niveles
se le suavizó con un filtro pasa bajos (máscara de promediado)
dada por :

1 1 1 
 9 9 9
M Pr omedio = 1 1 1 
 19 1
9 9
1 
 9 9 9

y luego se normalizó de tal forma que su mayor valor fuera uno,


esto debido a que era más discernible para la red neuronal y no
afectaba para nada la información que contenía. A la matriz de
coocurrencia de bordes se le suprimió la última columna debido a
que un porcentaje muy alto de cualquier textura consiste en fondo,
y por lo tanto estas probabilidades condicionales son
exageradamente altas con respecto a las otras cuatro columnas y
no incluyen información diferenciable con la tolerancia que se

49
maneja. Las otras cuatro columnas son normalizadas entre cero y
uno también.

Luego de tener los datos de todas las clases se procede a entrenar


la red ajustando el número de neuronas ocultas y el número de
entradas. Después del entrenamiento se obtienen los pesos
entrenados de la red, los cuales se necesita a la hora de evaluar
una imagen prueba.

Para la matriz de coocurrencia de niveles se utiliza una capa oculta


de aproximadamente 700 neuronas, y para la matriz de
coocurrencia de bordes una capa oculta de 60 neuronas.

La imagen prueba a clasificar se divide en subimágenes típicamente


entre 25 y 50 píxeles. Por debajo de 25 píxeles, las características
estadísticas no se han estabilizado lo suficiente para hacer una
clasificación adecuada, y si la subimagen es muy grande, la
clasificación en los bordes de las texturas se distorsiona demasiado.

4.2. DETECCION

En la fase de detección se tomó una imagen de una textura en buen


estado y de dividió en algunas subimágenes suficiente grandes
como para contener toda la información necesaria, típicamente 40
píxeles, y a cada una se le extrajo la matriz de coocurrencia
50
seleccionada. Luego de tener todas estas matrices se halla el valor
esperado de cada elemento como si fueran variables aleatorias con
distribución uniforme, en otras palabras, se promedian las matrices
y se obtiene una representativa por cada componente de color.

Una vez se tiene un modelo de la textura en buen estado, se toman


imágenes de texturas con defectos y se dividen en subimágenes de
un tamaño determinado (típicamente [30-40] píxeles) y obtenemos
las características de cada cuadro, luego se comparan con el
modelo ya sea por el método euclidiano o por correlación y se
determina que cuadros están defectuosos o buenos de acuerdo al
umbral establecido, que generalmente se encuentra entre 10 y 20
para el método euclidiano y alrededor de 0.98 para correlación con
coocurrencia de niveles y 0.8 para correlación con coocurrencia de
bordes.

51
5. ANÁLISIS DE RESULTADOS

Los resultados prácticos se muestran a continuación. En cada


cuadro viene indicado el tipo de coocurrencia que se utilizó. Las dos
imágenes prueba para clasificación son collages de texturas (8 en
total) con la única diferencia en que una imagen tiene fondo blanco
y la otra no. Esto se hizo para observar el comportamiento del
clasificador (red neuronal) con una textura desconocida, y a partir
de los resultados se ve que aunque se esperaba que no lo
clasificara, lo confunde con otras texturas. Los cuadros negros son
cuadros que no encajaron en ninguna clase, y por lo tanto no
clasificados.

Para los resultados de clasificación se indica el porcentaje de


efectividad, el cual depende de la cantidad de subimágenes
clasificadas correctamente con respecto al total de subimágenes.

Para los resultados de detección se tienen cuatro medidas :


BB Subimágenes buenas clasificadas como buenas.
BD Subimágenes buenas clasificadas como defectuosas.
DB Subimágenes defectuosas clasificadas como buenas.

52
DD Subimágenes defectuosas clasificadas como defectuosas.

Cada medida tiene una importancia dependiendo del tipo de


aplicación. En el caso de detección de defectos en telas es
preferible que el sistema clasifique una textura buena como mala
que una mala como buena, aunque la tendencia debe ser del 0% en
ambas medidas.

53
RESULTADO DE CLASIFICACIÓN POR COOCURRENCIA DE BORDES
IMAGEN INICIAL SubI 50 Pix. Efectividad:87%

SubI 40 Pix. Efectividad:72% SubI 30 Pix. Efectividad:66%

54
RESULTADO DE CLASIFICACIÓN POR COOCURRENCIA DE NIVELES
IMAGEN INICIAL SubI 50 Pix. Efectividad:87%

SubI 40 Pix. Efectividad:77% SubI 30 Pix. Efectividad:88%

55
RESULTADO DE CLASIFICACIÓN POR COOCURRENCIA DE NIVELES
IMAGEN INICIAL SubI 40 Pix. Efectividad :87 % SubI 25 Pix. Efectividad :78 %
En la clasificación es importante la influencia del tamaño en las
subimágenes, mientras más grandes sean mejores resultados se
obtienen debido a que las características estadísticas se estabilizan
más.

Se destaca que para el tamaño más grande de subimagen se


obtienen resultados por encima del 85%. Este valor indica una
clasificación bastante buena para efectos prácticos.

Se nota además que algunas texturas se clasifican más


consistentemente que otras, esto es debido a que los tamaños de
los texels varían, y dependiendo del tamaño de la subimagen se
puede evaluar una región que no sea representativa o no contenga
suficiente información estadística. Esto es más notorio en la textura
de la tela naranja, las burbujas y el tramado, en donde aunque no
existe un texel definido se nota que se necesita un tamaño de
subimagen un poco más grande que puede contener suficiente
información estadística. Esto en realidad no es problema, y
depende en realidad del tipo de aplicación, pues se puede ajustar el
tamaño de subimagen.

Ya que la clasificación se puede realizar con texturas en general, se


considera que el comportamiento de esta etapa es muy satisfactoria
para ambos tipos de coocurrencia.

10
Para describir como pueden mejorar los resultados con algunas
variaciones del algoritmo se muestra a continuación una tabla con
cuatro figuras ilustrativas. La imagen inicial contiene cuatro
texturas diferentes debidamente seleccionadas. La segunda imagen
es la clasificación por coocurrencia de niveles con subimágenes de
35 píxeles. Aunque se trabajó con matriz de coocurrencia en gris se
obtienen buenos resultados (87%), pero se nota claramente que la
textura azul y la naranja no están muy diferenciadas debido a que
su tramado es relativamente similar, y aunque la red neuronal supo
diferenciar la gran mayoría de subimágenes, hubo algunas
confundidas que no pertenecían a ningún borde (generalmente mal
clasificados por mezcla de características). Es más factible que en la
primera textura (burbujas) hubieran subimágenes mal clasificadas
debido a que no se tiene un texel definido y su tamaño es
obviamente comparable con el tamaño de la subimagen, además de
que sólo contiene información en una intensidad. En la tercera
imagen tenemos la clasificación con matriz de coocurrencia en
color, en donde claramente se observa un mejor comportamiento,
sobre todo con la textura azul y naranja. Esto es debido a que se
posee más información de discernimiento en el vector característico
por la inclusión del color. La cuarta imagen es una clasificación por
matriz de coocurrencia a color también pero con un delta inferior
para exigir un poco más en el entrenamiento. Es notable la mejoría
en la clasificación.

11
RESULTADO DE CLASIFICACIÓN POR COOCURRENCIA DE NIVELES
IMAGEN INICIAL SubI 35 Pix. Efectividad:87%

SubI 35 Pix. Efectividad:90% SubI 35 Pix. Efectividad:96%

12
En los siguientes figuras se muestran algunos resultados en la
detección de defectos con las diferentes coocurrencias. La figura 9
es la textura de la tela en buen estado :

Figura 9 Imagen en buen estado para detección.

DETECCION DE DEFECTOS REPRESENTATIVOS


IMAGEN INICIAL DETECCIÓN
BB:
100%

BD:
0%

DB:
0%

DD:
100%

55
BB:
87.5%

BD:
12.5%

DB:
40%

DD:
60%

BB:
87%

BD:
13%

DB:
0%

DD:
100%

Ejemplo de defecto tipo 1(primer figura de arriba hacia


abajo), tipo 2 (segunda figura) y tipo 3 (tercer figura).

56
En realidad existen muchos factores para variar la efectividad de la
detección. El tamaño del cuadro no puede ser cualquiera, no puede
ser tan grande como para ocultar el defecto en la caracterización
pues esto significaría que la matriz característica no difiere tanto de
la del modelo en buen estado, ni tan pequeño como para que las
matrices características de los cuadros buenos no se parezcan al
modelo. El umbral también tiene que ajustarse de modo que casi
todos los cuadros buenos pasen la comparación y todos los malos
no, lo que afecta el porcentaje de BD. Cuando se caracteriza con
coocurrencia por niveles el tipo de orientación también influye
dependiendo del tipo de textura que se está detectando. Incluso
algunas técnicas de implementación pueden hacer diferencia en el
resultado final. Aún así los porcentajes tienen un muy buen
comportamiento, en especial para los defectos tipo 1 y 3.

En general se observa que los diferentes tipos de defectos fueron


detectados, lo que representa el cumplimiento de uno de los
objetivos principales de este proyecto.

57
6. PERSPECTIVAS

• El algoritmo de clasificación se podrían generalizar para otras


aplicaciones con un algoritmo de clustering, que dinámicamente
ajusta el número de clases que se encuentra en nuestro
universo.

• Luego de la etapa de clasificación, dependiendo de la aplicación,


podría ir una etapa de refinamiento de regiones, para suavizar y
segmentar.

• Si se tienen otros métodos de extracción de vectores, se podría


adaptar la red neuronal para incluir esta otra información en la
clasificación.

• Existen muchas variantes a la hora de implementar, por


ejemplo, se podrían utilizar ventanas deslizantes en la etapa de
clasificación para una segmentación posterior.

58
• Si la aplicación requiere clasificar una sola textura el tamaño de
la subimagen de prueba puede ser mucho más grande, lo que
permite que las características estadísticas se estabilicen mejor y
se logre porcentajes de clasificación mejores.

• La caracterización y clasificación de texturas tiene campos de


acción además de la detección de defectos en telas y junto con
otras técnicas pueden ser una fuente de tecnología regional.

59
7. CONCLUSIONES

• La caracterización por coocurrencia sí es un método viable para


la detección de defectos en telas que puede llevarse a la
implementación práctica ya que los porcentajes, dependiendo
del tipo de defecto, son superiores al 80% y los algoritmos
tienen una velocidad de ejecución adecuada.

• El desempeño varía dependiendo del tipo de defecto a detectar.


En general el tamaño del defecto debe ser comparable con el
tamaño de la ventana de inspección. Los defectos puntuales no
afectan considerablemente las características estadísticas como
para ser detectados.

• Bajo ambientes supervisados la clasificación de texturas por


medio de coocurrencia ofrece buenos desempeños, esto es,
superiores al 85%. En particular mientras más grandes sean las
subimágenes mejores serán los resultados.

60
• La matriz de coocurrencia de niveles tiene relativamente mejor
caracterización que la coocurrencia de bordes en ambientes
controlados, pero depende bastante de factores externos como
la iluminación y variación del color mientras la coocurrencia de
bordes es inmune a estos factores. Depende del tipo de
aplicación el método a escoger.

• La caracterización por coocurrencia ofrece un método estadístico


para el análisis de texturas en general, particularme efectivo con
texturas que no tienen texels definidos y por lo tanto
características aleatorias.

61
8. APENDICE. SOFTWARE

Para la realización de este proyecto se desarrolló una aplicación en


Delphi 3, la cual implementa todos los procedimiento explicados en
este documento. Esto incluye algoritmos para la caracterización y
clasificación de texturas y la detección de defectos en telas.

Aunque se consume mucho código en visualización e interface, se


ofrecen las rutinas básicas para el análisis estadístico. Estas son :

function CoNiveles(imagen : Tbitmap; nivel, rgbC : integer; Ley : CoLey) : MATRIZA;

Esta función devuelve la matriz de coocurrencia A, al introducirle la

imagen, el componente de color (R,G,B) y el operador P.


Además se proporcionan los descriptores :

function maxC(C : MATRIZC; nd : integer) : double;


function EMDOk(C : MATRIZC; nd, orden : integer) : double;
function EMIDOk(C : MATRIZC; nd, orden : integer) : double;
function Entropia(C : MATRIZC; nd : integer) : double;
function Uniformidad(C : MATRIZC; nd : integer) : double;
function Homogeneidad(C : MATRIZC; nd : integer) : double;
function Contraste(C : MATRIZC; nd : integer) : double;
function Correlacion(C : MATRIZC; nd : integer) : double;

Y las funciones para la detección euclidiana y por correlación :

function distancia(C1, C2 : MATRIZC; nd : integer) : double;


function CorrelacionC(C1, C2 : MATRIZC; nd : integer) : double;

62
Además están las funciones que realizan todo el procedimiento para
la coocurrencia de bordes :

function Canny(imagen : Tbitmap; rgbC : integer) : ImBordes;


procedure Nonmax(var info : ImBordes);
procedure etiquetar(var info : ImBordes);

Aunque la siguiente función reúne las tres anteriores para entregar


directamente la matriz de coocurrencia de bordes :

function CoBordes(imagen : Tbitmap; rgbC : integer) : MATRIZB;

63
9. BIBLIOGRAFIA

[1] J.T. Tou and R.C. Gonzales. Pattern Recognition Principles.


Addison -Wesley, 1974.

[2] K. Fukunaga. Introduction to Statistical Pattern Recognition.


Academic Press, London, 2nd edition, 1990.

[3] Rafael C. González, Richard E. Woods. Tratamiento Digital de


imágenes. Addison – Wesley. 1992.

[4] Guy Mayer Smith. Image Texture Analysis using zero-crossing


information. Ph. D. Thesis. 1998.

[5] N. Pican, E. Trucco, M. Ross, D. Lane, Y. Petillot, Tena Ruiz.


Texture Analysis for seabed classification. Ocean Systems
Laboratory. Heriot-Watt University, UK. 1998.

[6] Wouwer, Gert Van de. Wavelets for multiscale texture analysis.
Antwerpen University. 1998.

64
[7] Athanasios Papoulis. Probability, Random Variables, and
Stochastic Processes. McGraw Hill, 3rd Edition. 1991.

[8] J. P. Kuan, P. H. Lewis. Complex Texture Classification.


University of Southampton. 1998.

[9] Emanuele Truco, Alessandro Verri. Introductory techniques for


3-D computer vision. Prentice Hall. 1996.

[10] MeasTex Image Texture Database and Test Suite


http://www.cssip.elec.uq.edu.au/~guy/meastex/meastex.html#intro

[11] Brodatz Image Texture Database


http://www.ux.his.no/~tranden/brodatz.html

65

También podría gustarte