realidad aumentada 1a edicion

120
!"#$%& (%)AB$CA D%#EF$$% 0"1F2 3"$$C4% 5C#)B)2CA 6"1FC# 78 7$9:&"E 6F;<)CA 6%&< 6C&=& !"&>#% ?B)ECA !"#$"%!&"

Upload: maria-elisa-kok

Post on 11-Sep-2015

14 views

Category:

Documents


7 download

DESCRIPTION

Realidad aumentada

TRANSCRIPT

  • !"#$%&'(%)AB$CA'D%#EF$$%0"1F2'3"$$C4%'5C#)B)2CA

    6"1FC#'78'7$9:&"E'6F;

  • CDBEF",' '!C"$F2"2'7:;C)>"2"8''")'#)$%%:C'BE>FE%'E%)'7!'%%$(F>')'*$C)2C#8

    -EB"%A$,'''!"#$%&'(%)AB$CA'D%#EF$$%+''0"1F2'3"$$C4%'5C#)B)2CA+'''6"1FC#'7$%)&%'7$9:&"E'6F;F#'2C':)"':$")>F$$"'2C'!"#$%&'(%)AB$CA'D%#EF$$%')''''?C#7F%'("#E="'D%)2"#")8'8"':%#>"2"')'$"&'C)>#"2F$$"&'$:C#%)'2F&C;"2"&'E%)'(9D&+'*$C)2C#+'9)6?E":C')'>:C)>$$FEC8'

    8%A5B&9A:8";;"#$:#F9:F#')'E%;:)FE"#':=9$FE";C)>C'$"'%9#"+'9"4%'$"&'E%)2FEF%)C&' &F7:FC)>C&?' 28'!CE%)%EF;FC)>%8'0C9C' #CE%)%EC#' $%&' E#%&'2C' $"'%9#"'2C' $"';")C#"'C&:CEF@E"2"' :%#' C$' ":>%#' %' C$' $FEC)EF"2%#8' A8' B%' E%;C#EF"$8' B%' ::C2C' :>F$FA"#' C&>"' %9#"' :"#"' @)C&'E%;C#EF"$C&8'C8'?F)'%9#"&'2C#F1"2"&8'B%'&C'::C2C'"$>C#"#+' >#")&$%#;"#'%'7C)C#"#':)"'%9#"'2C#F1"2"'"':"#>F#'2C'C&>"'%9#"8'DB&'F)$%#;"EFD)'C)?' >>:?EEE#C">F1CE%;;%)&8%#7E$FEC)&C&E9)/)E/)2EC8FE

    !"#$"%!&"

  • Prefacio

    La Realidad Aumentada (RA) es una variacin de Realidad Virtual.Las tecnologas de Realidad Virtual sumergen al usuario dentro de unentorno completamente sinttico, sin tener consciencia del mundo re-al que lo rodea. La RA, sin embargo, permite al usuario ver el mundoreal, en el que se superponen o con el que se componen objetos vir-tuales. As, la Realidad Aumentada no sustituye la realidad, sino quela complementa.

    La RA ha experimentado un creciente inters en estos ltimos aos.En Septiembre de 2009, The Economist asegur que intentar imagi-nar cmo se utilizar la Realidad Aumentada es como intentar predecirel futuro de la web en 1994. Segn la consultora Juniper Research, laRA en dispositivos mviles, generar ms de 732 millones de dlaresen 2014.

    Este libro pretende proporcionar una visin prctica para desarro-llar aplicaciones de RA, utilizando para ello la biblioteca ARToolkitpara el desarrollo de este tipo de aplicaciones y la suite de modeladotridimensional Blender. As mismo, el presente libro cubre aspectosesenciales en este mbito, como por ejemplo la base de los fundamen-tos matemticos necesarios para trabajar en el mundo 3D o el uso deAPIs de programacin grfica como OpenGL. Finalmente, tambin selleva a cabo un estudio del uso de las bibliotecas OpenCV y Ogre3D.

    Sobre este libro...

    Este libro que tienes en tus manos ha surgido de los apuntes delCurso de Realidad Aumentada impartido en las instalaciones del Con-sorcio Identic en Casar de Cceres en Julio de 2011. Puedes obtenerms informacin sobre las actividades del consorcio en www.identic.es.

    La versin electrnica de este libro (y los ejemplos de cdigo) pue-den descargarse de la web: www.librorealidadaumentada.com. Salvoque se especifique explcitamente otra licencia, todos los ejemplos dellibro se distribuyen bajo GPLv3. El libro fsico puede adquirirse desdela pgina web de la editorial online Bubok en http://www.bubok.es.

  • !"#$%&' ()ABC"D! "#$$%&! '()A(B!CDB(EF(! F0! 102(B34A5)6&! 7058FB95:6:!:F! ;69A5!ECF'!%C0C'1"C2&E!F9!"B(2F9(B!25AD?,! )D9! AF369! :F! 508F9A5%6)5*0!F9A40! BF6! ?60) 6!! F9! "B(2F9(B!#$D:60AF! '()A(B! F! 53E6BAF! :()F0)56!F0!
  • ndice general

    1. Introduccin 1

    1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.1.1. Un poco de historia . . . . . . . . . . . . . . . . . . 3

    1.2. Caractersticas Generales . . . . . . . . . . . . . . . . . . . 5

    1.3. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    1.4. Alternativas tecnolgicas . . . . . . . . . . . . . . . . . . . 8

    2. Mtodos de Registro 9

    2.1. Problemtica . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    2.2. Mtodos de Tracking . . . . . . . . . . . . . . . . . . . . . 10

    2.2.1. Aproximaciones Bottom-Up . . . . . . . . . . . . . . 11

    2.2.2. Aproximaciones Top-Down . . . . . . . . . . . . . . 13

    3. Introduccin a ARToolKit 15

    3.1. Qu es ARToolKit . . . . . . . . . . . . . . . . . . . . . . . 15

    3.2. Instalacin y configuracin . . . . . . . . . . . . . . . . . . 16

    3.3. El esperado Hola Mundo! . . . . . . . . . . . . . . . . . . 17

    3.3.1. Inicializacin . . . . . . . . . . . . . . . . . . . . . . 20

    3.3.2. Bucle Principal . . . . . . . . . . . . . . . . . . . . . 21

    3.3.3. Finalizacin y funcin Main . . . . . . . . . . . . . 22

    3.3.4. Compilacin con Make . . . . . . . . . . . . . . . . 23

    3.4. Las Entraas de ARToolKit . . . . . . . . . . . . . . . . . . 23

    3.4.1. Principios Bsicos . . . . . . . . . . . . . . . . . . . 24

    3.4.2. Calibracin de la Cmara . . . . . . . . . . . . . . . 26

    III

  • 3.4.3. Deteccin de Marcas . . . . . . . . . . . . . . . . . . 29

    3.5. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . 34

    4. Fundamentos Matemticos 35

    4.1. Transformaciones Geomtricas . . . . . . . . . . . . . . . 36

    4.1.1. Representacin Matricial . . . . . . . . . . . . . . . 37

    4.1.2. Transformaciones Inversas . . . . . . . . . . . . . . 38

    4.1.3. Composicin . . . . . . . . . . . . . . . . . . . . . . 39

    4.2. Visualizacin 3D . . . . . . . . . . . . . . . . . . . . . . . . 41

    4.2.1. Pipeline de Visualizacin . . . . . . . . . . . . . . . 42

    4.2.2. Proyeccin en Perspectiva . . . . . . . . . . . . . . . 45

    4.3. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . 47

    5. OpenGL para Realidad Aumentada 49

    5.1. Sobre OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . 50

    5.2. Modelo Conceptual . . . . . . . . . . . . . . . . . . . . . . 50

    5.2.1. Cambio de Estado . . . . . . . . . . . . . . . . . . . 51

    5.2.2. Dibujar Primitivas . . . . . . . . . . . . . . . . . . . 52

    5.3. Pipeline de OpenGL . . . . . . . . . . . . . . . . . . . . . . 53

    5.3.1. Transformacin de Visualizacin . . . . . . . . . . 54

    5.3.2. Transformacin de Modelado . . . . . . . . . . . . . 54

    5.3.3. Transformacin de Proyeccin . . . . . . . . . . . . 55

    5.3.4. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . 55

    5.3.5. Dos ejemplos de transformaciones jerrquicas . . 58

    5.4. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . 61

    6. Uso Avanzado de ARToolKit 63

    6.1. Histrico de Percepciones . . . . . . . . . . . . . . . . . . . 63

    6.2. Utilizacin de varios patrones . . . . . . . . . . . . . . . . 66

    6.3. Relacin entre Coordenadas . . . . . . . . . . . . . . . . . 70

    6.4. Tracking Multi-Marca . . . . . . . . . . . . . . . . . . . . . 73

    6.5. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . 77

    7. Produccin de Contenidos para Realidad Aumentada 81

    7.1. Modelado 3D . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    7.1.1. Solidificado de Alambres . . . . . . . . . . . . . . . 83

    7.2. Materiales y Texturas . . . . . . . . . . . . . . . . . . . . . 84

  • 7.2.1. Mapas UV en Blender . . . . . . . . . . . . . . . . . 85

    7.3. Preclculo del Render (Baking) . . . . . . . . . . . . . . . . 86

    7.4. Un exportador sencillo . . . . . . . . . . . . . . . . . . . . 88

    7.4.1. Formato OREj . . . . . . . . . . . . . . . . . . . . . 88

    7.4.2. Exportacin desde Blender . . . . . . . . . . . . . . 89

    7.4.3. Texturas: Formato PPM . . . . . . . . . . . . . . . . 91

    7.5. Importacin y Visualizacin . . . . . . . . . . . . . . . . . 91

    8. Integracin con OpenCV y Ogre 99

    8.1. Integracin con OpenCV y Ogre . . . . . . . . . . . . . . . 99

  • Captulo1Introduccin

    La Realidad Aumentada ofrece diversas posibilidades de interac-cin que pueden ser explotadas en diferentes mbitos de aplica-cin. En este captulo definiremos qu se entiende por RealidadAumentada, as como algunas de las soluciones tecnolgicas ms em-pleadas.

    1.1. Introduccin

    La informtica grfica es un rea en continuo desarrollo motiva-do, entre otros factores, por los grandes intereses comerciales que laimpulsan desde el mbito de los videojuegos, el cine y la televisin,las aplicaciones mdicas e industriales, simulacin, etc... En algunosentornos puede ser necesario integrar la representacin de imagensinttica con imgenes del mundo real.

    La Realidad Aumentada se encarga de estudiar las tcnicas quepermiten integrar en tiempo real contenido digital con el mundo real.Segn la taxonoma descrita por Milgram y Kishino [16], los entornosde Realidad Mixta son aquellos en los que se presentan objetos delmundo real y objetos virtuales de forma conjunta en una nica pan-talla. Esto abre un abanico de definiciones en la que se sitan lasaplicaciones de Realidad Aumentada (ver Figura 1.2).

    A diferencia de la Realidad Virtual donde el usuario interacta enun mundo totalmente virtual, la Realidad Aumentada se ocupa de ge-nerar capas de informacin virtual que deben ser correctamente ali-

    1

  • [2] CAPTULO 1. INTRODUCCIN

    !"#$%"$&'%#()A

    !"#$%"$BC)A

    !"#$%&'(%)A#

    D("E$FBC)AD("E$FBC)A BC)A'E)EF0(1C"#)E)BC)A'E)EF0(1C"#)E) &'%#()A'E)EF0(1C"#)E)&'%#()A'E)EF0(1C"#)E) BC)A'E)EF&'%#()ABC)A'E)EF&'%#()A

    BC)A'E)EF0(1C"#)E)F!23)4')A

    BC)A'E)EF0(1C"#)E)F5)2)E)FC"F

    6'23$2'#'7$2FECF&'2'8"

    BC)A'E)EF&'%#()A

    9C1':"1C%2'7)

    BC)A'E)EF&'%#()AF

    :"1C%2'7)

    :"#C%;)4C2FECF

  • 1.1. Introduccin [3]

    1.1.1. Un poco de historia

    El primer sistema de Realidad Aumentada fue creado por Ivan Sut-herland [25] en 1968, empleando un casco de visin que permita versencillos objetos 3D renderizados en wireframe en tiempo real. Em-pleaba dos sistemas de tracking para calcular el registro de la cmara;uno mecnico y otro basado en ultrasonidos (ver Figura 1.3).

    Sin embargo no fue hasta 1992 cuando se acu el trmino deRealidad Aumentada por Tom Caudell y David Mizell, dos ingenierosde Boeing que proponan el uso de esta novedosa tecnologa para me-jorar la eficiencia de las tareas realizadas por operarios humanos aso-ciadas a la fabricacin de aviones.

    Figura 1.3: Primer Sistemade Realidad Aumentada deSutherland.

    En 1997, investigadores de la Universidad de Columbia presentanThe Touring Machine el primer sistema de realidad aumentada mvil(MARS). Utilizan un sistema de visin de tipo see-through que combinadirectamente la imagen real con grficos 2D y 3D proyectados en unapantalla transparente. [7]

    En 1998, el ingeniero de Sony Jun Rekimoto [22] crea un mtodopara calcular completamente el tracking visual de la cmara (con 6grados de libertad) empleando marcas 2D matriciales (cdigos de ba-rras cuadrados, ver Figura 1.4). Esta tcnica sera la precursora deotros mtodos de tracking visuales en los prximos aos. Un ao

    Figura 1.4: Marcas matricia-les de Rekimoto.

    ms tarde en 1999, Kato y Billinghurst presentan ARToolKit [10], unalibrera de tracking visual de 6 grados de libertad que reconoce marcascuadradas mediante patrones de reconocimiento. Debido a su libera-cin bajo licencia GPL se hace muy popular y es ampliamente utilizadaen el mbito de la Realidad Aumentada.

    En 2000, un grupo de investigadores de la University of South Aus-tralia [4] presentan una extensin de Quake (AR-Quake, Figura 1.5)que permite jugar en primera persona en escenarios reales. El regis-tro se realizaba empleando una brjula digital, un receptor de GPSy mtodos de visin basados en marcas. Los jugadores deban llevarun sistema de cmputo porttil en una mochila, un casco de visinestereoscpica y un mando de dos botones.

    Figura 1.5: AR-Quake. En 2001 se presenta Archeoguide [28] un sistema financiado por laUnin Europea para la creacin de guas tursticas electrnicas basa-das en Realidad Aumentada (ver Figura 1.6). El sistema proporcionainformacin personalizada basada en el contexto, y muestra recons-trucciones de edificios y objetos mediante una base de datos multime-dia adaptada al problema. La comunicacin se realiza mediante Wifi,y el sistema es altamente escalable permitiendo diferentes dispositivosde visualizacin (porttiles, PDAs, etc).

    Figura 1.6: Archeoguide.En el 2003, Siemens lanza al mercado Mozzies, el primer juego de

    Realidad Aumentada para telfonos mviles. El juego superpone mos-quitos a la visin obtenida del mundo mediante una cmara integradaen el telfono. Este juego fue premiado como el mejor videojuego paratelfonos mviles en dicho ao.

  • [4] CAPTULO 1. INTRODUCCIN

    Figura 1.10: Zapatillas Adidas Originals: Augmented Reality.

    En 2004 investigadores de la Universidad Nacional de Singapurpresentan Human Pacman [3], un juego que emplea GPS y sistemasinerciales para registrar la posicin de los jugadores. El PacMan y losfantasmas son en realidad jugadores humanos que corren por la ciu-dad portando ordenadores y sistemas de visin, percibiendo el mundocomo se muestra en la Figura Figura 1.7.

    Figura 1.7: H-Pacman.

    Tambin en el 2004, la Universidad Tcnica de Viena presenta elproyecto Invisible Train (ver Figura 1.8, el primer juego multi-usuariopara PDAs. Esta aplicacin se ejecutaba totalmente en las PDAs, sinnecesidad de servidores adicionales para realizar procesamiento auxi-liar. Los jugadores controlan trenes virtuales y deben intentar evitarque colisione con los trenes de otros jugadores. El proyecto utiliza labiblioteca Studierstube desarrollada en la misma universidad.

    Figura 1.8: Interfaz de Invi-sible Train, de la Universidadde Viena.

    Figura 1.9: AR-Tennis.

    En 2005 A. Henrysson adapta la biblioteca ARToolKit para poderfuncionar en Symbian, y crea un juego de Tenis (ver Figura 1.9) quegana un premio internacional el mismo ao.

    En 2007, Klein y Murray presentan en ISMAR (uno de los princi-pales congresos de Realidad Aumentada) el algoritmo PTAM [11]; unaadaptacin del SLAM que separa el tracking y el mapping en dos hilosindependientes, consiguiendo en tiempo real unos resultados muy ro-bustos. Con este trabajo consiguieron el premio al mejor artculo delcongreso.

    En 2008, Mobilizy crea Wikitude (ver Figura 1.11) una aplicacinque aumenta la informacin del mundo real con datos obtenidos deentradas de Wikipedia. Originalmente slo estaba disponible para te-

  • 1.2. Caractersticas Generales [5]

    lfonos Android, aunque actualmente puede descargarse para otrasplataformas (como iPhone entre otras).

    Figura 1.11: Wikitude.

    En 2009, SPRXmobile lanza al mercado una variante de Wikitudellamada Layar, que utiliza el mismo mecanismo de registro que Wiki-tude (GPS + Brjula electrnica). Layar define un sistema de capas quepermite representar datos de diversas fuentes globales (como Wikipe-dia o Twitter) adems de servicios locales (como tiendas, estaciones detransporte pblico o guas tursticas). En la actualidad Layar cuentacon ms de 100 capas distintas de contenido.

    Figura 1.12: ARhrrrr!

    El mismo ao se presenta ARhrrrr! (ver Figura 1.12), el primer jue-go con contenido de alta calidad para smartphones con cmara. Eltelfono utiliza la metfora de ventana virtual para mostrar un mapa3D donde disparar a Zombies y facilitar la salida a los humanos queestn atrapados en l. El videojuego emplea de forma intensiva la GPUdel telfono delegando en la tarjeta todos los clculos salvo el trackingbasado en caractersticas naturales, que se realiza en la CPU.

    El videojuego de PSP Invizimals (ver Figura 1.13), creado por el es-tudio espaol Novorama en 2009, alcanza una distribucin en Europaen el primer trimestre de 2010 superior a las 350.000 copias, y msde 8 millones de copias a nivel mundial, situndose en lo ms alto delrnking de ventas. Este juego emplea marcas para registrar la posicinde la cmara empleando tracking visual.

    !"#"$%&'(&)AB)CDE&F012"3)4454657668

    Figura 1.13: Invizimals.

    A principios de 2010 Adidas lanza al mercado un juego de 5 zapa-tillas originales de Realidad Aumentada (ver Figura 1.10). Los propie-tarios de estos modelos podrn ensear la lengeta de la zapatilla auna cmara y aparecer un mundo 3D de la marca, con posibilidadde jugar a contenido exclusivo y obtener premios especiales (a modode objetos 3D).

    1.2. Caractersticas Generales

    Segn Azuma [1], un sistema de Realidad Aumentada debe cumplirlas siguientes caractersticas:

    1. Combina mundo real y virtual. El sistema incorpora informa-cin sinttica a las imgenes percibidas del mundo real.

    2. Interactivo en tiempo real. As, los efectos especiales de pel-culas que integran perfectamente imgenes 3D fotorrealistas conimagen real no se considera Realidad Aumentada porque no soncalculadas de forma interactiva.

    3. Alineacin 3D. La informacin del mundo virtual debe ser tri-dimensional y debe estar correctamente alineada con la imagendel mundo real. As, estrictamente hablando las aplicaciones quesuperponen capas grficas 2D sobre la imagen del mundo real noson consideradas de Realidad Aumentada.

  • [6] CAPTULO 1. INTRODUCCIN

    Siendo estrictos segn la definicin de Azuma, hay algunas aplica-ciones vistas en la seccin 1.1.1 que no seran consideradas de Reali-dad Aumentada, ya que el registro del mundo real no se realiza en 3D(como en el caso de Wikitude o Layar por ejemplo).

    Figura 1.14: W. Ross Ashby(1903-1972), el padre de laCiberntica moderna.

    Amplificacin Inteligencia

    El trmino Amplificacinde la Inteligencia comenza utilizarse desde la Intro-duccin a la Cibernticade William Ross Ashby,refirindose al uso de lastecnologas de la informacinpara aumentar la inteligen-cia humana. Tambin sedenomina habitualmenteAumentacin Cognitiva.

    La combinacin de estas tres caractersticas hacen que la RealidadAumentada sea muy interesante para el usuario ya que complemen-ta y mejora su visin e interaccin del mundo real con informacinque puede resultarle extremadamente til a la hora de realizar cier-tas tareas. De hecho la Realidad Aumentada es considerada como unaforma de Amplificacin de la Inteligencia que emplea el computadorpara facilitar el trabajo al usuario.

    1.3. Aplicaciones

    La importancia de la Realidad Aumentada queda patente con elenorme inters que ha generado en los ltimos meses. La prestigiosapublicacin britnicac The Economist asegur en Septiembre de 2009que intentar imaginar como se utilizar la Realidad Aumentada es co-mo intentar predecir el futuro de la tecnologa web en 1994. Segn laconsultora Juniper Research, la Realidad Aumentada en dispositivosmviles generar ms de 700 millones de dlares en el 2014, con msde 350 millones de terminales mviles con capacidad de ejecutar estetipo de aplicaciones.

    Un indicador que puede ser significativo es la tendencia de bs-queda en la web. Desde Junio de 2009 la bsqueda por AugmentedReality supera el nmero de bsquedas realizadas con la cadena Vir-tual Reality.

    Una de las principales causas de este crecimiento en el uso de laRealidad Aumentada es debido a que mediante esta tecnologa se am-plan los espacios de interaccin fuera del propio ordenador. Todo elmundo puede ser un interfaz empleando Realidad Aumentada sobredispositivos mviles.

    !"#

    !"$

    $"#

    $"$%&'()A$BAAAAAAAACDE&F01A$BAAAAA2310)A4$!$

    5&6713E18A91:'(E;

  • 1.3. Aplicaciones [7]

    ! " #

    $ %

    Figura 1.16: Ejemplo de aplicaciones de Realidad Aumentada. a) y b) Ejemplos de visualizacin mdica con Realidad Au-mentada del 3D Visualization and Imaging System Lab de Arizona. c) Ejemplo de mantenimiento de un dispositivo con ins-trucciones 3D superpuestas del Grupo de Investigacin Oreto de la Universidad de Castilla-La Mancha. d) Juego desarrolladopor Total Immersion (Six Flags). e) Anuncio de Mini.

    Fabricacin: Otro uso de la Realidad Aumentada es en el mbi-to de la fabricacin, mantenimiento y reparacin de maquinariacompleja. Los pasos a seguir en la reparacin son mucho ms in-tuitivos y fciles de seguir si aparecen directamente superpuestossobre la imagen real.

    Entretenimiento: La industria del ocio ya ha comenzado a sacarpartido del enorme potencial de interaccin que ofrece la RealidadAumentada (como Sony, Ubisoft o SixFlags).

    Publicidad: Cada vez ms empresas utilizan la Realidad Aumen-tada como reclamo publicitario. Desde 2008, empresas como Adi-das, Ford, BMW, Lego, FOX, Paramount, Doritos, Ray Ban y Mac-Donalds forman parte de una largsima lista de entidades quehan utilizado estas tcnicas, definiendo una curva creciente ex-ponencialmente.

  • [8] CAPTULO 1. INTRODUCCIN

    1.4. Alternativas tecnolgicas

    En el mbito de la Realidad Aumentada existen varios toolkits quefacilitan la construccin de aplicaciones. Sin embargo, para sacar elmximo partido a la tecnologa es necesario dominar ciertos conceptostericos y de representacin grfica. La mayora de sistemas estndestinados a programadores con experiencia en desarrollo grfico. Acontinuacin enumeraremos algunas de las bibliotecas ms famosas.

    ARToolKit: Es probablemente la biblioteca ms famosa de Reali-dad Aumentada. Con interfaz en C y licencia libre permite desa-rrollar fcilmente aplicaciones de Realidad Aumentada. Se basaen marcadores cuadrados de color negro.

    ARTag: Es otra biblioteca con interfaz en C. Est inspirado enARToolKit. El proyecto muri en el 2008, aunque es posible toda-va conseguir el cdigo fuente. El sistema de deteccin de marcases mucho ms robusto que el de ARToolKit.

    OSGART: Biblioteca en C++ que permite utilizar varias librerasde tracking (como ARToolKit, SSTT o Bazar).

    FLARToolKit: Implementacin para Web (basada en Flash y Ac-tionScript) del ARToolKit portado a Java NyARToolKit.

    Otros ports de ARToolKit: Existen multitud de versiones de AR-ToolKit portados en diferentes plataformas, como AndAR (paratelfonos Android), SLARToolkit, etc...

    En este documento nos basaremos en ARToolKit por ser actual-mente el principal referente en tracking basado en marcas, y por exis-tir multitud de versiones portadas a diferentes plataformas mviles.

  • Captulo2Mtodos de Registro

    El clculo del registro requiere posicionar la cmara (posicin yrotacin) relativamente a los objetos de la escena. Existen va-rias tecnologas para realizar el registro, como sensores mec-nicos, magnticos, ultrasnicos, inerciales y basados en visin. En es-te captulo estudiaremos diferentes mtodos de tracking con sus ven-tajas y problemas asociados. Los mtodos basados en visin, por serlos extendidos, baratos y fciles de desplegar sern a los que dedica-remos la mayor parte del captulo.

    Los mtodos de tracking tratan de obtener una estimacin de latrayectoria en el espacio realizada por un objeto o sensor. Se pue-den emplear diferentes tipos de sensores como basados en camposmagnticos, ondas sonoras o cmaras de visin. Las cmaras estnactualmente integradas en multitud de dispositivos porttiles y per-miten realizar tracking a un coste reduccido.

    El tracking basado en cmaras de vdeo es un subcampo del trac-king 3D en el que se emplean tcnicas de visin por computador paraobtener el posicionamiento de seis grados de libertad de la cmara(tres grados de la posicin y tres de la orientacin).

    Para calcular la posicin de la cmara con respecto al mundo realse necesitan un conjunto de referencias tridimensionales. Algunosejemplos de estas referencias pueden ser marcas con una descrip-cin geomtrica previamente conocida u objetos previamente mode-lados. Realizando una comparacin con lo que percibe la cmara enel mundo real es posible obtener el posicionamiento relativo a estasreferencias.

    9

  • [12] CAPTULO 2. MTODOS DE REGISTRO

    !! "! #!

    !" #" $"

    !"%A#((BCD%!#%ED-%F#/BCD%!#A%0A-D1%213F#%#A%4E#%2#%F#-AB5-F6%#A%7F-(8BD/9#$"%:#7#((BCD%-E71;67B(-%!#%(-F-(7#F

  • 2.2. Mtodos de Tracking [13]

    2.2.2. Aproximaciones Top-Down

    Como se ha comentado anteriormente, las aproximaciones Top-Down se basan en el uso del contexto y estiman la geometra de laescena de este contexto. Se utilizan modelos del movimiento basadosen filtros bayesianos para predecir la posicin de la cmara. A partirde esa posicin de la cmara se buscan referencias en la escena quecorrijan la prediccin y ayuden a la creacin de un modelo del entorno.En este ciclo de prediccin y correccin se necesitan gestionar por unlado el filtrado de datos (uso del modelo de movimiento y sus limitacio-nes asociadas), y por otro lado la asociacin de datos (localizacin delas referencias segn la posicin predicha). Todas las aproximacionesTop-Down tienen que trabajar con filtros y modelos de asociacin dedatos.

    Los filtros Bayesianos pueden dividirse en dos grandes familias;aquellas que trabajan con modelos de movimiento gausianos, que ex-plotan los beneficios de los Filtros de Kalman y sus variantes (comopor ejemplo [17] y [2]) y aquellos que, por las caractersticas del ruidono pueden ser modelados mediante modelos gausianos y se ajustanmejor al uso de Filtros de Partculas (como por ejemplo [21] y [20]).

    Figura 2.5: El uso de unfiltro de partculas permitecombinar diferentes mtodosde tracking y continuar re-gistrando correctamente losobjetos incluso con oclusinmanual de la marca (arriba)y cuando el patrn se escapadel campo de visin (abajo).Imgenes extradas de [14]

    Los algoritmos de asociacin de datos tienen que trabajar con di-ferentes medidas candidatas para emparejar cada caracctersticas de-tectadas. La aproximacin de Cox [5] utiliza una aproximacin mejo-rada del filtro MHT para el seguimiento de puntos de inters. Veenman[27] se basan en la idea de asignar las caractersticas empleando m-todos clsicos.

    Existen multitud de alternativas de tracking ptico (basado en vi-sin por computador). Dependiendo de las caractersticas del disposi-tivo (capacidad de cmputo, resolucin de la(s) cmara(s) asociada(s),precisin de las lentes) y del contexto de aplicacin pueden emplearseuna o varias de las familias de tcnicas estudiadas empleando mtodosde fusin de percepciones para obtener un posicionamiento preciso ycoherente en el tiempo.

  • Captulo3Introduccin a ARToolKit

    En este captulo se introducir el ciclo de desarrollo de aplica-ciones empleando ARToolKit. Se estudiarn los pasos a seguirpara calcular el registro de la cmara, y los parmetros de lasprincipales llamadas a la biblioteca.

    Como se ha estudiado en el captulo 2, los mtodos de trackingpticos se utilizan ampliamente debido a su precisin y bajo coste deelementos hardware. A continuacin se describir una de las biblio-tecas de tracking ptico ms extendidas en el mbito de la realidadaumentada.

    3.1. Qu es ARToolKit

    ARToolKit es una biblioteca de funciones para el desarrollo rpi-do de aplicaciones de Realidad Aumentada. Fue escrita originalmenteen C por H. Kato, y mantenida por el HIT Lab de la Universidad deWashington, y el HIT Lab NZ de la Universidad de Canterbury (NuevaZelanda).

    Figura 3.1: Uso de ARTool-Kit en un dispositivo de vi-sin estereo.

    ARToolKit facilita el problema del registro de la cmara empleandomtodos de visin por computador, de forma que obtiene el posicio-namiento relativo de 6 grados de libertad haciendo el seguimiento demarcadadores cuadrados en tiempo real, incluso en dispositivos debaja capacidad de cmputo. Algunas de las caractersticas ms desta-cables son:

    15

  • [16] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    Tracking de una cmara. ARToolKit en su versin bsica so-porta de forma nativa el tracking de una cmara, aunque puedeutilizarse para tracking multicmara (si el programador se hacecargo de calcular el histrico de percepciones). La biblioteca so-porta gran variedad de modelos de cmaras y modelos de color.

    Marcas negras cuadradas. Emplea mtodos de tracking de su-perficies planas de 6 grados de libertad. Estas marcas pueden serpersonalizadas, siempre que el patrn no sea simtrico en algunode sus ejes.

    Rpido y Multiplataforma. Funciona en gran variedad de sis-temas operativos (Linux, Mac, Windows, IRIX, SGI...), y ha sidoportado a multitud de dispositivos porttiles y smartphones (An-dorid, iPhone, PDAs...).

    Comunidad Activa. A travs de los foros1 y listas de correo sepueden resolver problemas particulares de uso de la biblioteca.

    Licencia libre. Esto permite utilizar, modificar y distribuir pro-gramas realizados con ARToolKit bajo la licencia GPL v2.

    3.2. Instalacin y configuracin

    En esencia ARToolKit es una biblioteca de funciones para el desa-rrollo de aplicaciones de Realidad Aumentada, que utiliza a su vezotras bibliotecas. Por tanto, primero deberemos satisfacer esas depen-dencias. Para ello, en Debian instalaremos los paquetes necesariospara su compilacin:

    # apt-get install freeglut3-dev libgl1-mesa-dev libglu1-mesa-devlibxi-dev libxmu-dev libjpeg-dev

    A continuacin ejecutamos ./Configure para obtener un Makefileadaptado a nuestro sistema. Elegimos Video4Linux2 en el driver decaptura de video porque disponemos de una cmara integrada de estetipo (la versin de ARToolKit con la que vamos a trabajar est parchea-da para soportar este tipo de dispositivos), en la segunda pregunta noutilizaremos las instrucciones de ensamblador en ccvt (por disponerde una arquitectura ia64), habilitaremos los smbolos de depuracin,y activaremos el soporte hardware para GL_NV_texture_rectangle, yaque la tarjeta grfica del equipo los soporta:

    Figura 3.2: Aunque las bi-bliotecas con las que traba-jaremos en este documentoson libres, slo describire-mos el proceso de instalaciny configuracin bajo GNU/Li-nux. Imagen original de sfga-te.com.

    carlos@kurt:ARToolKit$ ./ConfigureSelect a video capture driver.1: Video4Linux2: Video4Linux+JPEG Decompression (EyeToy)3: Video4Linux24: Digital Video Camcoder through IEEE 1394 (DV Format)5: Digital Video Camera through IEEE 1394 (VGA NC Image Format)

    1Foros de ARToolKit: http://www.hitlabnz.org/wiki/Forum

  • 3.3. El esperado Hola Mundo! [17]

    6: GStreamer Media FrameworkEnter : 3

    Color conversion should use x86 assembly (not working for 64bit)?Enter : nDo you want to create debug symbols? (y or n)Enter : yBuild gsub libraries with texture rectangle support? (y or n)GL_NV_texture_rectangle is supported on most NVidia graphics cardsand on ATi Radeon and better graphics cardsEnter : ycreate ./Makefilecreate lib/SRC/Makefile...create include/AR/config.h

    Done.

    Finalmente compilamos las libreras desde el mismo directorio, eje-cutando make:

    $ make

    Si todo ha ido bien, ya tenemos compiladas las bibliotecas de AR-ToolKit. Estas bibliotecas no requieren estar instaladas en ningn di-rectorio especial del sistema, ya que se compilan como bibliotecas es-tticas, de forma que estn incluidas en cada ejecutable que se cons-truye. Los ficheros makefile que utilizaremos en los ejemplos tendrndefinido un camino (relativo o absoluto) hasta la localizacin en discode estas bibliotecas. A continuacin veremos un ejemplo de funciona-miento bsico.

    3.3. El esperado Hola Mundo!

    Aunque todava quedan muchos aspectos que estudiar, comenza-remos con una aplicacin mnima que dibuja una tetera 3D localiza-da en el centro de una marca de ARToolKit. El listado siguiente, quemuestra el cdigo completo (menos de 120 lneas!) del Hola Mundo!.El listado de cdigo de la seccin 3.3.4 muestra el fichero makefilenecesario para compilar este ejemplo.

    Figura 3.3: La impresionan-te salida en pantalla del Ho-la Mundo de Realidad Au-mentada.

    Listado 3.1: Hola Mundo! con ARToolKit

    1 #include 2 #include 3 #include 4 #include 5 #include 67 // ==== Definicion de constantes y variables globales =====8 int patt_id; // Identificador unico de la marca9 double patt_trans[3][4]; // Matriz de transformacion de la marca1011 void print_error (char *error) { printf(error); exit(0); }12 // ======== cleanup =======================================13 static void cleanup(void) {

  • [18] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    14 arVideoCapStop(); // Libera recursos al salir ...15 arVideoClose();16 argCleanup();17 }18 /* La funcion draw se encarga de obtener la matriz de

    transformacion de OpenGL y dibujar la tetera 3D posicionada enel centro de la marca.*/

    19 // ======== draw ==========================================20 static void draw( void ) {21 double gl_para[16]; // Esta matriz 4x4 es la usada por OpenGL22 GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0};23 GLfloat light_position[] = {100.0,-200.0,200.0,0.0};2425 argDrawMode3D(); // Cambiamos el contexto a 3D26 argDraw3dCamera(0, 0); // Y la vista de la camara a 3D27 glClear(GL_DEPTH_BUFFER_BIT); // Limpiamos buffer de profundidad28 glEnable(GL_DEPTH_TEST);29 glDepthFunc(GL_LEQUAL);3031 argConvGlpara(patt_trans, gl_para); // Convertimos la matriz de32 glMatrixMode(GL_MODELVIEW); // la marca para ser usada33 glLoadMatrixd(gl_para); // por OpenGL34 // Esta ultima parte del codigo es para dibujar el objeto 3D35 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);36 glLightfv(GL_LIGHT0, GL_POSITION, light_position);37 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);38 glTranslatef(0.0, 0.0, 60.0);39 glRotatef(90.0, 1.0, 0.0, 0.0);40 glutSolidTeapot(80.0);41 glDiable(GL_DEPTH_TEST);42 }43 /* La funcion init inicializa la camara (cargando el fichero con

    sus parametros intrinsecos) y el patron que se reconocera en elejemplo. */

    44 // ======== init ===========================================45 static void init( void ) {46 ARParam wparam, cparam; // Parametros intrinsecos de la camara47 int xsize, ysize; // Tamano del video de camara (pixels)4849 // Abrimos dispositivo de video50 if(arVideoOpen("") < 0) exit(0);51 if(arVideoInqSize(&xsize, &ysize) < 0) exit(0);5253 // Cargamos los parametros intrinsecos de la camara54 if(arParamLoad("data/camera_para.dat", 1, &wparam) < 0)55 print_error ("Error en carga de parametros de camara\n");5657 arParamChangeSize(&wparam, xsize, ysize, &cparam);58 arInitCparam(&cparam); // Inicializamos la camara con param"5960 // Cargamos la marca que vamos a reconocer en este ejemplo61 if((patt_id=arLoadPatt("data/simple.patt")) < 0)62 print_error ("Error en carga de patron\n");6364 argInit(&cparam, 1.0, 0, 0, 0, 0); // Abrimos la ventana65 }66 /* La funcion mainLoop se llama automaticamente (se registra un

    callback en el main). Se encarga de obtener un frame, detectarla marca y llamar a la funcion de dibujado del objeto 3D. */

    67 // ======== mainLoop =======================================68 static void mainLoop(void) {69 ARUint8 *dataPtr;

  • 3.3. El esperado Hola Mundo! [19]

    70 ARMarkerInfo *marker_info;71 int marker_num, j, k;7273 double p_width = 120.0; // Ancho del patron (marca)74 double p_center[2] = {0.0, 0.0}; // Centro del patron (marca)7576 // Capturamos un frame de la camara de video77 if((dataPtr = (ARUint8 *)arVideoGetImage()) == NULL) {78 // Si devuelve NULL es porque no hay un nuevo frame listo79 arUtilSleep(2); return; // Dormimos el hilo 2ms y salimos80 }8182 argDrawMode2D();83 argDispImage(dataPtr, 0,0); // Dibujamos lo que ve la camara8485 // Detectamos la marca en el frame capturado (return -1 si error)86 if(arDetectMarker(dataPtr, 100, &marker_info, &marker_num) < 0) {87 cleanup(); exit(0); // Si devolvio -1, salimos del programa!88 }8990 arVideoCapNext(); // Frame pintado y analizado... A por

    otro!9192 // Vemos donde detecta el patron con mayor fiabilidad93 for(j = 0, k = -1; j < marker_num; j++) {94 if(patt_id == marker_info[j].id) {95 if (k == -1) k = j;96 else if(marker_info[k].cf < marker_info[j].cf) k = j;97 }98 }99

    100 if(k != -1) { // Si ha detectado el patron en algun sitio...101 // Obtenemos transformacion entre la marca y la camara real102 arGetTransMat(&marker_info[k], p_center, p_width, patt_trans);103 draw(); // Dibujamos los objetos de la escena104 }105106 argSwapBuffers(); // Cambiamos el buffer con lo que tenga

    dibujado107 }108109 // ======== Main ===========================================110 int main(int argc, char **argv) {111 glutInit(&argc, argv); // Creamos la ventana OpenGL con Glut112 init(); // Llamada a nuestra funcion de inicio113 arVideoCapStart(); // Creamos un hilo para captura de

    video114 argMainLoop( NULL, NULL, mainLoop ); // Asociamos callbacks...115 return (0);116 }

    El ciclo de desarrollo puede resumirse en tres grandes etapas: 1.Inicializacin: Consiste en leer los parmetros asociados a la cmaray la descripcin de las marcas que se van a utilizar. 2. Bucle Principal(Main Loop): Es la etapa principal y est formada por un conjunto desubetapas que veremos a continuacin. 3. Finalizacin: Libera losrecursos requeridos por la aplicacin. La etapa del Bucle Principal estformada por 4 subetapas funcionales que se realizan repetidamentehasta que el usuario decide finalizar la aplicacin:

  • [20] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    1. Captura. Se obtiene un frame de la cmara de vdeo. En el HolaMundo! se realiza llamando a la funcin arVideoGetImage en lalnea

    77 .2. Deteccin. Se identifican las marcas en el frame anterior. En el

    ejemplo se llama a la funcin arDetectMarker en la lnea 86 .

    Marcas Personalizadas

    ARToolKit permite crearfcilmente marcadores pro-pios. En este primer ejemploutilizaremos una marcapreviamente entrenada.Veremos en la seccin 3.4.3cmo se almacenan inter-namente los marcadoresy los pasos a seguir paradefinir nuestros propiosmarcadores.

    3. Transformacin. Se calcula la posicin relativa entre las marcasdetectadas y la cmara fsica. Se realiza llamando a la funcinarGetTransMat en la lnea

    102 .4. Dibujado. Se dibujan los objetos virtuales situando la cmara

    virtual en la posicin relativa anteriormente calculada. En el Ho-la Mundo se ha creado una funcin propia draw que es llamadadesde el mainLoop en la lnea

    103 .En los ejemplos de este documento nos basaremos en el uso delas bibliotecas GLUT (OpenGL Utility Toolkit) que nos facilitanel desarrollo de aplicaciones OpenGL proporcionando sencillasfunciones de callback para el manejo de eventos de teclado yratn, as como la fcil apertura de ventanas multiplatafor-ma. Estas bibliotecas estn pensadas para el aprendizaje deOpenGL, y para la construccin de pequeas aplicaciones. Pa-ra facilitar la escritura de cdigo se utilizarn algunas variablesglobales (por la imposibilidad de pasar parmetros adicionalesa las funciones de callback de GLUT), aunque podran utilizar-se mecanismos para evitarlas. Se recomienda el uso de otraslibreras multiplataforma para la construccin de proyectos demayor tamao, como SDL.

    En un primer estudio, se pueden identificar algunos de los bloquesfuncionales descritos anteriormente. Por ejemplo, en las lneas

    45-65se encuentra definido el bloque de inicializacin (funcin init), que esllamado desde main (lnea

    112 ). El bucle principal est definido en laslneas

    68-107 y la liberacin de recursos se realiza con la llamada afunciones propias de ARToolKit en las lneas

    13-17 .Uso de /dev/video*

    Si tuviramos dos cmarasen el sistema, y quisiramosabrir la segunda (con inter-faz V4L) llamaramos a lafuncin arVideoOpen con lacadena -dev=/dev/video1.Podemos ver una descripcincompleta de los parmetrossoportados por esta funcinen el directorio de documen-tacin doc/video/ de ARTool-Kit.

    3.3.1. Inicializacin

    El bloque de inicializacin (funcin init), comienza abriendo el dis-positivo de video con arVideoOpen. Esta funcin admite parmetros deconfiguracin en una cadena de caracteres. A continuacin, lnea

    51 ,se obtiene el tamao de la fuente de vdeo mediante arVideoInqSize.Esta funcin escribe en las direcciones de memoria reservadas parados enteros el ancho y alto del vdeo. En las siguientes lneas carga-mos los parmetros intrnsecos de la cmara obtenidos en la etapade calibracin. En este ejemplo utilizaremos un fichero genrico ca-mera_para.dat vlido para la mayora de webcams. Sin embargo, para

  • 3.3. El esperado Hola Mundo! [21]

    obtener resultados ms precisos, lo ideal es trabajar con un ficheroadaptado a nuestro modelo de cmara concreto. Veremos cmo creareste fichero especfico para cada cmara en la seccin 3.4.2.

    As, con la llamada a arParamLoad se rellena la estructura ARParamespecificada como tercer parmetro con las caractersticas de la cma-ra. Estas caractersticas son independientes de la resolucin a la queest trabajando la cmara, por lo que tenemos que instanciar los pa-rmetros concretamente a la resolucin en pxeles. Para ello, se utilizala llamada a arParamChangeSize (lnea

    57 ) especificando la resolucinconcreta con la que trabajar la cmara en este ejemplo. Una vez ob-tenidos los parmetros de la cmara instanciados al caso concreto deeste ejemplo, se cargan en las estructuras de datos internas de AR-ToolKit, mediante la llamada a arInitCparam.

    Figura 3.4: Aunque es posi-ble definir marcas personali-zadas, las que ofrecen mejo-res resultados son las basa-das en patrones sencillos, co-mo la empleada en este ejem-plo.

    En la ltima parte cargamos el patrn asociado a la marca (lnea 61 ). Estudiaremos en la seccin 3.4.3 la estructura de esos ficheros.Finalmente abrimos la ventana de OpenGL (mediante la librera auxi-liar Gsub de ARToolKit) argInit en la lnea

    64 , pasndole como primerparmetro la configuracin de la cmara. El segundo parmetro indicael factor de zoom (en este caso, sin zoom).

    3.3.2. Bucle Principal

    El primer paso a realizar en el bucle principal es recuperar un framede la cmara de vdeo. Mediante la funcin arVideoGetImage obtene-mos una imagen (la llamada devuelve un puntero a un buffer donde seencuentra la imagen capturada). La llamada devuelve NULL si no hayuna nueva imagen (en el caso de que llamemos de nuevo muy pronto;con mayor frecuencia que la soportada por la cmara). Si esto ocurre,simplemente dormimos el hilo 2ms (lnea

    79 )y volvemos a ejecutar elmainLoop.

    A continuacin dibujamos en la ventana (en modo 2D, lnea 82 ) el

    buffer que acabamos de recuperar de la cmara (lnea 83 ).

    La llamada a arDetectMarker localiza las marcas en el buffer deentrada. En la lnea

    86 el segundo parmetro de valor 100 se co-rresponde con el valor umbral de binarizacin (a blanco y negro, verFigura 3.5) de la imagen. El propsito de este valor umbral (threshold)se explicar en detalle en la seccin 3.4.1. Esta funcin nos devuelveen el tercer parmetro un puntero a una lista de estructuras de tipoARMarkerInfo, que contienen informacin sobre las marcas detecta-das (junto con un grado de fiabilidad de la deteccin), y como cuartoparmetro el nmero de marcas detectadas.

    Figura 3.5: Ejemplo de pro-ceso de binarizacin de laimagen de entrada para ladeteccin de marcas.

    De esta forma, ARToolKit nos devuelve posibles posiciones paracada una de las marcas detectas. Incluso cuando estamos trabajandocon una nica marca, es comn que sea detectada en diferentes po-siciones (por ejemplo, si hay algo parecido a un cuadrado negro en laescena). Cmo elegimos la correcta en el caso de que tengamos variasdetecciones? ARToolKit asocia a cada percepcin una probabilidad de

  • [22] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    que lo percibido sea una marca, en el campo cf (confidence value). Enla tabla 3.1 se muestra la descripcin completa de los campos de estaestructura. Como se puede comprobar, todos los campos de la estruc-tura ARMarkerInfo se refieren a coordenadas 2D, por lo que an no seha calculado la posicin relativa de la marca con la cmara.

    Tabla 3.1: Campos de la estructura ARMarkerInfo

    Tipo Campo Descripcinint area Tamao en pxeles de la regin detectada.

    int id Identificador (nico) de la marca.

    int dir Direccin. Codifica mediante un valor num-rico (0..3) la rotacin de la marca detectada.Cada marca puede tener 4 rotaciones distin-tas.

    double cf Valor de confianza. Probabilidad de ser unamarca (entre 0 y 1).

    double pos[2] Centro de la marca (en espacio 2D).

    double line[4][3] Ecuaciones de las 4 aristas de la marca.Las aristas se definen con 3 valores (a,b,c),empleando la ecuacin implcita de la rectaax+ by + c = 0.

    double vertex[4][2] Posicin de los 4 vrtices de la marca (en es-pacio 2D).

    As, en las lneas 93-98 guardamos en la variable k el ndice de la

    lista de marcas detectadas aquella percepcin que tenga mayor pro-babilidad de ser la marca (cuyo valor de fiabilidad sea mayor).

    Mediante la llamada a arGetTransMat (lnea 102 ) obtenemos en una

    matriz la transformacin relativa entre la marca y la cmara (matriz3x4 de doubles); es decir, obtiene la posicin y rotacin de la cmaracon respecto de la marca detectada. Para ello es necesario especificarel centro de la marca, y el ancho. Esta matriz ser finalmente conver-tida al formato de matriz homogenea de 16 componentes utilizada porOpenGL mediante la llamada a argConvGlpara en la lnea

    31 . Veremosen el captulo 5 una introduccin a los aspectos bsicos de OpenGLpara su uso en aplicaciones de Realidad Aumentada.

    3.3.3. Finalizacin y funcin Main

    En la funcin cleanup se liberan los recursos al salir de la aplica-cin. Se hace uso de funciones de ARToolKit para detener la cmarade vdeo, y limpiar las estructuras de datos internas de ARToolKit.

    En la funcin main se registran los callbacks en la lnea 114 me-

    diante la funcin argMainLoop. En este ejemplo, se pasa como primery segundo parmetro NULL (correspondientes a los manejadores de ra-tn y teclado respectivamente). Veremos en posteriores ejemplos cmo

  • 3.4. Las Entraas de ARToolKit [23]

    utilizarlo. Por su parte, se asocia la funcin que se estar llamandoconstantemente en el bucle principal. En el caso de este ejemplo sellama mainLoop.

    3.3.4. Compilacin con Make

    Sobre el enlazado...

    La fase de enlazado en AR-ToolKit se realiza de formaesttica, por lo que no es ne-cesario distribuir ninguna li-brera adicional con el pro-grama compilado para su eje-cucin.

    En lo referente al makefile del ejemplo (ver listado siguiente), sedeber cambiar el valor de la variable ARTOOLKITDIR para que apunte aldirectorio donde se encuentra ARToolKit. Esta ruta puede ser absoluta(como en el ejemplo) o relativa al path donde se encuentre el programa.

    Listado 3.2: El makefile basico del Hola Mundo!

    1 # Ruta absoluta o relativa (sin espacios al final del path!)2 ARTOOLKITDIR = ../../ARToolKit3 INC_DIR = $(ARTOOLKITDIR)/include4 LIB_DIR = $(ARTOOLKITDIR)/lib56 LIBS = -lARgsub -lARvideo -lAR -lglut78 NAMEEXEC = helloWorld910 all: $(NAMEEXEC)1112 $(NAMEEXEC): $(NAMEEXEC).c13 cc -I $(INC_DIR) -o $(NAMEEXEC) $(NAMEEXEC).c -L$(LIB_DIR) $(

    LIBS)14 clean:15 rm -f *.o $(NAMEEXEC) *~ *.*~

    3.4. Las Entraas de ARToolKit

    En este apartado veremos algunos detalles sobre cmo funcionainternamente ARToolKit. Completaremos a lo largo del documento al-gunos detalles ms avanzados que no tiene sentido estudiar en estemomento.!"#$%&'()A%B'$"CD

    EAF"0'0"12(3%'F"4'4(E5&%2$'4'

    6B"C%B(7'B8%$'(96 6B"C%B(:;&'B'

    7

  • [24] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    !"

    #$

    %&

    '(

    )'&

    )A(

    BC(

    #

    DE

    #FC

    F01

    )23

    )A(

    B C(

    #

    DE

    #4)

    5)6

    E7(

    CF0

    1) 8

    3

    9'&

    17F

    :FC

    (C

    F01

    )D(

    7B0

    1

    6&

    ;F#

    7BE

    )(

    B()8

    3

    3F?

    % (

    'E

    )!?

    &7E

    #)8

    3

    "%&17&)'&)#$'&E)'&)&17B('(4%()F>(;&1)#&B=)?F1(BF&('()()?'(1CE)()1&;BE))(B()?%#C(B)>(BC(#)C%('B('(#4

    ! " # $ % &*1)'()F>(;&1)?F1(BF()#&)'&7&C7(1)CE17EB1E#)()#&)&+7B(&1)'(#)(BF#7(#)()'(#)$%F1(#)'&')C%('B('E4)

    %E#)E? &7E#)#FB7%(')83)#&)'F?% (1)#%)&B)%E#)()'()F>(;&1)B&('4)*1)&)C(#E)CEF1CF'F&1'E)CE1)&')C&17BE)'&)'()>(BC(4

    Figura 3.7: Esquema funcional de ARToolKit.

    Gsub y Gsub_Lite: Estos mdulos contienen las funciones rela-cionadas con la etapa de representacin. Ambas utilizan GLUT,aunque la versin _Lite es ms eficiente y no tiene dependen-cias con ningn sistema de ventanas concreto. En estos mdu-los se describen los ficheros de cabecera gsub.h, gsub_lite.h ygsubUtil.h.

    Estos mdulos estn totalmente desacoplados, de forma que es po-sible utilizar ARToolKit sin necesidad de emplear los mtodos de cap-tura de vdeo del primer mdulo, o sin emplear los mdulos de repre-sentacin Gsub o Gsub_Lite.

    3.4.1. Principios Bsicos

    ARToolKit est basado en un algoritmo de deteccin de bordes y unmtodo rpido de estimacin de la orientacin. La figura 3.7 resumeel principio bsico de funcionamiento de ARToolKit. Inicialmente lasfunciones de ARToolKit nos aislan de la complejidad de tratar con di-ferentes dispositivos de vdeo, por lo que la captura del frame actuales una simple llamada a funcin. Con esta imagen se inicia el primerpaso de bsqueda de marcas. La imagen se convierte a blanco y negropara facilitar la deteccin de formas cuadradas (en realidad este pasose realiza en dos etapas (ver Figura 3.8); primero se convierte a escalade grises (b), y despus se binariza (c) eligiendo un parmetro de um-bral threshold que elige a partir de qu valor de gris (de entre 256valores distintos) se considera blanco o negro (ver Figura 3.9).

    -

    "

    #

    $

    %

    !

    Figura 3.8: Pasos seguidospor ARToolKit para la detec-cin e identificacin de mar-cas.

    A continuacin el algoritmo de visin por computador extrae com-ponentes conectados de la imagen previamente binarizada, Figura 3.8(d), cuya area es suficientemente grande como para detectar una mar-ca. A estas regiones se les aplica un rpido algoritmo de deteccinde contornos (e), obteniendo a continuacin los vrtices y aristas quedefinen la regin de la marca en 2D (f).

  • 3.4. Las Entraas de ARToolKit [25]

    "#$%&! "!"#!"#!$A&BC!#####)DE$!$F

    -.#/0D!$01BC#2#344 A.#/0D!$01BC#2#54 C.#/0D!$01BC#2#354

    Figura 3.9: Ejemplo de binarizacin con diferentes valores de Threshold.

    Con la regin definida, se procede a una fase de normalizacin enla que se extrae el contenido de la marca (la zona central que la dife-rencia de otras marcas) y se compara con los patrones de las marcasconocidas (etapa 4 de la Figura 3.7).

    Conociendo las posiciones 2D de las aristas y vrtices que definenel marcador 2D, y el modelo de proyeccin de la cmara es posible es-timar la posicin y rotacin 3D de la cmara relativamente a la marca.

    No entraremos en detalles ahora sobre qu implica la obtencin dela posicin y rotacin de la cmara (estos aspectos sern discutidosen los captulos 4 y 5). El uso de marcas cuadradas de un tamaopreviamente conocido nos permite definir un sistema de coordenadaslocal a cada marca, de modo que empleando mtodos de visin porcomputador obtengamos la matriz de transformacin 4x4 del sistemade coordenadas de la marca al sistema de coordenadas de la cmaraTcm (Ecuacin 3.1).

    2664XcYcZc1

    3775 =2664R11 R12 R13 TxR21 R22 R23 TyR31 R32 R33 Tz0 0 0 1

    37752664XmYmZm1

    3775 = Tcm 2664XmYmZm1

    3775 (3.1)De este modo, conociendo la proyeccin de cada esquina de la mar-

    ca (e) sobre las coordenadas de pantalla (xc, yc), y las restricciones aso-ciadas al tamao de las marcas y su geometra cuadrada, es posiblecalcular la matriz Tcm. La Figura 3.10 resume esta transformacin.

    El clculo aproximado de la matriz de transformacin que re-presenta la rotacin R y la traslacin T desde las coordenadasde la marca a las coordenadas de la cmara se denominan eningls pose estimation y position estimation.

    Finalmente es posible dibujar cualquier objeto 3D correctamentealineado con la escena. Si conocemos la posicin absoluta de las mar-cas respecto de algn sistema de coordenadas global, es posible re-presentar los objetos posicionados globalmente. Veremos ms detalles

  • [26] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    !"

    #"

    $"

    !"

    #"

    %&&'()AB(BCD()DEBDFB'0B

    !"#$%#&"'(%'

    )AB""CD&EF

    )ED)1)D$D2!"#$3D()C()D)ED4B4)E5

    !0

    #0

    $0

    670)890):

    %&&'()AB(BCD()DEBD%;"B'B

    %&&'()AB(BCD)AD

  • 3.4. Las Entraas de ARToolKit [27]

    Figura 3.12: Marcado decrculos del patrn.

    Hecho esto nos aparecer una ventana con la imagen que percibe lacmara. Moveremos el patrn para que todos los puntos aparezcan enla imagen y presionaremos el botn izquierdo del ratn una vez sobrela ventana para congelar la imagen. Ahora tenemos que definir un rec-tngulo que rodee cada crculo del patrn (ver Figura 3.12 empleandoel siguiente orden: primero el crculo ms cercano a la esquina supe-rior izquierda, y a continuacin los de su misma fila. Luego los de lasegunda fila comenzando por el de la izquierda y as sucesivamente.Es decir, los crculos del patrn deben ser recorridos en orden indicadoen la Figura 3.13.

    El programa marcar una pequea cruz en el centro de cada crculoque hayamos marcado (ver Figura 3.12), y aparecer una lnea indi-cando que ha sido sealada como se muestra a continuacin. Si noaparece una cruz en rojo es porque el crculo no se ha detectado ytendr que ser de nuevo sealado.

    !!""""""#""""""$""""""%"""""""&""""""'

    ""("""""")""""""A"""""!B"""""!!""""!#

    !$""""!%""""!&""""!'"""""!(""""!)

    !A""""#B""""#!""""##"""""#$""""#%

    Figura 3.13: Orden de mar-cado de los crculos del pa-trn de calibracin.

    Grabbed image 1.-----------Press mouse button and drag mouse to rubber-bound features (6 x 4),or press right mouse button or [esc] to cancel rubber-bounding & retry

    grabbing.Marked feature position 1 of 24Marked feature position 2 of 24Marked feature position 3 of 24...Marked feature position 24 of 24-----------Press mouse button to save feature positions,or press right mouse button or [esc] to discard feature positions &

    retry grabbing.

    Una vez que se hayan marcado los 24 puntos, se pulsa de nuevoel botn izquierdo del ratn sobre la imagen. Esto almacenar la posi-cin de las marcas para la primera imagen, y descongelar la cmara,obteniendo una salida en el terminal como la siguiente.

    ### Image no.1 ###1, 1: 239.50, 166.002, 1: 289.00, 167.00...6, 4: 514.00, 253.50-----------Press mouse button to grab next image,or press right mouse button or [esc] to calculate distortion param.

    Precisin en calibracin

    Como es obvio, a mayornmero de imgenes cap-turadas y marcadas, mayorprecisin en el proceso decalibracin. Normalmentecon 5 6 imgenes distintassuele ser suficiente.

    Como se indica en el manual de ARToolKit, es necesario capturarentre 5 y 10 imgenes siguiendo el mismo proceso, variando el nguloy la posicin en la que se presenta el patrn de calibracin. En la Fi-gura 3.14 se muestran 6 ejemplos de diferentes imgenes capturadaspara la calibracin de una cmara.

    Cuando te haya realizado un nmero de capturas adecuado pul-saremos el botn derecho del ratn (o la tecla ESC) para calcular elparmetro de distorsin. En el terminal aparecer una salida como la

  • [28] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    Figura 3.14: Ejemplo de posicionamiento de patrones de calibracin.

    siguiente, indicando al final el centro (X,Y) de la cmara, y el factorde distorsin. El clculo de estos parmetros puede requerir variossegundos.

    Press mouse button to grab next image,or press right mouse button or [esc] to calculate distortion param.[320.0, 240.0, -13.5] 0.459403[370.0, 190.0, -15.3] 0.457091...[375.0, 211.0, -16.4] 0.456635--------------Center X: 375.000000

    Y: 211.000000Dist Factor: -16.400000Size Adjust: 0.978400--------------

    A continuacin la aplicacin nos muestra el resultado del clcu-lo de estos parmetros, para que el usuario realice una comprobacinvisual. Cada vez que pulsemos con el botn izquierdo del ratn se mos-trar una imagen con lneas de color rojo que deben pasar por el centrode cada crculo de calibracin (como las dos imgenes mostradas enla Figura 3.15).

    Checking fit on image 1 of 6.Press mouse button to check fit of next image.

    Finalmente, tras aceptar los resultados mostrados por la aplica-cin, se calcularn todos los parmetros que se guardarn en el fiche-ro que le indiquemos al final del proceso.

    -- loop:-50 --F = (816.72,746.92), Center = (325.0,161.0): err = 0.843755-- loop:-49 --F = (816.47,747.72), Center = (325.0,162.0): err = 0.830948...

  • 3.4. Las Entraas de ARToolKit [29]

    Calibration succeeded. Enter filename to save camera parameter.--------------------------------------SIZE = 640, 480Distortion factor = 375.000000 211.000000 -16.400000 0.978400770.43632 0.00000 329.00000 0.000000.00000 738.93605 207.00000 0.000000.00000 0.00000 1.00000 0.00000--------------------------------------Filename: logitech_usb.dat

    Figura 3.15: Dos imgenesresultado del clculo del cen-tro y el factor de distorsin.

    Este nuevo fichero creado ser el que le indicaremos a ARToolKitque utilice en la llamada a la funcin arParamLoad. En los captulos 4 y5 estudiaremos la importancia de la etapa de calibracin de la cmara(sobre todo en aquellas que tengan un valor elevado de distorsin).

    3.4.3. Deteccin de Marcas

    En la seccin 3.4.1 hemos visto que ARToolKit extrae los vrticesque definen las cuatro esquinas de una marca. En la etapa de de-teccin de la marca, es necesario adems identificar qu patrn estsiendo detectado. Para ello ARToolKit primero normaliza la imagendetectada (eliminando la distorsin debida a la perspectiva) para pos-teriormente comparar el patrn con las plantillas de los patrones quepuede reconocer la aplicacin (aquellas que hayan sido cargadas conla funcin arLoadPatt, ver lnea

    61 del listado de la seccin 3.3).El proceso de normalizacin de los patrones requiere mucho tiem-

    po, por lo que es un problema cuando se utilizan muchos marcadores.Tras la normalizacin, se reduce la resolucin del patrn normalizadoantes de pasar a la fase de comparacin. Cuanto mayor es la resolu-cin del patrn reescalado, mayor es la precisin de ARToolKit, perorequire ms capacidad de cmputo para realizar las operaciones.

    En el fichero config.h de ARToolKit pueden defirse algunos par-metros relacionados con la deteccin de marcas. A continuacin seindican los valores que trae por defecto la distribucin de ARToolKit:

    #define AR_SQUARE_MAX 50: Este parmetro define el nmero m-ximo de marcadores que sern detectados en cada imagen.

    #define AR_PATT_NUM_MAX 50: Nmero mximo de patrones quepueden ser cargados por el usuario.

    #define AR_PATT_SIZE_X 16: Resolucin (nmero de pxeles) enhorizontal del patrn cuando es resampleado.

    #define AR_PATT_SIZE_Y 16: Resolucin (nmero de pxeles) enhorizontal del patrn cuando es resampleado.

    #define AR_PATT_SAMPLE_NUM 64: Nmero mximo de pasos em-pleados para resamplear el patrn.

    De esta forma, el patrn reconocido incialmente es normalizado yresampleado para obtener una imagen como se muestra en la Figura

  • [30] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    !"#67!"

    #$%&A#(BCDAA

    ! E"!FD.#/D(#0& " 1%2DFC.#&3 #

    4"FCD!D(#0&("&5$DA"2$%56#(7%!"2$%5CDA!"&%2

    8$%&A#6#(D(#0&5$%5.D5FD!(D$

    Figura 3.16: Pasos para la identificacin de patrones.

    3.16. Por defecto, esta representacin se realizar en 64 pasos, gene-rando una imagen de 16x16 pxeles. Esta matriz de 16x16 pxeles secompar con los datos contenidos en los ficheros de patrones. Estosficheros simplemente contienen 4 matrices con el valor de gris de cadapxel del patrn. Cada matriz se corresponde con el patrn rotado 90o(ver Figura 3.16). Podemos abrir cualquier fichero .patt (como el queutilizamos en el Hola Mundo!) y veremos los valores en ASCII corres-pondientes a las 4 matrices.

    Limitaciones

    Si utilizamos nicamente mtodos de registro basados en marcascomo en el caso de ARToolKit, la principal limitacin viene cuandoninguna marca es visible en un momento dado, ya que no es posibleobtener la posicin de la cmara virtual. Adems, si se oculta algunaparte de la marca, el mtodo de deteccin, tal y como hemos visto, noser capaz de identificar las 4 esquinas de la regin y el mtodo deidentificacin fallar.

    Entre los factores que afectan a la deteccin de los patrones pode-mos destacar su tamao, complejidad, orientacin relativa a la cmaray condiciones de iluminacin de la escena (ver Figura 3.17).

    9!!!!"#$!!!!%&!!!%'#$!!!%$!!!%"#$

    %$&

    %'$

    %&&

    "$

    $&

    '$

    &()ABC!D

    EF01

    23C!405

    67)5)8C!9):0)!4056

    &!!!!%&!!!'&!!!;&!!!2?1)A02)!4056

    ;

    '

    %

    &

    %

    D::C:!40

    56

    (C1)

    02!

    A &

    ;&

  • 3.4. Las Entraas de ARToolKit [31]

    brillo especular, y que disminuyan el reflejo en las marcas mejorannotablemente la deteccin de las marcas.

    Creacin de Marcas

    ARToolKit dispone de una llamada a funcin arSavePatt que nospermite crear patrones personalizados. Utilizaremos esta funcin pa-ra construir un sencillo ejemplo que nos permitir entrenar nuestraspropias marcas. Modificaremos el Hola Mundo! de la seccin anterior(ver listado siguiente). Este programa recibir un argumento, que serel nombre del fichero donde queremos guardar el patrn entrenado.As, la utilidad se llamar desde el terminal como:

    carlos@kurt:02_patron$ ./makepatt identic.patt

    Cuando se detecta una marca, el programa dibuja sus lmites conlneas de color verde (ver Figura 3.18). Mientras la marca est siendodetectada, el usuario podr pulsar la tecla s para guardar el ficherodel patrn (hecho esto, automticamente liberar los recursos asigna-dos y saldr). Las teclas q o ESC servirn para cerrar la aplicacin singuardar el patrn.

    Figura 3.18: Ejemplo de sa-lida en pantalla de la aplica-cin para entrenar patrones.

    Listado 3.3: Generador de patrones

    1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 78 // ==== Definicion de constantes y variables globales ====9 ARMarkerInfo *gPatt; // Patron a guardar10 char gPattName[128]; // Nombre del fichero (patron)11 ARUint8 *gImage=NULL; // Ultima imagen capturada12 int imgSize=0; // Tamano en bytes de la imagen13 int xsize, ysize; // Tamano del video de camara

    (pixels)1415 void print_error (char *error) { printf(error); exit(0); }16 /* La funcion draw_line dibuja un segmento 2D desde el vertice (x1,

    y1) al (x2, y2).*/17 void draw_line (double x1, double y1, double x2, double y2) {18 glBegin(GL_LINES);19 glVertex2f(x1, ysize - y1);20 glVertex2f(x2, ysize - y2);21 glEnd();22 }23 // ======== cleanup ======================================24 static void cleanup(void) {25 arVideoCapStop(); // Libera recursos al salir ...26 arVideoClose();27 argCleanup();28 free(gImage);29 exit(0);30 }

  • [32] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    31 /* La funcion draw unicamente dibuja las lineas de color verde en 2D. Utiliza la funcion auxiliar propia draw_line.*/

    32 // ======== draw =========================================33 static void draw( void ) {34 glLineWidth(5);35 glColor3d(0, 1, 0);36 draw_line(gPatt->vertex[0][0], gPatt->vertex[0][1],37 gPatt->vertex[1][0], gPatt->vertex[1][1]);38 draw_line(gPatt->vertex[1][0], gPatt->vertex[1][1],39 gPatt->vertex[2][0], gPatt->vertex[2][1]);40 draw_line(gPatt->vertex[2][0], gPatt->vertex[2][1],41 gPatt->vertex[3][0], gPatt->vertex[3][1]);42 draw_line(gPatt->vertex[3][0], gPatt->vertex[3][1],43 gPatt->vertex[0][0], gPatt->vertex[0][1]);44 }45 /* La funcion keyboard es una funcion de retrollamada. Cuando el

    usuario pulse una tecla, sera invocada por GLUT, pasandole latecla en key y la posicion del raton (en x,y).*/

    46 // ======== keyboard =====================================47 static void keyboard(unsigned char key, int x, int y) {48 switch (key) {49 case 0x1B: case Q: case q:50 cleanup(); break;51 case s: caseS:52 if (gPatt != NULL) {53 if (arSavePatt(gImage, gPatt, gPattName)

  • 3.4. Las Entraas de ARToolKit [33]

    89 // Capturamos un frame de la camara de video90 if((dataPtr = (ARUint8 *)arVideoGetImage()) == NULL) {91 // Si devuelve NULL es porque no hay un nuevo frame listo92 arUtilSleep(2); return; // Dormimos el hilo 2ms y salimos93 }9495 argDrawMode2D();96 argDispImage(dataPtr, 0,0); // Dibujamos lo que ve la camara9798 // Detectamos la marca en el frame capturado (return -1 si error)99 if(arDetectMarker(dataPtr, 100, &marker_info, &marker_num) < 0) {

    100 cleanup(); exit(0); // Si devolvio -1, salimos del programa!101 }102103 // Nos quedamos con el patron detectado de mayor tamano104 for(i = 0, maxarea=0, gPatt=NULL; i < marker_num; i++) {105 if(marker_info[i].area > maxarea){106 maxarea = marker_info[i].area;107 gPatt = &(marker_info[i]);108 memcpy(gImage, dataPtr, imgSize);109 }110 }111112 if(gPatt != NULL) draw();113114 argSwapBuffers(); // Cambiamos el buffer con lo dibujado115 arVideoCapNext(); // Frame pintado y analizado... A por otro!116 }117118 // ======== Main =========================================119 int main(int argc, char **argv) {120 glutInit(&argc, argv); // Creamos la ventana OpenGL con Glut121122 if (argc == 2) // El primer argumento es el123 strcpy (gPattName, argv[1]); // nombre del patron124 else {printf ("Llamada %s \n", argv[0]); exit(0);}125126 init(); // Llamada a nuestra funcion de inicio127128 arVideoCapStart(); // Creamos hilo para captura de video129 argMainLoop( NULL, keyboard, mainLoop ); // Asociamos callbacks.130 return (0);131 }

    El listado anterior se estructura en los mismos bloques de fun-ciones que el Hola Mundo!. En la funcin main, lneas

    119-131 obte-nemos el nombre del archivo donde guardaremos el patrn (en casode no tener un parmetro cuando se llama al programa, se muestrauna pequea ayuda). Este nombre se guarda en una variable globalgPattName (lnea

    10 ). En la lnea 129 se asocia el callback de pulsa-cin de teclado, en la funcin keyboard (definida en las lneas

    47-60 ).La funcin init se encarga, al igual que en el ejemplo anterior, de

    inicializar el dispositivo de vdeo, cargar los parmetros de la cmara,y adems, de reservar memoria para una variable global (lnea

    78 ) lla-mada gImage. En esta posicin de memoria se volcar una copia delframe actual, en el caso de que detectemos una marca. Esta reservade memoria no se puede hacer a priori, porque hasta el momento de la

  • [34] CAPTULO 3. INTRODUCCIN A ARTOOLKIT

    ejecucin del programa, no sabemos el tamao de vdeo que cargare-mos de la cmara.

    Las principales modificaciones del mainLoop (lneas 84-116 ) se loca-

    lizan en las lneas 104-110 . En este caso, si se ha detectado marca, nos

    quedamos con aquella que tenga un rea de deteccin mayor. Esto secomprueba con una variable llamada maxarea. En el caso de que de-tectemos alguna marca, guardamos el puntero a la marca de mayorrea en gPatt (lnea

    107 ), y hacemos una copia del frame en gImage(lnea

    108 ).De esta forma, cuando el usuario pulse la tecla s y se llame a la

    funcin de callback de teclado (lneas 47-60 ), se podr guardar el pa-

    trn. La funcin arSavePatt (lnea 53) requiere como primer parmetroel puntero al frame (almacenado en gImage), como segundo parmetrola informacin ARMarkerInfo de la marca detectada, y finalmente elnombre del fichero donde se quiere guardar el patrn.

    Para finalizar, la funcin de dibujado draw (lneas 33-44 ) muestra

    en 2D los bordes del patrn detectado. Se apoya en una funcin au-xiliar draw_line que toma como parmetros los 2 vrtices de las lneaa dibujar. El convenio que toma OpenGL para especificar el origen dela pantalla es en la esquina inferior izquierda. Debido a que ARToolKittoma como origen la esquina superior izquierda, hay que realizar unaconversin para especificar la posicin final del vrtice (una simpleresta con el tamao en vertical de la pantalla, lneas

    19,20 ).3.5. Ejercicios Propuestos

    Figura 3.19: Marca que pue-de ser entrenada.

    Se recomienda la realizacin de los ejercicios de esta seccin enorden, ya que estn relacionados y su complejidad es ascendente.

    1. Utilice el programa de calibracin de cmara de ARToolKit paracrear un fichero adaptado a su dispositivo de captura. Modifiqueel programa estudiado en la seccin 3.3 para usar el fichero.

    2. Entrene con el programa de la seccin 3.4.3 una marca propia(por ejemplo, la marca de la Figura 3.19). Modifique el programade la seccin 3.3 para que utilice esa marca.

    3. Modifique el programa de la seccin 3.4.3 para que trabaje condos marcas; las definidas en la figuras 3.4 y 3.19. En caso de de-tectar ambas marcas, el programa se quedar como marca activaaquella que tenga mayor valor de confianza (campo cf de la es-tructura ARMarkerInfo). Cambiaremos el color2 de la tetera entreazul y verde, segn la marca activa sea una u otra.

    2Para cambiar el color del objeto en el ejemplo del listado de la seccin 3.3, es ne-cesario modificar las primeras componentes del vector mat_ambient (lnea 22), que secorresponden con los valores RGB (entre 0 y 1). El cuarto componente es el valor detransparencia Alpha.

  • Captulo4FundamentosMatemticos

    En este captulo estudiaremos algunos conceptos tericos bsi-cos para el trabajo con objetos 3D en el mbito de la RealidadAumentada. En concreto veremos cmo transformar posicin,rotacin y tamao de objetos empleando transformaciones geomtri-cas en su representacin matricial. Igualmente, y por su importanciaen el mbito de la realidad aumentada estudiaremos en detalle la pro-yeccin en perspectiva, por ser sta la que mejor se ajusta a dispositi-vos de vdeo reales.

    En este captulo comenzaremos a estudiar las transformaciones afi-nes ms bsicas que sern necesarias para el desarrollo de aplicacio-nes de Realidad Aumentada. Las transformaciones son herramientasimprescindibles para cualquier aplicacin que manipule geometra o,en general, objetos descritos en el espacio 3D. La mayora de APIs quetrabajan con grficos 3D implementan funciones auxiliares para tra-bajar con matrices.

    Para introducir los conceptos generales asociados a las transfor-maciones, comenzaremos con una discusin sobre las operaciones en2D para pasar a la notacin matricial 2D y, posteriormente, a la gene-ralizacin tridimensional empleando coordenadas homogeneas.

    35

  • [36] CAPTULO 4. FUNDAMENTOS MATEMTICOS

    4.1. Transformaciones Geomtricas

    En la representacin de grficos 3D es necesario contar con herra-mientas para la transformacin de los objetos bsicos que compon-drn la escena. A menudo, estas primitivas son conjuntos de tringu-los que definen mallas poligonales. Las operaciones que se aplican aestos tringulos para cambiar su posicin, orientacin y tamao se de-nominan transformaciones geomtricas. En general podemos decirque una transformacin toma como entrada elementos como vrticesy vectores y los convierte de alguna manera.

    !

    "

    #

    #$%

    %!

    "

    Figura 4.1: Arriba. Trasla-cin de un punto p a p0 em-pleando el vector t. Abajo. Esposible trasladar un objetopoligonal completo aplicandola traslacin a todos sus vr-tices.

    La transformacin bsica bidimensional ms sencilla es la trasla-cin. Se realiza la traslacin de un punto mediante la suma de unvector de desplazamiento a las coordenadas iniciales del punto, paraobtener una nueva posicin de coordenadas. Si aplicamos esta trasla-cin a todos los puntos del objeto, estaramos desplazando ese objetode una posicin a otra. De este modo, podemos definir la traslacincomo la suma de un vector libre de traslacin t a un punto original ppara obtener el punto trasladado p0 (ver Figura 4.1). Podemos expresarla operacin anterior como:

    p0x = px + tx p0y = py + ty (4.1)

    De igual modo podemos expresar una rotacin de un punto p =(x, y) a una nueva posicin rotando un ngulo respecto del origende coordenadas, especificando el eje de rotacin y un ngulo . Lascoordenadas iniciales del punto se pueden expresar como (ver Figura4.2):

    px = d cos py = d sen (4.2)

    Siendo d la distancia entre el punto y el origen del sistema de coor-denadas. As, usando identidades trigonomtricas se pueden expresarlas coordenadas transformadas como la suma de los ngulos del puntooriginal y el que queremos rotar como:

    p0x = d cos(+ ) = d cos cos d sen senp0y = d sen(+ ) = d cos sen d sen cos

    !

    "

    #

    !

    "#

    !

    $

    %

    Figura 4.2: Rotacin delpunto p un ngulo respectodel origen de coordenadas.

    0mm

    Que sustituyendo en la ecuacin 4.2, obtenemos:

    p0x = px cos py sen p0y = px sin py cos (4.3)

    De forma similar, un cambio de escala de un objeto bidimensionalpuede llevarse a cabo multiplicando las componentes x, y del objetopor el factor de escala Sx, Sy en cada eje. As, como se muestra en laFigura 4.3 un cambio de escala se puede expresar como:

    p0x = pxSx p0y = pySy (4.4)

  • 4.1. Transformaciones Geomtricas [37]

    Cuando queremos cambiar la localizacin de un objeto, habitual-mente necesitamos especificar una combinacin de traslaciones yrotaciones en el mismo (por ejemplo, cuando cogemos el telfono m-vil de encima de la mesa y nos lo guardamos en el bolsillo, sobre elobjeto se aplican varias traslaciones y rotaciones). Es interesante portanto disponer de alguna representacin que nos permita combinartransformaciones de una forma eficiente.

    &

    '

    ""$

    Figura 4.3: Conversin deun cuadrado a un rectngu-lo empleando los factores deescala Sx = 2, Sy = 1,5.

    4.1.1. Representacin Matricial

    En muchas aplicaciones grficas los objetos deben transformarsegeomtricamente de forma constante (por ejemplo, en el caso de unaanimacin, en la que en cada frame el objeto debe cambiar de posicin.En el mbito de la Realidad Aumentada, aunque un objeto asociadoa una marca permanezca inmvil, deberemos cambiar la posicin dela cmara virtual para que se ajuste a los movimientos del punto devista del observador.

    Coord. homogneas

    Gracias al uso de coorde-nadas homogneas es posi-ble representar las ecuacio-nes de transformacin geo-mtricas como multiplica-cin de matrices, que es elmtodo estndar en grficospor computador (soportadoen hardware por las tarjetasaceleradoras grficas).

    De este modo resulta crtica la eficiencia en la realizacin de es-tas transformaciones. Como hemos visto en la seccin anterior, lasecuaciones 4.1, 4.3 y 4.4 nos describan las operaciones de traslacin,rotacin y escalado. Para la primera es necesario realizar una suma,mientras que las dos ltimas requieren multiplicaciones.

    Sera conveniente poder combinar las transformaciones de for-ma que la posicin final de las coordenadas de cada punto se obtengade forma directa a partir de las coordenadas iniciales. Si reformula-mos la escritura de estas ecuaciones para que todas las operacionesse realicen multiplicando, podramos conseguir homogeneizar estastransformaciones.

    Si aadimos un trmino extra (parmetro homogneo h) a la repre-sentacin del punto en el espacio (x, y), obtendremos la representa-cin homognea de la posicin descrita como (xh, yh, h). Este parme-tro homogneo h es un valor distinto de cero tal que x = xh/h, y = yh/h.Existen, por tanto infinitas representaciones homogneas equivalen-tes de cada par de coordenadas, aunque se utiliza normalmente h = 1.Veremos en la seccin 4.2.2 que no siempre el parmetro h = 1.

    De este modo, la operacin de traslacin, que hemos visto anterior-mente, puede expresarse de forma matricial como:24x0y0

    1

    35 =241 0 Tx0 1 Ty0 0 1

    3524xy1

    35 (4.5)

  • [38] CAPTULO 4. FUNDAMENTOS MATEMTICOS

    Al resolver la multiplicacin matricial se obtienen un conjunto deecuaciones equivalentes a las enunciadas en 4.1. Las operaciones derotacin Tr y escalado Ts tienen su equivalente matricial homogneo.

    Tr =

    24cos sen 0sen cos 00 0 1

    35 Ts =24Sx 0 00 Sy 00 0 1

    35 (4.6)Las transformaciones inversas pueden realizarse sencillamente cam-biando el signo en el caso de la traslacin y rotacin (distancias yngulos negativos), y obteniendo el parmetro recproco en el caso dela escala 1/Sx, 1/Sy.

    &

    '!

    Figura 4.4: Sentido de lasrotaciones positivas respectode cada eje de coordenadas.

    Las transformaciones en el espacio 3D requieren simplementeaadir el parmetro homogneo y describir las matrices (en este caso4x4). As, las traslaciones Tt y escalados Ts en 3D pueden represen-tarse de forma homognea mediante las siguientes matrices:

    Tt =

    26641 0 0 Tx0 1 0 Ty0 0 1 Tz0 0 0 1

    3775 Ts =2664Sx 0 0 00 Sy 0 00 0 Sz 00 0 0 1

    3775 (4.7)Las rotaciones requieren distinguir el eje sobre el que se realizar

    la rotacin. Las rotaciones positivas alrededor de un eje se realizanen sentido opuesto a las agujas del reloj, cuando se est mirando a lolargo de la mitad positiva del eje hacia el origen del sistema de coorde-nadas (ver Figura 4.4). Las expresiones matriciales de las rotacionesson las siguientes:

    Rx =

    26641 0 0 00 cos sen 00 sen cos 00 0 0 1

    3775 Ry =2664cos 0 sen 00 1 0 0

    sen 0 cos 00 0 0 1

    3775 Rz =2664cos sen 0 0sen cos 0 00 0 1 00 0 0 1

    3775(4.8)

    Las tres transformaciones estudiadas (traslacin, rotacin y escala-do) son ejemplos de transformaciones afines, en las que cada una delas coordenadas transformadas se pueden expresar como una funcinlineal de la posicin origen, y una serie de constantes determinadaspor el tipo de transformacin.

    Una de las caractersticas interesantes de este tipo de transforma-ciones es que conservan la colineridad, por lo que las lneas paralelasseguirn siendo paralelas.

    4.1.2. Transformaciones Inversas

    En muchas situaciones resulta interesante calcular la inversa deuna matriz. Un ejemplo tpico es en la resolucin de ecuaciones, como

  • 4.1. Transformaciones Geomtricas [39]

    !

    "

    #$%&'( !

    "

    !

    "

    !

    )%A(' )%('

    Figura 4.5: Secuencia de operaciones necesarias para rotar una figura respecto de un origen arbitrario.

    en el caso de la expresin A = Bx. Si queremos obtener el valor de B,tendramos B = A/x. Por desgracia, las matrices no tienen asociado unoperador de divisin, por lo que debemos usar el concepto de matrizinversa.

    Para una matriz A, se define su inversa A1 como la matriz que,multiplicada por A da como resultado la matriz identidad I:

    A A1 = A1 A = I (4.9)

    Matrices Inversas

    No todas las matrices tieneninversa (incluso siendo cua-dradas). Un caso muy simplees una matriz cuadrada cu-yos elementos son cero.

    Tanto la matriz A como su inversa deben ser cuadradas y del mis-mo tamao. Otra propiedad interesante de la inversa es que la inversade la inversa de una matriz es igual a la matriz original (A1)1 = A.

    En la ecuacin inicial, podemos resolver el sistema utilizando lamatriz inversa. Si partimos de A = B x, podemos multiplicar ambostrminos a la izquierda por la inversa de B, teniendo B1 A = B1 B x,de forma que obtenemos la matriz identidad B1 A = I x, con elresultado final de B1 A = x.

    En algunos casos el clculo de la matriz inversa es directo, y puedeobtenerse de forma intuitiva. Por ejemplo, en el caso de una traslacinpura (ver ecuacin 4.7), basta con emplear como factor de traslacinel mismo valor en negativo. En el caso de escalado, como hemos vis-to bastar con utilizar 1/S como factor de escala. Cuando se trabajacon matrices compuestas el clculo de la inversa tiene que realizarsecon mtodos generales como por ejemplo el mtodo de eliminacin deGauss, o el uso de la traspuesta de la matriz adjunta.

    4.1.3. Composicin

    Como hemos visto en la seccin anterior, una de las principalesventajas derivadas del trabajo con sistemas homogneos es la com-posicin de matrices. Matemticamente esta composicin se realizamultiplicando las matrices en un orden determinado, de forma que esposible obtener la denominada matriz de transformacin neta MN

  • [40] CAPTULO 4. FUNDAMENTOS MATEMTICOS

    resultante de realizar sucesivas transformaciones a los puntos. De es-te modo, bastar con multiplicar la MN a cada punto del modelo paraobtener directamente su posicin final. Por ejemplo, si P es el puntooriginal y P 0 es el punto transformado, y T1 Tn son transformacio-nes (rotaciones, escalados, traslaciones) que se aplican al punto P ,podemos expresar la transformacin neta como:

    P 0 = Tn T2 T1 P

    Este orden de multiplicacin de matrices es el habitual empleado engrficos por computador, donde las transformaciones se premultipli-can (la primera est ms cerca del punto original P , ms a la derecha.

    !

    "

    !

    "

    !

    "

    !

    "

    !

    "

    !

    "

    #$%!"#$ A&'B$

    A&'B$ )*'!"#$

    Figura 4.6: La multiplicacin de matrices no es conmutativa, por lo que el orden deaplicacin de las transformaciones es relevante para el resultado final. Por ejemplo,la figura de arriba primero aplica una rotacin y luego el escalado, mientras que lasecuencia inferior aplica las dos transformaciones en orden inverso.

    La matriz de transformacin netaMN se definira en este caso comoMN = Tn T2 T1, de tal forma que slo habra que calcularla unavez para todos los puntos del modelo y aplicarla a todos vrtices ensu posicin original para obtener directamente su posicin final. Deeste modo, si un objeto poligonal est formado por V vrtices, habrque calcular la matriz de transformacin neta MN y aplicarla una veza cada vrtice del modelo.

    P 0 = MN P

    Conmutatividad. Recordemos que la multiplicacin de matri-ces es asociativa, pero no es conmutativa, por lo que el ordende aplicacin de las transformaciones es importante (ver Figura4.6).

  • 4.2. Visualizacin 3D [41]

    Otro aspecto a tener en cuenta es que la expresin de las trans-formaciones para trabajar con coordenadas homogeneas, que se hancomentado en las ecuaciones 4.7 y 4.8 se refieren al Sistema de Re-ferencia Universal (SRU ) o Sistema de Referencia Global.

    Esto implica que si se quiere realizar una transformacin respectode un punto distinto a ese origen del sistema de referencia universal,habr que hacer coincidir primero el punto con el origen del sistema dereferencia, aplicar la transformacin y devolver el objeto a su posicinoriginal. As, en el ejemplo de la Figura 4.5 si queremos rotar el objetorespecto del punto p es necesario, primero trasladar el objeto para quesu origen quede situado en el origen del SRU, luego aplicar la rotacin,y finalmente aplicar la traslacin inversa. De este modo, la Matriz Netaquedara definida como MN = Tp Rz Tp.

    4.2. Visualizacin 3D

    En esta seccin se describirn algunas caractersticas que debentenerse en cuenta a la hora de visualizar grficos 3D por computador.Como no puede ser de otro modo, ser nicamente un breve resu-men de las caractersticas ms importantes que deben conocerse paradesarrollar aplicaciones de Realidad Aumentada, sin abarcar toda lateora relacionada.

    Para obtener una imagen de una escena 3D definida en el Sistemade Referencia Universal, necesitamos definir un sistema de referen-cia de coordenadas para los parmetros de visualizacin (tambindenominados parmetros de cmara). Este sistema de referencia nosdefinir el plano de proyeccin, que sera el equivalente de la zonade la cmara sobre la que se registrar la imagen1. De este modo setransfieren los objetos al sistema de coordenadas de visualizacin y fi-nalmente se proyectan sobre el plano de visualizacin (ver Figura 4.8).

    "#!"#$%&'(#$(A!#$B!(CD!E&B$'F

    /"&%'0!"1&E23%(#$+!"#$%"!

    /"&%'0!"1&E23%(#$&'(A%$'B%C'DE

    /"&%'0!"1&E23%(#$F/!0#CC'DE

    /"&%'0!"1&E23%(#$1#C!/2#

    /"&%'0!"1&E23%(#$F%E2%$$%

    4!!"#$%&'(5%26$"'&B$'

    4!!"#$%&'(#$(72'8&B29&E23%

    4!!"#$%&'(:!"1&B29&'

    4!!"#$%&'(#$(;&%

  • [42] CAPTULO 4. FUNDAMENTOS MATEMTICOS

    !

    "#

    #

    "

    !#

    "

    !

    $%&'()ABC(BDEEFC(0ACA&B10%2(F&A3B4$516

    $%&'()ABC(BDEEFC(0ACA&B7E8A3B49:;('E6

    $%&'()ABC(BDEEFC(0ACA&BC(BA8%?0

    3A0EBC(B2%&=A3%>A8%?0

    Figura 4.8: Sistema de coordenadas de visualizacin y su relacin con otros sistemas de coordenadas de la escena.

    4.2.1. Pipeline de Visualizacin

    Perspectiva

    La Realidad Aumentada em-plea cmaras de visin paracapturar imgenes del mun-do real. Como estas cmarasse basan en modelos de pro-yeccin en perspectiva, estu-diaremos este modelo en de-talle en la seccin 4.2.2.

    El proceso de visualizar una escena en 3D mediante grficos porcomputador es similar al que se realiza cuando se toma una fotografareal. En primer lugar hay que situar el trpode con la cmara en unlugar del espacio, eligiendo as una posicin de visualizacin. A conti-nuacin, rotamos la cmara eligiendo si la fotografa la tomaremos envertical o en apaisado, y apuntando al motivo que queremos fotogra-fiar. Finalmente, cuando disparamos la fotografa slo una pequeaparte del mundo queda representado en la imagen 2D final (el resto deelementos son recortados y no aparecen en la imagen).

    Instancias

    Gracias a la separacin en-tre Coordenadas de Modeloy Transformacin de Mode-lado podemos tener diferen-tes instancias de un mismomodelo para construir unaescena a las que aplicamosdiferentes transformaciones.Por ejemplo, para construirun templo romano tendra-mos un nico objeto de co-lumna y varias instancias dela columna a las que hemosaplicado diferentes traslacio-nes.

    La Figura 4.7 muestra los pasos generales de procesamiento parala creacin y transformacin de una escena 3D a coordenadas depen-dientes del dispositivo de visualizacin (tpicamente una pantalla conuna determinada resolucin).

    En su tortuoso viaje hasta la pantalla, cada objeto 3D se transfor-ma en diferentes sistemas de coordenadas. Originalmente como vimosen la Figura 4.8, un objeto tiene su propio Sistema de CoordenadasLocal que nos definen las Coordenadas de Modelo, por lo que desdesu punto de vista no est transformado. A los vrtices de cada modelose le aplican la denominada Transformacin de Modelado para po-sicionarlo y orientarlo respecto del Sistema de Coordenadas Universal,obteniendo as las denominadas Coordenadas Universales o Coorde-nadas del Mundo. Como este sistema de coordenadas es nico, trasaplicar la transformacin de modelado a cada objeto, ahora todas lascoordenadas estarn expresadas en el mismo espacio.

  • 4.2. Visualizacin 3D [43]

    !

    "#

    !

    "

    #

    #

    !

    #

    !

    !"#$%&'()$A%BCDBE(3!"#!$!%&'(AB%C!%C!$"'(ADCEF/C!"#$%&'(F01%BCDBEC0A$&'C1!C"2'%&'C1!$1!C!3!C4C1!2C567/

    !"#$%&A"B#CDE$F-.F/D%0#1D2#CDE$

    !"#$%&A"B#CDE$F-.F/D%0#1D2#CDE$

    Figura 4.9: El usuario especifica la posicin de la cmara (izquierda) que se transforma, junto con los objetos de la escena,para posicionarlos a partir del origen del SRU y mirando en la direccin negativa del eje Z. El rea sombreada de la cmarase corresponde con el volumen de visualizacin de la misma (slo los objetos que estn contenidos en esa pirmide sernrepresentados).

  • [44] CAPTULO 4. FUNDAMENTOS MATEMTICOS

    La posicin y orientacin de la cmara nos determinar qu objetosaparecern en la imagen final. Esta cmara tendr igualmente unascoordenadas universales. El propsito de la Transformacin de Vi-sualizacin es posicionar la cmara en el origen del SRU, apuntandoen la direccin negativa del eje Z y el eje Y hacia arriba. Obtenemosde este modo las Coordenadas de Visualizacin o Coordenadas enEspacio Cmara (ver Figura 4.9).

    Habitualmente el pipeline contiene una etapa adicional intermediaque se denomina Shading que consiste en obtener la representacindel material del objeto modelando las transformaciones en las fuentesde luz, utilizando los vectores normales a los puntos de la superficie,informacin de color, etc. Es conveniente en muchas ocasiones trans-formar las posiciones de estos elementos (fuentes de luz, cmara, ...)a otro espacio para realizar los clculos.

    La Transformacin de Proyeccin convierte el volumen de visua-lizacin en un cubo unitario. Este volumen de visualizacin se definemediante planos de recorte 3D y define todos los elementos que se-rn visualizados. En la figura 4.9 se representa mediante el volumensombreado. Existen multitud de mtodos de proyeccin, aunque comohemos comentado anteriormente los ms empleados son la ortogrfica(o paralela) y la perspectiva. Ambas proyecciones pueden especificarsemediante matrices 4 4. Tras la proyeccin, el volumen de visualiza-cin se transforma en Coordenadas Normalizadas (obteniendo el cubounitario), donde los modelos son proyectados de 3D a 2D. La coorde-nada Z se guarda habitualmente en un buffer de profundidad llamadoZ-Buffer.

    nicamente los objetos que estn dentro del volumen de visuali