Localización de la marca

Localización de la marca

Para posicionarse respecto a un marcador artificial RA, el primer paso es encontrarlo dentro de la imagen que captura la cámara. Esto podría ser complicado en una imagen real de no ser porque nosotros sabemos de antemano que estamos trabajando con un marco negro, por lo que, tras capturar la imagen, el primer paso que se da es binarizarla, es decir, los pixeles que estén por encima del umbral de luz medio de la imagen pasan a ser blancos (color=255) y el resto negros (color=0).

Para calcular ese umbral medio, suele construirse el histograma de la imagen, o, lo que es lo mismo, contar cuantos pixeles hay de cada color, entre 0 y 255. Después se busca el valor máximo de ese histograma. En la figura, por ejemplo, hay dos picos, en torno al 125-140. Ese sería nuestro umbral de binarización, por ejemplo el 130, y, a partir de ahí, binarizaríamos, con lo que el histograma de la imagen resultante sólo tendría puntos blancos y negros.

Nótese que no sólo el marco buscado aparece en negro, sino también las letras del patrón interno y algo de ruido de contorno, que corresponden a otros puntos negros de la imagen o a grises más oscuros que el umbral. Como sólo nos interesa tener el marco, para eliminar el resto se recurre a un paso adicional: la búsqueda de componentes conectadas. Dicha búsqueda en su forma más sencilla consiste simplemente en recorrer la imagen pixel a pixel. Si alguno de los píxeles es negro, se anota con un número de grupo, empezando por el 1. Antes de empezar un nuevo grupo, se comprueba si en la vecindad 8 del pixel (cualquiera de los 8 pixeles que tocan con él) hay ya algún pixel etiquetado. De ser así, el número de grupo del pixel encontrado es el mismo que el de su(s) vecino(s), mientras que si no hay vecinos etiquetados, se empieza el grupo siguiente. Finalmente, pueden descartarse todos los grupos cuyo número de píxeles sea inferior a un umbral, para eliminar el ruido, los artefactos y cualquier región negra que no sea candidata a marca.

Nótese en la figura que, desde la perspectiva de la imagen, la "O" está prácticamente tocando con el marco negro y, por tanto, no se elimina. El resto de las letras, al ocupar pocos píxeles, si se van.

A continuación, a la imagen restante se le aplica una detección de contorno, quedándonos sólo con el exterior. Existen multitud de algoritmos para detección de contorno, algunos mucho más fiables que otros. La mayoría se basan en comprobar la vecindad de cada píxel. Por ejemplo, en el formato más sencillo, para un pixel determinado, se suma el nivel de gris de los pixeles en su vecindad 8 para estimar un umbral, que determinará si nos quedamos ese pixel como contorno o no.

En este caso, al aplicarse a una imagen binarizada y simplificada, no es necesario emplear uno muy complejo (e.j. este). Un ejemplo sería recorrer la imagen y, dado el primer pixel blanco, que se encuentre, etiquetarlo como contorno y buscar entre todos los adyacentes (vecindad 8) aquellos que tienen vecinos blancos y negros simultáneamente. En cada pixel etiquetado como contorno se repetiría la operación hasta no encontrar ninguno nuevo. Evidentemente, con este algoritmo sólo se extraería el contorno exterior, pero en principio no nos hace falta más.

El siguiente paso consiste en extraer las esquinas y, a partir de ahí, los lados del cuadrado detectado. Para ello, una vez más, hay multitud de algoritmos, pero dado que trabajamos con un cuadrado binarizado, se puede emplear uno sencillo. Por ejemplo, puede servirnos un estimador de curvatura basado en pendiente (k-slope). Este método consiste en recorrer el contorno detectado (píxeles blancos) píxel a píxel y, en cada uno, estimar su curvatura, que es una medida de cuánto se dobla una curva en cada punto.

Para calcular la curvatura mediante k-slope, primero se fija el valor de k. Un k muy alto filtrará mucho el ruido del contorno, pero cabe la posibilidad de que se pierdan algunas esquinas. Si k es demasiado pequeño, cualquier ruido de contorno se detectará como esquina. En cualquier caso, dado un k determinado, en el ejemplo de la figura k=3, se evalúa el ángulo formado por los vectores que unen el pixel evaluado con k píxeles de contorno antes y k después. Normalmente, y para evitar cálculos innecesarios, este tipo de operaciones se tabulan a posteriori. Por ejemplo, en la tabla de la figura anterior están todos los ángulos hasta vecindad 3. Dado un pixel (i,j) en la imagen y su k-vecino and its k-neighbour (i+Δi, j+Δj), Δi and Δj definen la posición de la tabla donde se encuentra su pendiente-k, que equivale a la arcotangente de Δj/Δi. Por ejemplo, para el vector verde, el vecino-3 del pixel gris está 3 pixels a la derecha y dos hacia abajo, es decir, corresponde con el valor 120 de la tabla. El rojo sería tres posiciones a la izquierda y una hacia abajo, es decir 255. La diferencia entre ambos vectores daría, por tanto, 135.

 

La función de curvatura tiene un aspecto como el de la figura de la derecha para una forma como la de la izquierda: donde aparecen esquinas, la función muestra un pico de altura proporcional al ángulo subyacente a la esquina, los tramos rectos tienen curvatura cero (es decir, el segmento no se dobla en absoluto) y los curvos deberían corresponderse con rectas a una determinada altura, sólo que debido al ruido de contorno, estos segmentos están rizados (la zona 4-1 corresponde a la curva superior de la figura). Es inmediato decidir que para localizar esquinas de 90 grados, basta con coger todos los puntos que superan un determinado umbral de curvatura en la función (en este caso, 2 y 3, pero en un cuadrado saldrían, obviamente, cuatro: {Xi,Yi}|4). Los lados del cuadrado son los segmentos que unen las cuatro esquinas detectadas, que se pueden parametrizar como {aj,bj,cj}|4}.

 

 

 

Reflexión

Si se tapase cualquier parte de la marca, no necesariamente una esquina, ¿podría el sistema seguir funcionando?

Piense que ésto puede ocurrir tanto por que la marca se esté tocando con la mano como porque haya un objecto entre la cámara y la marca, pero también por cualquier efecto de sombra o error de detección de dicha marca.

Pregunta de Elección Múltiple

Pregunta

¿Cual es la función de curvatura correspondiente a la imagen de la figura?

Sugerencia

Medite sobre el número de esquinas que tiene dicha figura y cómo se representan éstas en la función

Respuestas

(a)

(b)

(c)

Retroalimentación

Obra publicada con Licencia Creative Commons Reconocimiento 2.5