Detección multimarca

Detección multimarca

ARtoolkit tiene un modo de detección de marcas que permite la detección de marcas múltiples. En este modo de detección multimarca, varias marcas se unen formando una única marca. Para ver el funcionamiento multimarca de ARToolkit ejecutar el programa examples/multiTest. Aquí se puede ver un ejemplo modificado en el que se usan solo dos marcas en vez de 6 como en el ejemplo por defecto de ARToolkit.

La detección multimarca de ARToolkit es especialmente últil para evitar el problema de oclusión mencionado anteriormente, pues al ser la multimarca, una formación de distintas marcas menores, si se tapa una, pero se siguen detectando otras, el programa seguirá funcionando. Así por ejemplo, en estas imágenes se puede ver como se está tapando expresamente una de las dos marcas, y sin embargo, se sigue mostrando el cubo sobre su posición correcta, pero en rojo indicando que esa marca no se está detectando actualmente.

Así pues, este modo de funcionamiento de ARToolkit es muy util y práctico y soluciona un problema recurrente en este tipo de aplicaciones de una forma fácil y sencilla. Sin embargo, obviamente si se tapan todas las marcas que forman parte de la multimarca, el sistema dejará de funcionar.

Una vez visto el funcionamiento de ARToolkit en modo multimarca, hay que entender como funciona. Y realmente, ARToolkit en modo multimarca funciona igual que en modo mono marca. Si se mira el código del programa multiTest.c (en examples/multi), se pueden reconocer los pasos básicos de todo programa ARToolkit (junto con otras partes dedicadas a mostrar los cubos de las marcas visibles y las no visibles), que son:

  1. Inicialización. La inicialización del patrón multimarca se hace en la línea 178 en la función arMultiReadConfigFile. A esta función, a diferencia de la función arLoadPatt no se le pasa el nombre del patrón a cargar directamente, sino que se le pasa un fichero (bin/Data/Multi/marker.dat) que contiene en primer lugar el número de patrones que forman parte de la multimarca, el nombre del fichero del patron, su tamaño, y su matriz de transformación indicando su posición relativa dentro de la multimarca. Pulse aquí si quiere ver un ejemplo de fichero.
  2. Captura de imagen de la cámara. Esto se hace en la línea 97 con la función arVideoGetImage, como en el caso normal.
  3. Buscar cuadrados y los patrones en la imagen. Esto si es diferente al caso de una marca sola, y se hace mediante la función arMultiGetTransMat (línea 131). Esta función devuelve, por un lado la posición de la multimarca (en la variable trans de la estructura que devuelve arMultiGetTransMat) y la posición de cada una de las marcas que forman la multimarca, respecto a la posición de la multimarca y si se ha detectado cada marca concreta o no (variable marker[i] de la estructura que devuelve la función).
  4. Dibujar. Esto se hace de una forma más compleja que en un programa normal, pero por la forma en que funciona este ejemplo concreto. En las líneas 147 a 154 se dibujan los cubos que se han detectado y los que no mediante la función draw, a la que se le pasa la posición de la multimarca detectada, y la posición de cada uno de las marcas dentro de la multimarca y si se han detectado o no dichas marcas.
Así pues, como se puede observar, esta funcionalidad de ARToolkit es bastante práctica y realmente supone muy poco cambio respecto al funcionamiento normal de ARToolkit.

 

Obra publicada con Licencia Creative Commons Reconocimiento 2.5