• No results found

Chapter 6: General discussion

6.3 Recommendations for policy

En el art´ıculo “Structural Graph Extraction from Images” (p´agina 271) se pre- sentan tres nuevos algoritmos que permiten extraer y representar la estructura de una imagen a partir de grafos ac´ıclicos dirigidos. Este trabajo fue motivado por la necesidad de generar bases de datos reales de este tipo de grafos para realizar la experimentaci´on de los lenguajes k-testables para grafos.

En las siguientes secciones se describen los m´etodos propuestos: (1) grafos obtenidos de la vecindad del ´arbol q-tree de una imagen, (2) mediante el uso de una rejilla estructural y (3) a partir de la extracci´on del esqueleto que representa una imagen.

5.7.1 Grafos de vecindad

El primer m´etodo extrae el grafo ac´ıclico dirigido a partir de los caminos de vecindad obtenidos en la representaci´on en forma de q-tree de una imagen.

El grafo se crea siguiendo un recorrido de arriba hacia abajo y de izquierda a derecha del ´arbol q-tree y uniendo los nodos no vac´ıos encontrados. Para cada nodo no vac´ıo se calculan sus 8-vecinos, teniendo en cuenta que: no se a˜naden arcos hacia nodos que ya hayan sido procesados, y que cuando se tenga que crear un arco desde un nodo no apuntado (que no existan arcos que lleguen a ´el) hasta uno que s´ı que lo est´e, se deber´a cambiar la direcci´on de dicho arco. Estos criterios se utilizan para evitar la formaci´on de ciclos.

El c´alculo de los 8-vecinos de un nodo en un ´arbol q-tree no es una tarea trivial debido a que los vecinos se pueden encontrar en ramas diferentes y a distintos niveles de profundidad en el ´arbol (ver figura 5.10).

Figura 5.10: Ejemplo de q-tree y de los 8-vecinos calculados a partir del nodo J.

vecindad. En el algoritmo propuesto se ha extendido los trabajos para el c´alculo de vecindad en q-trees de [52, 55], los cuales ´unicamente calculan los 4-vecinos de un nodo, o realizan dos pasos para calcular los 8-vecinos.

Nuestra soluci´on calcula en una sola etapa y con el mismo nivel de comple- jidad los 8-vecinos de un nodo y adem´as con cualquier nivel de profundidad en el ´arbol. A continuaci´on se describe el proceso que realiza este c´alculo.

C ´alculo de la vecindad

Se define un array de localizaci´on para codificar la posici´on de las particiones en la imagen y su correspondiente recorrido en el q-tree. Cada dimensi´on de este array representa una coordenada (vertical u horizontal) que se codifica utili- zando 1 bit: las direcciones positivas (arriba y derecha) se codifican con 1 y las negativas (abajo e izquierda) con 0 (ver figura 5.11).

Figura 5.11: Ejemplos del array de condificaci´on binaria.

El algoritmo propuesto calcula la vecindad para un nodo dado a partir de su array de localizaci´on (M) y la direcci´on en la cual se quiere calcular su vecino. Dependiendo de esta direcci´on el algoritmo distingue entre dos casos: los vecinos esquina (dos regiones que ´unicamente comparten un punto, por ejemplo en la figura 5.10 ser´ıan A e I), y los vecinos que comparten m´as de un punto (llamados “face neighbours”, A y B en la figura 5.10).

Para el c´alculo de un vecino, el algoritmo recorre el array de localizaci´on (M) de derecha a izquierda en la dimensi´on indicada (o dimensiones en el caso de los vecinos esquina), y va negando el valor de cada bit hasta que el resultado obtenido sea igual a la direcci´on indicada (1: positiva, 0: negativa).

Por ejemplo, para calcular el vecino derecho (direcci´on positiva: 1) de I (figu- ra 5.10), el algoritmo niega el valor de cada bit de la columna superior (direcci´on

horizontal) empezando por la derecha y hacia la izquierda, hasta que alcance la condici´on de finalizaci´on: el resultado sea igual a 1:

I=  0 ¯1 1 0  ⇒ ¯0 0 1 0  ⇒  1 0 1 0  = J

Cuando el algoritmo termina la exploraci´on de una dimensi´on del array sin alcanzar la condici´on de finalizaci´on indica que el nodo no tiene vecino en esa direcci´on (por ejemplo si intentamos calcular el vecino izquierdo del nodo A).

El proceso para el c´alculo de los vecinos esquina es el mismo, pero reali- zando la misma operaci´on en ambas direcciones hasta alcanzar la condici´on de finalizaci´on en ambas. En el siguiente ejemplo se puede ver el c´alculo del vecino superior izquierda del nodo N:

N=  1 ¯1 0 ¯1  ⇒  1 0 ¯0 0  ⇒  1 0 1 0  = J

Una vez calculado el vecino el algoritmo comprueba el tipo de nodo obteni- do, distinguiendo tres posibles casos:

1. Nodo hoja: el algoritmo termina devolviendo dicho nodo.

2. Nodo interno: en este caso se tienen que calcular los vecinos de mayor nivel hasta obtener un nodo hoja.

3. Ning´un nodo: esto es debido a que el vecino es de menor nivel que el nodo actual, por lo que habr´a que calcular los nodos padre hasta obtener un nodo hoja.

En el art´ıculo se puede encontrar una descripci´on m´as detallada de cada uno de estos procesos y los algoritmos completos para su c´alculo (ver p´agina 274). 5.7.2 Grafos mediante una rejilla estructural

El segundo algoritmo trata la imagen como una rejilla estructural, de forma que tras un postproceso obtiene un grafo ac´ıclico dirigido. Los grafos obtenidos man- tienen las mismas ventajas que el m´etodo anterior: permiten la reconstrucci´on de la muestra y la extracci´on mediante una resoluci´on parametrizable.

Empezando en la esquina superior derecha el algoritmo divide la imagen en regiones cuadradas de un tama˜no dado k. Las regiones cuyo valor supere un determinado umbral son consideradas los nodos del grafo. Los arcos se definen desde un nodo dado hasta sus nodos adyacentes en las direcciones: este, sur y sureste. En la figura 5.12 se puede ver un ejemplo.

Figura 5.12: Ejemplo del c´alculo de un grafo mediante una rejilla estructural. Los no-

dos ra´ız se han marcado en gris.

5.7.3 Grafos a partir de la extracci´on del esqueleto

El tercer m´etodo propuesto es una extensi´on natural a grafos del trabajo realiza- do en [56, 54] para ´arboles. El algoritmo primero procesa la imagen para obtener el esqueleto que la representa [51]. A continuaci´on genera el grafo recorriendo dicho esqueleto, teniendo en cuenta que cuando dos caminos se crucen signifi- car´a una conjunci´on en el grafo (el algoritmo completo se puede consultar en la p´agina 278). En la figura 5.13 se puede ver un ejemplo de los resultados obteni- dos.