Archivo de la categoría: Digi3D

Mejorando la compatibilidad WKT con programas que no siguen el estándar OpenGIS Transformations Service

Digi3D.NET crea cadenas WKT compatibles con el estándar OpenGis Coordinate Transformation Service, y ese estándar dicta que si un sistema es tridimensional (que es como trabaja Digi3D.NET) debe crear sistemas de referencia o puramente 3D como los Geográficos 3D o compuestos en los que hay dos partes: una horizontal y otra vertical.

En el caso de sistemas compuestos es legal que tanto la componente horizontal como la vertical pueden ser locales (desconocido), de manera que si en Digi3D.NET creas un sistema de referencia de coordenadas en el que conoces la parte horizontal (por ejemplo WGS84 / UTM Zona 30N) y desconoces la vertical, el programa va a crear un sistema compuesto del tipo WGS84 / UTM Zona 30N + vertical local.

Esto está muy bien para los programas que siguen el estándar, pero vuelve locos a los programas que no lo siguen o que no son 3D, de manera que para mejorar la compatibilidad con esos programas, hemos añadido una opción en Digi3D.NET que nos va a permitir configurarlo para que en el caso de que el usuario cree un sistema 3D en el que el sistema vertical sea desconocido, al crear archivos .PRJ con cadenas WKT, estas se creen como sistemas 2D puros. Si por el contrario el sistema vertical no es local o desconocido, aunque tengas esta opción activada, el programa va a crear una cadena 3D.

Puedes activar esta funcionalidad en la opción del menú Herramientas/Configuración/Sistemas de referencia de coordenadas/Trabajar con sistemas 2D (horizontales) si el vertical es desconocido.

Modificación en el módulo de carga de archivos de PhotoScan

Hemos añadido una modificación en el módulo de carga de proyectos de PhotoScan en Digi3D.NET que nos va a permitir trabajar correctamente en el escenario en el que el usuario de PhotoScan le hace pasar coordenadas con altura ortométricas por coordenadas con alturas elipsoidales.

PhotoScan internamente trabaja siempre con altitudes elipsoidales. Si le proporcionamos correctamente coordenadas con altitudes ortométricas, él las transforma internamente a elipsoidales y almacena en el archivo de proyecto un sistema de referencia que indica que el operador introdujo correctamente coordenadas con altitudes ortométricas.

El problema es que en la práctica no hemos visto ni un único proyecto de PhotoScan con coordenadas ortométricas. Todos, y cuando digo todos quiero decir todos los archivos que nos han llegado tienen coordenadas elipsoidales, sin embargo los operadores nos aseguran que lo son.

De manera que nos hemos acercado a una empresa que dispone de una licencia y hemos hecho un estudio para aclarar las cosas de una vez por todas. De paso hemos modificado Digi3D.NET para poder asumir los tres escenarios posibles que son:

  1. Al crear el proyecto de PhotoScan el operador ha introducido coordenadas de puntos de apoyo con altitudes elipsoidales.
  2. Al crear el proyecto de PhotoScan el operador ha introducido coordenadas de puntos de apoyo con altitudes ortométricas indicándoselo así a PhotoScan
  3. Al crear el proyecto de PhotoScan el operador ha introducido coordenadas de puntos de apoyo con altitudes ortométricas haciéndose pasar por elipsoidales.

La manera de trabajar correctamente con PhotoScan es la 1 o la 2, pero repito: el 100% de los proyectos de PhotoScan que han llegado a nuestras manos (mediante tickets de soporte técnico, archivos que hemos cargado vía TeamViewer en los equipos de nuestros clientes, etc.) están hechos mediante el método 3.

¿Y cual es la causa por la cual todos los modelos que vemos están por el método 3?

Pueden ser varios motivos (desconocimiento, no leer las instrucciones de PhotoScan o al menos donde se habla de los modelos de geoide, etc.), pero vamos a centrarnos en el interfaz de usuario, y el problema es que el interfaz de usuario no ayuda a localizar sistemas de referencia con alturas ortométricas como vas a comprobar a continuación:

PhotoScan tiene un cuadro de diálogo en el que podemos indicar el sistema de referencia de coordenadas de los puntos de apoyo:

Este cuadro de diálogo tiene un desplegable (titulado Sistema de coordenadas) que te permite seleccionar los últimos sistemas de referencia empleados. Si el sistema de referencia que buscas no está en el desplegable, tienes que seleccionar la opción de los tres puntos que se muestra un cuadro de diálogo de búsqueda que tiene todos los sistemas EPSG soportados por PhotoScan:

Este cuadro de diálogo no es tán versátil como el de Digi3D.NET y no te permite crear tus propios sistemas, únicamente te permite seleccionar alguno preconfigurado, y como puedes ver en la captura anterior, no hay ni un solo sistema de referencia preconfigurado con componente vertical (bueno, en realidad si que hay uno o dos que son los únicos sistemas de referencia compuestos que publica la base de datos EPSG pero que en la práctica no creo que utilice nadie).

En la captura anterior puedes ver que hemos seleccionado WGS84 / UTM Zona 30N, pero no somos capaces de seleccionar
WGS84 / UTM Zona 30N + EGM2008 por ejemplo, pues no existe en la base de datos preconfigurada de PhotoScan.

Este cuadro de diálogo no tiene ningún botón del tipo “Crear mi propio sistema de referencia compuesto” de manera que no podríamos crear el sistema WGS84 / UTM Zona 30N + EGM2008, pero lo que sí que podemos hacer es importar un archivo .PRJ que defina ese sistema. Para ello, tendremos que irnos a otro programa como Digi3D.NET y crear un archivo PRJ mediante el cuadro de diálogo de Sistemas de Referencia de Coordenadas, seleccionando el sistema que nos interesa y pulsando el botón Exportar.

Una vez exportado, lo podemos importar en PhotoScan pulsando el botón de la carpeta en el cuadro de diálogo Seleccionar sistema de coordenadas y una vez importado, éste aparecerá en la sección de Sistemas de coordenadas definidos por el usuario tal y como puedes ver en la siguiente captura de pantalla:

Pero ¡aún no podrías seleccionar este sistema! pues para poderlo seleccionar, previamente tendrás que haberte descargado de la página de Agisoft el modelo de geoide EGM2008 y copiarlo en la carpeta correspondiente del programa. Una vez instalado el modelo de geoide, ya sí que puedes seleccionar este sistema personalizado tal y como puedes ver en la siguiente captura:

Como puedes comprobar, no ha sido sencillo, pero ahora PhotoScan sabrá transformar las coordenadas Z de los puntos de apoyo de ortométricas a elipsoidales, porque como he indicado al principio de este post: PhotoScan trabaja siempre en elipsoidales.

Si te quieres ahorrar los pasos anteriores y quieres trabajar bien, tendrías que transformar las coordenadas de los puntos de apoyo de ortométricas a elipsoidales antes de introducirlas en PhotoScan. Y personalmente creo que esta es la mejor opción, pues en el caso de España no utilizamos el modelo de geoide EGM2008, sino que utilizamos el modelo REDNAP Península o REDNAP Canarias que son modelos con mayor precisión para nuestro país y esos modelos de geoide no están disponibles para PhotoScan (que yo sepa).

En la práctica, no hemos visto ningún proyecto bien hecho: lo que hacen los usuarios habitualmente es buscar en el listado de sistemas de referencia el 2D (por ejemplo WGS84 / UTM Zona 30N), y como no hay mención alguna al sistema vertical, pues aceptan y dan por supuesto que la magia de PhotoScan sabrá qué hacer con esas alturas. Lo que se está haciendo entonces es engañar a PhotoScan.

El problema es que los usuarios de PhotoScan están seguros de que lo están haciendo bien y nos aseguran que están introduciendo coordenadas ortométricas. Esta afirmación tan rotunda nos hizo pensar que PhotoScan no creaba cadenas WKT correctas, e incluso creamos una entrada en este mismo blog (en la cual hoy hemos tachado unos cuantos párrafos) porque pensábamos que PhotoScan se olvidaba de poner el sistema vertical en la cadena WKT del archivo de proyecto, pero no es así. Si el usuario de PhotoScan no le engaña a PhotoScan al introducir coordenadas con altitud ortométrica, PhotoScan crea correctamente una cadena WKT para un sistema compuesto en el que se proporciona información del sistema vertical.

Sabiendo ahora que PhotoScan crea cadenas WKT correctas (es la primera vez que vemos un programa que no sea Digi3D.NET que acepta cadenas WKT de sistemas compuestos) nos encontramos con tres posibilidades:

  1. Que la cadena WKT del sistema de referencia del archivo de PhotoScan sea compuesta. En esta caso, podemos asumir sin posibilidad de error que las alturas de los puntos de apoyo que se introdujeron en PhotoScan son ortométricas y que además se introdujeron correctamente en PhotoScan.
  2. Que la cadena WKT del sistema de referencia del archivo de PhotoScan sea horizontal y que las coordenadas que se introdujeron tenían alturas elipsoidales.
  3. Que la cadena WKT del sistema de referencia del archivo de PhotoScan sea horizontal y que las coordenadas que se introdujeron tenían alturas ortométricas aunque PhotoScan piensa que son elipsoidales.

Si Dig3D.NET se encuentra con un archivo de proyecto de PhotoScan del caso 1, asume que debe trabajar en coordenadas ortométricas y por lo tanto, utilizará un modelo de geoide.

Si por el contrario Digi3D.NET se encuentra con un archivo de proyecto de PhotoScan que no sea el caso 1, no tiene forma de saber si estamos en el caso 2 o en el 3 y esto es muy importante, pues si estamos en el caso 2, pero creemos que estamos en el caso 3 o viceversa, en casos como España que la diferencia de altitud elipsoidal ortométrica ronda los 50 metros, ¡tendremos diferencias de Z de 50 metros!.

De manera que hemos tenido que añadir a Digi3D.NET una opción de configuración para indicarle al programa cómo se ha comportado el operador de PhotoScan al crear el proyecto.

Esta opción de configuración la tenemos en el menú Herramientas/Configuración/PhotoScan/Coordenadas Z en proyecto haciéndose pasar por elipsoidales y tenemos dos opciones a elegir:

  • Si, PhotoScan piensa que son elipsoidales pero son ortométricas.
  • No, las coordenadas se introdujeron en PhotoScan correctamente.

¿Cómo se comporta a partir de ahora Digi3D.NET si se le indica en la configuración que el operador de PhotoScan ha introducido las coordenadas correctamente?

  • Si se encuentra con un archivo de proyecto con sistema de referencia compuesto, asumirá que las alturas de las coordenadas serán ortométricas y por lo tanto utilizará un modelo de geoide. La ventana fotogramétrica en este caso emitirá/recibirá coordenadas en el sistema de referencia que aparece en el archivo de proyecto y en la barra de mensajes de ésta veremos coordenadas en ese sistema (que serán habitualmente UTM con alturas ortométricas).
  • Si se encuentra con un archivo de proyecto con sistema de referencia horizontal, asumirá que se está trabajando con alturas elipsoidales, de manera que la ventana fotogramétrica emitirá/recibirá coordenadas geográficas (latitud, longitud, altitud elipsoidal).

¿Cómo se comporta a partir de ahora Digi3D.NET si se le indica en la configuración que PhotoScan piensa que son elipsoidales pero son ortométricas?

La ventana fotogramétrica en este caso va a trabajar de una forma especial: Va a asumir (en las operaciones matemáticas que tienen que ver con PhotoScan) que las coordenadas Z son elipsoidales, de manera que no va a utilizar en ningún caso un modelo de geoide, pero va a publicar al resto de componentes de Digi3D.NET que tiene un sistema vertical que no es elipsoidal.

  • Si se encuentra con un archivo de proyecto con sistema de referencia horizontal (como por ejemplo WGS84 / UTM Zona 30N) y el usuario tiene configurada la opción Herramientas/Configuración/Sistema de referencia de coordenadas/Solicitar sistema vertical para sensores a No, la ventana fotogramétrica va a comunicar al resto de componentes de Digi3D.NET que emite/recibe coordenadas en el sistema compuesto por el horizontal que aparece en el archivo de proyecto y el vertical desconocido.
  • Si se encuentra con un archivo de proyecto con sistema de referencia horizontal (como por ejemplo WGS84 / UTM Zona 30N) y el usuario tiene configurada la opción Herramientas/Configuración/Sistema de referencia de coordenadas/Solicitar sistema vertical para sensores a Sí, al cargar el modelo Digi3D.NET va a solicitar en un cuadro de diálogo el sistema vertical. A partir de este momento la ventana fotogramétrica va a comunicar al resto de componentes de Digi3D.NET que emite/recibe coordenadas en el sistema compuesto por el horizontal que aparece en el archivo de proyecto y el vertical seleccionado por el usuario.
  • Si se encuentra con un archivo de proyecto con sistema de referencia compuesto, la ventana fotogramétrica comunicará al resto de componentes de Digi3D.NET que su sistema de referencia es exactamente el compuesto que aparece en el archivo de proyecto de PhotoScan.


Ya no es necesario ser administrador para almacenar la configuración de Digi3D.NET

CuadroDialogoConfigurarNuevoCuadroDialogoConfigurarNuevo.PNGPresentamos hoy un cambio que llevaban solicitado los usuarios empresariales desde hace tiempo: La posibilidad de poder almacenar la configuración para usuarios que no sean administrador.

Hasta hoy Digi3D.NET almacenaba la configuración en el registro de Windows. El registro de Windows tiene dos carpetas importantes:

  • Una (HKEY_CURRENT_USER) en la que se almacena la configuración del usuario activo. Esta es una carpeta propia por cada usuario de la máquina. Un usuario siempre tiene permisos de lectura/escritura sobre esta carpeta, pues es su propia carpeta. Un usuario no tiene permiso de visualizar o modificar datos en la carpeta de usuario del resto de usuarios de la máquina.
  • Otra (HKEY_LOCAL_MACHINE) en la que se almacena la configuración de la máquina. Habitualmente los usuarios normales no tienen permiso de escritura en esta carpeta y hace falta ser administrador para poder almacenar cosas aquí.

Digi3D.NET almacena configuraciones en ambas carpetas:

  • Las configuraciones específicas del usuario, como por ejemplo el color del índice a mostrar en la ventana fotogramétrica, se almacenan en la carpeta HKEY_CURRENT_USER, pues puede que comparta máquina con otro usuario que prefiera otro color de índice.
  • Las configuraciones específicas de la máquina, como por ejemplo el tipo de visualización estereoscópica se almacenan en la carpeta HKEY_LOCAL_MACHINE.

El problema de la carpeta HKEY_LOCAL_MACHINE es que requiere elevación, es decir, requiere ser administrador para poder almacenar información ahí. Eso en un usuario particular no suele ser un problema, pero los usuarios empresariales habitualmente se quejan de que sus usuarios no tienen permiso para almacenar HKEY_LOCAL_MACHINE y cada vez que quieren realizar un cambio en la configuración deben molestar a un administrador de la red.

Hoy presentamos una novedad que soluciona este problema. A partir de la versión 2018.14.0.0 hemos solucionado este problema pues ahora la información de la máquina no se almacena más en el registro de Windows, sino que se almacena en una base de datos sqlite ubicada en el directorio %ProgramData%\Digi3D.NET denominada Digi3DNET.db.

La carpeta %ProgramData% es una carpeta en la cual todos los usuarios tienen permiso de escritura y es la que se utiliza para almacenar datos de los programas.

¿Qué cambios voy a notar?

  • Hemos simplificado el cuadro de diálogo de Configuración, que hasta hoy no era nada intuitivo pues tenía dos botones para aceptar:
    CuadroDialogoConfigurarAntiguo
    Como puedes ver, había uno para almacenar la información de máquina y de usuario (que requería elevación) y otro para almacenar únicamente la información del usuario. Esto era completamente anti-intuitivo.Ahora el aspecto del cuadro de diálogo de configuración es este otro:
    CuadroDialogoConfigurarNuevo
    Puedes comprobar que ahora es mucho más intuitivo.
  • Ahora el programa nunca solicitará elevación en ningún cuadro de diálogo.
  • Se ha mejorado el rendimiento a la hora de leer datos de configuración pues las bases de datos sqlite son muy rápidas haciendo consultas.

¿Qué pasa con mis configuraciones existentes?

El programa a partir de hoy cada vez que intenta localizar una configuración de máquina, la intenta localizar primeto en la base de datos. Si no la localiza ahí, intenta localizarla en el registro (en HKEY_LOCAL_MACHINE). Si la encuentra en el registro la almacena en la base de datos de manera que la próxima vez que se intente localizar dicha configuración ya no sea necesaria localizarla en el registro.

Ahora el programa nunca almacena información en la carpeta HKEY_LOCAL_MACHINE del registro, sino que almacena siempre en la base de datos.

 

 

Mejoras en la comunicación de errores al cargar modelos satelitales y de cámara cónica

Hasta hoy, Digi3D.NET no tenía en cuenta la extensión de los archivos de proyecto de los cuales se extraían las orientaciones de los modelos satelitales o de cámara cónica, de manera que si por ejemplo renombrábamos un archivo .PRJ de Inpho a extensión .TXT y lo cargábamos, el programa lo cargaba correctamente.

Esto es así porque el programa intentaba cargar el archivo con todas las extensiones disponibles (Inpho Summit Evolution, LPS, etc.) , y si una de ellas conseguía cargar el archivo correctamente, se daba por válido. En caso de que no se consiguiera, como se había probado con todas las extensiones soportadas, el mensaje de error que se daba era un mensaje genérico, que no daba ninguna pista al usuario, siendo difícil localizar el error.

A partir de hoy el programa sí que tiene en cuenta la extensión del archivo, de manera que si las orientaciones del modelo satelital están almacenadas en formato .PRJ de Inpho, la extensión del archivo debe ser forzosamente .PRJ.

Gracias a esto el programa ya sí que puede mostrar mensajes de error específicos de una extensión en particular.

Puedes ver esta nueva funcionalidad en el siguiente vídeo:

 

 

Mejoras de interfaz de usuario para epipolares para el sensor cónico

Hemos mejorado el interfaz de usuario para seleccionar el cálculo de orientaciones epipolares al cargar un modelo de sensor cónico en Digi3D.NET.

Hasta ahora el programa mostraba tres opciones en el menú Ventana fotogramétrica/Transformación de las imágenes:

  • Solución que menos modifica la imagen izquierda.
  • Solución que menos modifica la imagen derecha.
  • Solución que busca la mayor verticalidad.

Además de existir tres opciones, el programa no mostraba ninguna marca visual para indicar si ya se estaba mostrando la epipolar en el modelo cargado.

A partir de hoy, el programa muestra una única opción en este menú: Rectificación epipolar. Si la seleccionamos, el programa calculará la orientación epipolar y si no modificamos las rotaciones de las imágenes, el programa mostrará dicha opción del menú marcada para indicarnos visualmente que las rotaciones actuales coinciden con la rectificación epipolar.

Puedes configurar el tipo de orientación que se calculará en la nueva opción del cuadro de diálogo Herramientas/Configuración/Sensor cónico/Rectificación epipolar donde nos encontraremos con las tres posibles opciones.

Puedes ver esta nueva funcionalidad en acción en el siguiente vídeo:

Añadido soporte para aproximar epipolares en las imágenes satelitales

Acabamos de añadir a Digi3D.NET la posibilidad de calcular una aproximación a la orientación epipolar de una imagen satelital.

Hasta ahora el programa mostraba las imágenes satelitales con una rotación de 90 grados. A partir de ahora el programa calcula la mejor aproximación a la orientación epipolar, de manera que a partir de ahora la sensación estereoscópica al cargar modelos satelitales será mucho mejor.

A partir de ahora al cargar un modelo satelital, el menú Ventana fotogramétrica/Transformación de las imágenes muestra la opción: Rectificación epipolar que nos permite activar la rectificación epipolar bajo demanda.

Además hemos añadido en el cuadro de diálogo de Configuración la opción Satélite RPC (estereoscópico)/Activar epipolar por defecto para indicar si queremos que se active la epipolar al cargar un modelo satelital estereoscópico.

Puedes aprender más acerca de la epipolar en imágenes satelitales en el documento: Epipolar resampling of linear pushbroom satellite imagery by a new epipolarity model.

Puedes ver esta nueva funcionalidad en acción en el siguiente vídeo:

 

Mejorado el soporte de Pix4D

Acabamos de añadir a Digi3D.NET la posibilidad de cargar de forma nativa archivos  _calibrated_external_parameters.txt de Pix4D.

Hasta ahora para cargar aerotriangulaciones de Pix4D teníamos que copiar el archivo  _calibrated_external_parameters.txt con extensión .EO, además de editarlo para quitar la extensión de los archivos en la primera columna de todas las líneas de este archivo y además de asegurarnos de que la configuración del importador de orientaciones de centros de proyección y giros se adaptase a Pix4D (unidades angulares = sexagesimal y orden a los giros = omega – phi – kappa).

Bien, pues a partir de ahora ya no es necesario realizar esta tarea, ya que Digi3D.NET carga de forma nativa estos archivos sin realizarles ninguna modificación.

Evitando que Digi3D.NET solicite el sistema de referencia de coordenadas vertical si la orientación del sensor no lo proporciona

Hemos comenzado a simplificar todo lo relacionado con sistemas de referencia de coordenadas en Digi3D.NET.

El primer paso ha sido permitir configurar que el programa no solicite el sistema de referencia de coordenadas vertical en caso de que carguemos una orientación que proporcione un sistema horizontal pero no uno vertical, como el caso que se explica en la entrada El mundo es en 3D, pero nadie se acuerda del sistema de referencia de coordenadas vertical (si, el de la coordenada Z)

Acabamos de añadir una nueva sección en el cuadro de diálogo de Configuración denominada Sistemas de Referencia de Coordenadas que por ahora tiene una única opción: Solicitar sistema vertical para sensores.

Si activamos esta opción y cargamos un modelo fotogramétrico cuya orientación proporciona un sistema de referencia de coordenadas horizontal pero no uno vertical, el programa asumirá que el vertical es Desconocido y no nos va a preguntar más.

Si desactivamos esta opción, el programa se comportará como hasta ahora, es decir, preguntará al usuario por el sistema vertical.

Añadido soporte para archivos .PYR

Acabamos a añadir a Digi3D.NET soporte para localizar las imágenes piramidales de archivos .TIFF en archivos externos con extensión .PYR.

Hasta ahora, si el archivo .TIFF no tenía niveles piramidales asociados, el programa intentaba cargar archivos que seguían el siguiente patrón: [nombre del archivo].tif_[nivel piramidal], como por ejemplo 107.tif_32 para el nivel piramidal 32 de la imagen 107.TIF.

Bien, pues ahora el programa también intenta localizar el archivo 107.PYR. El archivo .PYR es un archivo .TIFF (al que se le cambia la extensión por .PYR) que únicamente tiene niveles piramidales. La ventaja de este archivo con respecto al sistema antiguo es que únicamente es un archivo y no tantos como niveles piramidales.

Además hemos modificado el programa Generador de Niveles Piramidales para que cree por defecto archivos .PYR en vez de crear un archivo por cada nivel piramidal. Para ello hemos añadido un desplegable al programa que te permite seleccionar el tipo de archivo a crear. Puedes ver el desplegable en la siguiente captura de pantalla:

GeneradorNivelesPiramidalesConOpcionPyr

Puedes ver esta funcionalidad en acción en el siguiente vídeo: