Estamos interesados en encontrar caminos que conecten uniones, es decir, caminos a lo largo de aristas que conecten uniones, siempre y cuando dichas aristas existan. El resultado de calcular el gradiente de una imagen se muestra en la Figura 3.1. Vamos a enfocar el problema del agrupamiento como la búsqueda de un camino entre dos uniones. Si realmente existe una arista entre dos uniones, la magnitud del gradiente de la imagen nos proporcionará dicho camino.
![]()
![]()
| E | P({pj, aj}) = |
|
log { |
|
}+ |
|
log { |
|
} (3.1) |
Figure 3.2: Estadísticas de las aristas: Pon y Poff, junto con el logaritmo del ratio entre las dos.
La probabilidad de que un segmento se encuentre encima de una arista se modela mediante una función de distribución P(f(pj)) sobre las respuestas de un filtro no lineal f(pj)=f(|Ñ I (pj)|), donde |Ñ I (pj)| es la magnitud del gradiente. La función de distribución P(f(pj)) se modela dependiendo de la posición relativa entre un segmento pj y la arista, y se define en los siguientes términos: donde Pon(f(pj)) y Poff(f(pj)) son las distribuciones de probabilidad de las respuestas de los segmentos encima y fuera de una arista. Estas funciones se obtienen empìricamente, calculando las estadísticas de las respuestas del filtro cuando localizamos el segmento encima de la arista y cuando lo localizamos fuera de ella. Para el diseño del filtro de intensidad nos hemos basado en el propuesto en [Geman y Jedynak1996], filtro que también utilizaron Yuille y Coughlan [Yuille y Coughlan1999] y que detallamos a continuación.Figure 3.3: Las posibles configuraciones del filtro (izquierda), nomenclatura de los píxeles (derecha arriba) y los diez test realizados a lo largo de una determinada configuración (derecha abajo).
| |I |
|
-I |
|
| < min | {|I |
|
-I |
|
|, |I |
|
-I |
|
|, |I |
|
-I |
|
|, |I |
|
-I |
|
|} (3.4) |
![]()
Figure 3.4: Funciones de distribución de probabilidad: Pon y Poff, junto con el logaritmo del ratio entre las dos.
| P |
|
( aj) µ exp{ - |
|
| aj|} (3.5) |
Figure 3.5: Funciones de distribución de probabilidad: P G y U, junto con el logaritmo del ratio entre las dos
| D(P1||P2)= |
|
P1(xj)log |
|
(3.8) |
Por otro lado, la búsqueda puede finalizar sin encontrar ninguna unión. Esto sucede cuando todos los caminos parciales han sido eliminados. Uno a uno se van eliminando debido a la pérdida de alguna de las recompensas. Podemos distinguir entre dos situaciones:
![]()
![]()
![]()
En la Figura 3.10 se puede observar algunos caminos generados. El algoritmo mostrado en la Figura 3.11 es el que realiza el agrupamiento de las uniones visitando todas las uniones.Algoritmo de búsqueda de camino Alg_ABayes
Entrada: xc, yc, q centro y ángulo de salida del camino a buscar. Ie imagen de gradiente.
Salida: Verdadero si ha encontrado camino y falso si no lo ha encontrado. También devuelve el Camino y Union_detectada.
Generar Q caminos. Cada camino está compuesto de un segmento que parte del punto pasado como parámetro. El segmento está compuesto por dos puntos. El primero de ellos tendrá como punto inicial (xc, yc) y como final (xc+ls*cosq, xc+ls*sinq). Los dos siguientes caminos se generan de la misma forma pero variando en ±b grados el ángulo de salida y así sucesivamente.
El algoritmo utiliza una lista de caminos LF. Al principio esta lista está compuesta por los Q caminos generados en el paso anterior. Cuando insertamos en esta lista lo hacemos de forma ordenada según el valor de E de cada camino, siendo el primer elemento de la lista el de menor E. De esta manera nos evitamos el reordenar la lista.
Mientras siempre hacer /* Bucle infinito */
Si LF está vacía entonces
Si longitud(Mejor_camino) < NT entonces
Devolver Falso.
Sino
Devolver Cierto, Mejor_camino. No hemos alcanzado ninguna unión. El punto de terminación de Mejor_camino es un posible candidato a unión.
FinSi
FinSi
Seleccionamos aquel elemento de LF con menor valor de E y lo eliminamos de la lista. Al estar ordenada de menor a mayor simplemente seleccionamos el primer elemento de la lista. Lo llamaremos Mcamino.
Si longitud(Mejor_camino) < longitud(Mcamino) entonces
Mejor_camino=Mcamino. Almacenamos una copia del mejor camino hasta el momento para el caso de que no encontremos ninguna unión y eliminemos todos los caminos.
FinSi
Eliminamos todos los caminos de LF cuya longitud sea inferior a la de Mcamino menos una constante.
Expandimos el camino actual. A partir del último segmento de Mcamino generamos Q caminos, de la misma forma que hemos generado los primeros caminos. Los insertaremos en LF siempre y cuando su recompensa geométrica y de intensidad en los últimos segmentos supere el umbral T y T, respectivamente.
FinMientras
Figure 3.9: Algoritmo de búsqueda de camino.
Usamos el etiquetado de los límites de las secciones angulares para evitar que se recorra el mismo camino dos veces: en un sentido y en el contrario. Esta redundancia proporciona robustez en el sentido de que si un camino no se obtiene en un sentido, se podría obtener en el contrario.Algoritmo de agrupamiento Alg_Agr
Entrada: C={Ui:(xci, yci, q1i, q2i, ..., qli)} conjunto de uniones detectadas, con l no necesariamente el mismo para todo i. Ie imagen de gradiente.
Salida: Mapa planar detectado.
Para cada unión U de C hacer
Para cada límite qi de las secciones angulares de U hacer
Si qi ya ha sido visitado entonces continuar con el siguiente límite
Sino
Marcar qi como visitado
Introducir las coordenadas del centro de la unión como un vértice del mapa.
Si Alg_ABayes ( Ie, xc, yc, qi, Camino, Union_encontrada) entonces
Incorporar Camino al mapa junto con las coordenadas del centro de Union_encontrada.
Marcar como visitado aquel o aquellos límites de Union_encontrada cuya diferencia angular con respecto al ángulo de entrada del camino a la unión sea menor de qf.
FinSi
FinSi
FinPara
FinPara
Figure 3.11: Algoritmo de agrupamiento.
Figure 3.12: Ejemplos de aplicación del algoritmo de agrupamiento (componente de intensidad: filtro no lineal).
Figure 3.13: Ejemplos de aplicación del algoritmo de agrupamiento (componente de intensidad: filtro de modelado de aristas).
Figure 3.14: Ejemplos de aplicación del algoritmo de agrupamiento (componente de intensidad: filtro de modelado de aristas).
Figure 3.15: Ejemplos de aplicación del algoritmo de agrupamiento (componente de intensidad: filtro de modelado de aristas).
| E | (r)= | ó õ |
|
log |
|
du |
| E | (r)= |
|
log |
|
En la Figura 3.16 se muestra un resultado de aplicar este método. Como se puede observar existen segmentos que mantienen evidencia a pesar de no tener un soporte de arista en buena parte de su longitud. Esto es debido a que la parte que sí tiene soporte compensa la parte que no tiene. Esto provoca que se detecten demasiadas aristas entre puntos. Además, otro problema es que es poco flexible a pequeños cambios en la posición de los puntos característicos. Es decir, pequeños errores en la localización de los puntos esquina pueden provocar que perdamos la evidencia de la arista.![]()
La imagen superior de la Figura 3.19 muestra el resultado de aplicar un umbral de -1. En la imagen inferior se muestra el resultado de variar la componente geométrica. En este caso hemos aplicado un umbral de -0.5. La Figura 3.20 muestra el resultado de aumentar el umbral de la componente geométrica a 0.5 (arriba) y 1 (abajo). Como se puede observar, conforme aumentamos la componente geométrica, sólo sobreviven aquellos caminos cuyo cambio de curvatura es poco significativo.
![]()
![]()
![]()
Figure 3.21: Mejora producida al introducir el agrupamiento de uniones. Las líneas azules son las uniones detectadas y las verdes son los caminos del agrupamiento. En la imagen de la izquierda podemos observar como algunas de las uniones tienen límites que no se corresponden con regiones reales. El proceso de agrupamiento elimina estos límites. En la imagen de la derecha (centro) una unión con forma de T termina clasificándose como una L. En la imagen de la derecha (arriba) la unión original es eliminada al no tener ningún límite soporte de arista.