martes 14 de julio de 2009

¡Tenemos Agua de Bronchales!

Muchos lo saben, otros no, pero la historia de Digi3D (que no la de Digi o DigiNG) está íntimamente relacionada con dos modelos de cámara cónica de un pueblecito en la Sierra de Albarracín, en Teruel que se llama Bronchales.

Todas las pruebas del programa se han hecho siempre con esos dos modelos (107-108 y 108-109), los cursos también los hemos dado siempre con esos dos modelos (lástima que el vuelo sea en tonos de gris).

Se escaneó con un scanner de Leica en una empresa de Madrid, a 20 micras de resolución, y es un modelo que se ha cargado prácticamente en todas las empresas de fotogrametría de España y muchas del extranjero.

El fín de semana pasado, fué el cumpleaños de mi hermano. Lo celebramos en casa de mis padres y mi padre me tenía preparada una sorpresa: Varias botellas de Agua de Bronchales.

La verdad es que no tenía ni idea de que existiera esta marca de agua, pero me hizo "estar más cerca" de ese modelo con el que día sí, día también suelo trabajar.

Por cierto, que el modelo se puede descargar de nuestra página web: http://download.digi21.net/Bronchales.zip

domingo 12 de julio de 2009

Digi3D para ArcMAP


Estoy desarrollando un complemento de Digi3D para ArcMAP.

La idea es que los usuarios de ArcMAP dispongan de una ventana con toda la parte fotogramétrica de Digi3D dentro de su aplicación. Van a poder cargar imágenes satelitales, aéreas, ADS40, es decir, todos los sensores soportados por Digi3D.

El primer objetivo ha sido crear una ventana acoplable dentro de la aplicación principal (ArcMAP). Esta ventana muestra pares estereoscópicos con cualquier dispositivo de visualización estereoscópica soportado por Digi3D (anaglifo, estereo activo, mirros para monitores tipo planar, ...) y se comunica con los diferentes dispositivos de entrada estándar de Digi3D como IBox, manivalas, ratones, ...

Además he creado una barra de herramientas con botones que permiten la activación/desactivación de la ventana estereoscópica así como botones para hacer zooms y controlar la velocidad de los dispositivos de entrada.

Por ahora no tiene nada más, pero estoy muy contento con haber conseguido lo que he conseguido por ahora.

En la captura de pantalla podemos ver el famoso modelo de Bronchales en ArcMAP.

jueves 2 de julio de 2009

Rectificación epipolar y más


La última semana y media he estado haciendo un programa que llevaba pensando hacer hace mucho tiempo.

La idea era hacer un programa que rotase las imágenes 90 y 270 grados, ya que desde que existe la versión 2007, había desaparecido esta posibilidad.
Primero porque en 10 años no le ha hecho falta a nadie (bueno, en realidad sí le ha hecho falta a una empresa de Madrid que tenían un trabajo con las imágenes mal escaneadas).
Y segundo porque es muy difícil de implementar porque las imágenes están recortadas en tiles y las originales podrían estar recortadas en tiles también y eso dificultaba mucho la tarea. Como sabía que me iba a llevar mucho tiempo, pues al final siempre lo retrasaba. De hecho, me ha llevado casi dos semanas hacerlo.

Pero resulta que últimamente le hemos dado un empujoncillo a Digi con las imágenes satelitales y éstas, independientemente del satélite vienen rotadas 270 grados, así que no me ha quedado más remedio que hacerlo.

Pero al final, lo que en un principio iba a ser un programa de rotación de imágenes 90 y 270 grados, se ha convertido en algo muchísimo mejor, y gracias a Javier Múgica, pues mejor aún.


Os cuento: El programa se llama TransformaRaster y se ha convertido en la evolución del programa "Crear niveles piramidales" de la versión 2007.


Digo evolución porque hace lo mismo que el programa Raster y mucho más.

Archivos raster soportados:

El programa "Crear niveles piramidales" únicamente funcionaba con archivos .TIFF.

El programa TransformaRaster trabaja con archivos TIFF, ECW, MrSID, JPG, JPG 2000, NITF.

Profundidad de color.

Muchas imágenes están tomadas con sensores de 10 bits, pero se almacenan en archivos TIFF de 16 bits.
Al cargarlas en Digi3D, se veían negras, porque el valor más alto que se puede almacenar con 10 bits es un número muy pequeño para el rango de valores que se pueden almacenar en 16 bits. Valores pequeños significan ver las cosas en negro.

La versión 2007 soluciona este problema configurando la tarjeta gráfica para que en tiempo real expanda el histograma, y así se ven correctamente. El problema es que ese proceso carga mucho la tarjeta gráfica, y si ésta no es de las buenas (de mil euros en adelante) el movimiento no es todo lo suave que debería ser.

Bueno, pues programa TransformaRaster permite expandir el histograma para imágenes de 16 bits. Así, podemos indicarle que multiplique los valores por 128 y al cargar la imagen resultante en Digi3D ya no será necesario programar la tarjeta gráfica para que realize esa operación y el movimiento de imágenes será mas suave.

Transformación de imágenes a 8 bits

Muchas tarjetas gráficas degradan su rendimiento al mostrar imagenes de 16 bits.
El programa TransformaRaster permite transformar las imágenes a 8 bits para que esas tarjetas gráficas gráficas muevan la imagen con suavidad.

Carpeta de salida
Esto es algo que había pedido mucha gente: que las imágenes piramidales se créen en otra carpeta.
Bueno, pues con este programa se puede hacer.

Transformaciones geométricas

Éste es el punto fuerte de este programa.

Si indicamos que no queremos realizar ninguna transformaciónn geométrica, pues actúa como lo hacía el programa "Crear niveles piramidales", pero si seleccionamos algún tipo de transformación, la imagen resultante tendrá dicha transformación aplicada.




El programa está implementado con complementos, lo que significa que el día de mañana podrá haber más tipos de transformaciones.

Las transformaciones implementadas a día de hoy son:

1. Rotar 90º en el sentido de las agujas del reloj.

Seleccionamos esta opción, arrastramos archivos de imágenes a la ventana y pulsamos el botón OK. El programa generará las imagenes (añadiéndoles un 90 al final para saber cuáles son las rotadas).

2. Rotar 180º en el sentido de las agujas del reloj.

Seleccionamos esta opción, arrastramos archivos de imágenes a la ventana y pulsamos el botón OK. El programa generará las imagenes (añadiéndoles un 180 al final para saber cuáles son las rotadas).

3. Rotar 270º en el sentido de las agujas del reloj.

Seleccionamos esta opción, arrastramos archivos de imágenes a la ventana y pulsamos el botón OK. El programa generará las imagenes (añadiéndoles un 90 al final para saber cuáles son las rotadas).

4. ¡El robocop!, ah no, que eso era una canción.

Rotación Arbitraria de kappa.

Con este transformador podemos rotar la imagen por ejemplo 12.45 grados.
Si seleccionamos este transformador, el programa nos solicitará los grados y el tipo de interpolación de pixel a aplicar (vecino, bilineal o bicúbica).

Arrastramos archivos de imágenes a la ventana y pulsamos el botón OK. El programa generará las imagenes añadiéndoles un [grados]kappa al final para saber cuáles son las rotadas.

Ej: Si rotamos la foto 107.ecw 22.45 grados, el archivo generado será 10722.45kappa.tif


5. Omega-Phi-Kappa.

Permite pivotar la imagen en su centro rotándo una serie de grados para omega, phi y kappa.

El programa nos solicitará los grados a rotar en omega, en phi, en kappa, el orden de las rotaciones (omega-phi-kappa, omega-kappa-phi, ...) así como el tipo de interpolación.

Arrastramos archivos de imágenes a la ventana y pulsamos el botón OK. El programa generará las imagenes añadiéndoles un [omega],[phi],[kappa],[interpolacion]omegaphikappa al final para saber cuáles son las rotadas.

Ej: Si rotamos la foto 107.ecw 10 grados en omega, 20 en phi y 30 en kappa y seleccionamos el tipo de interpolación bicúbica (3) el archivo generado será 10710,20,30,0omegaphikappa.tif


6. La más importante para el final: ¡Rectificación epipolar!.

Tengo que agradecer a Javier Múgica su soporte técnico y fórmulas matemáticas para poder implementar este transformador.

Si indicamos este transformador, el programa nos solicitará el tipo de ajuste a realizar:

a) La solución que menos modifica la cámara izquierda.
b) La solución que menos modifica la cámara derecha.
c) La solución que busca la mayor verticalidad.

así como el tipo de interpolación de píxel a utilizar (vecino, ...)

Cuando seleccionamos un tipo de transformador, no podemos arrastrar archivos de imagen (tiff, ecw,...) sino que tenemos que arrastrarle archivos de par estereoscópico (*.d3d), ya que la rectificación epipolar se hace par a par.

Cuando pulsamos el botón de comenzar, el programa genera una carpeta denominada epipolar de [nombre del modelo].

Ej: Epipolar de 107-108

Dentro de esa carpeta nos va a generar:
Las dos imágenes rectificadas
Dos archivos de orientación interna nuevos
Dos archivos de cámara nuevos
Un archivo de relativa nuevo
Un archivo de par estereoscópico nuevo, para cargarlo directamente con Digi3D.

Aquí tienes unas capturas de pantalla de Digi3D 2010 mostrando un modelo de Santa Pola que se voló mal y tenía unos giros importantes. Al estar en anaglifo, se puede ver con mucha facilidad en la primera imagen que hay un giro de kappa grande.

En la segunda, que es la imagen rectificada, se puede ver incluso sin gafas que han desaparecido todos los giros, y por lo tanto, se puede restituir con mucha más facilidad.

La tercera imagen pertenece al modelo rectificado, en las mismas coordenadas, pero con más detalle.








El programa forma parte del conjunto de programas de Digi3D 2010, pero se puede decargar para probar. Se podrá descargar desde la página de descargas de Digi3D cuando lo terminen de probar las empresas que lo están probando. Funciona con licencias de 2007 y requiere conexión a internet. El día que aparezca la versión 2010 dejará de funcionar con licencias de 2007 y ya no será necesaria una conexión a internet.

Espero que lo disfrutéis.

jueves 4 de junio de 2009

Elevación en los cuadros de diálogo de configuración en Digi3D 2010

Digi3D 2010 está preparado para Windows Vista y Windows 7.

Los cuadros de diálogo que requieren elevación muestran botones con el escudo de elevación en Windows Vista y Windows 7 siempre que esté activado el UAC (control de cuentas de usuario).

A continuación dos capturas de Digi3D 2010 corriendo en un ordenador con Windows 7 RC:




Al aceptar los cuadros de diálogo en estos sistemas operativos aparecerá el escritorio seguro solicitando confirmación.

miércoles 3 de junio de 2009

Soporte para monitores estereoscópicos en Digi3D 2010

La versión 2010 implementa más sistemas de visión estereoscópica que la versión 2007.

En su momento me compré un monitor iZ3D pero hasta hoy no he conseguido hacer que Digi3D muestre estereoscopía en este monitor porque la verdad es que no entiendo cómo funciona. Dispone de dos entradas de monitor, lo que me hizo suponer que es una especie de Mimo/Planar, en el que le suministras la información para cada ojo en cada una de las entradas del monitor, pero no funciona así: Un monitor proporciona el color y el otro un algoritmo muy raro que define la orientación de los píxeles para cada ojo o algo así. Me puse en contacto con el desarrollador del monitor y me envió un algoritmo pero no lo puedo implementar porque tengo que estudiar OpenGL Shaders y no he encontrado tiempo para hacerlo).

Pero resulta que una universidad nos ha prestado un monitor Zalman, que es otro monitor estereoscópico que se puede adquirir con facilidad.

Éste es mucho más sencillo, ya que únicamente hay que entrelazar la imagen en horizontal (mas o menos lo que hacía la caja entrelazadora del ZScreen). Bueno, pues me he puesto a repasar los libros de OpenGL y ahora Digi3D 2010 dispone de un tipo de estereoscopía para este monitor.



Además, ya puestos, he hecho lo mismo pero para monitores auto-estereoscópicos (aunque no dispongo de ninguno de ellos para probar) como el Sharp LL-151-3D, el Dimension VirtualVideo, o el Dresden 3D.



Por último he programado también un modo para utilizar con gafas de anaglifos de tipo rojo-azul que son los más normales.







Ninguno de los tres sistemas es bueno para trabajar (todo sea dicho), ya que los dos primeros quitan resolución (uno en horizontal y otro en vertical) por lo que se ven líneas negras, y el tercero tiene un problema evidente con el color, pero para ciertas situaciones pueden venir bien.

Además, no es necesaria una tarjeta gráfica nVidia Quadro, valdría con una nVidia GeForce para poder trabajar.

viernes 8 de mayo de 2009

Mensajes de error en Digi3D 2010

La versión 2010 de Digi3D muestra unos mensajes de error mucho más amigables que las versiones anteriores.

Digi3D 2010 sigue la recomendación de interface de usuario para Windows Vista (aunque no es necesario tener instalado Windows Vista para poder ver estos cuadros de diálogo mejorados), mostrando unos cuadros de diálogo con botones más grandes, con textos descriptivos y con posibilidad de poder ver más información.

A continuación podemos ver una captura de pantalla de un error del exportador de DGN, que se queja porque el archivo ha sido abierto en modo sólo lectura y he intentado almacenar una entidad. Hay dos capturas: La primera muestra información básica para el usuario, la segunda muestra la información devuelta por el pluggin de DGN.



sábado 2 de mayo de 2009

Estereoscopía en Windows Vista y Windows 7

Hoy por fín he conseguido ver funcionar una vista estereoscópica en Windows Vista. Esta tarde lo voy a probar con Windows 7, pero seguro que también va a funcionar ya que Windows 7 es mucho mejor S.O. que Vista y además todo lo que funciona en Vista funciona en 7.

Después de dos años pensando que era un problema de políticas de Microsoft en lo referente a OpenGL y DirectX/3D (influenciado por los múltiples posts que se pueden leer en los foros de desarrolladores de OpenGL), resulta que NVidia ha sacado un driver que funciona perfectamente, y sin ninguna actualización de Vista, por lo que el problema no era de Microsoft, sino de nVidia.

Por hora únicamente he conseguido estéreo para gafas activas, y no para Planar/Mimo, pero técnicamente es mucho más sencillo el estereo por clonación que el de page flipping, por lo que no tardarán mucho en sacar el driver para estereo en clonación.

La versión con la que he conseguido ver estereoscpía es la 182.46, con una tarjeta nVidia Quadro FX 1500. También he probado con una Quadro FX 3500/4000 SDI y con esa tarjeta no ha funcionado.