Archivo de la etiqueta: geotiff

¿El TIFF contiene una imagen o por el contrario contiene un MDT/MDS?

TIFFDump mostrando la cabecera de un archivo MDS obtenido mediante un radar.

TIFFDump mostrando la cabecera de un archivo MDS obtenido mediante un radar.

Acabo de añadir en DigiNG la posibilidad de cargar archivos MDS/MDT contenidos en un archivo .tif.

El usuario carga el archivo .tif con la orden CARGA_F, y es DigiNG quien decide si carga el archivo como una imagen o como un MDT. En este post te voy a explicar el criterio que utiliza DigiNG para decidir cómo carga el archivo.

Para ello vamos a utilizar una herramienta denominada TIFFDUMP que viene junto con el código fuente de la librería libtiff (lo encontrarás en la carpeta bin de este enlace).

Esta herramienta (que es una aplicación de consola) nos muestra el contenido de la cabecera de un archivo .tif.

El formato TIFF es un formato muy bien pensado (exceptuando que no permite crear archivos de más de 4GB de tamaño, aunque ese pequeño problema ya está solucionado con el formato BigTiff), y tiene una cabecera muy completa que permite indicar todas las características de la imagen contenida dentro del archivo.

Esas características se almacenan en variables. Existen muchísimas según el estándar, y si no encuentras la que necesitas para almacenar metadatos de la imagen, eres libre de añadir la que quieras. Si además tienes la suerte de que se acepte por la comunidad podrías conseguir que en una próxima revisión del estándar se convirtiera en una variable estandarizada.

Las variables no tienen por qué aparecer en el archivo .tif. Si no aparecen, se asume que su valor es el que tienen por defecto.

El programa tiffdump.exe es muy sencillo de ejecutar. Tan solo tenemos que abrir una consola, y ejecutarlo pásandole como parámetro el nombre del archivo .tiff a analizar.

En la siguiente tabla tienes varias variables junto con su significado:

Nombre de variable Significado
ImageWidth Ancho de la imagen en píxeles
ImageLength Alto de la imagen en píxeles.
Photometric Valor que indica el tipo de imagen (tonos de gris, color RGB, paleta de color, imagen que es únicamente un canal alpha, CMYK, YCrCb,…)
BitsPerSample Indica el número de bits que tendrá cada canal de la imagen.
SamplesPerPixel Indica el número canales que tendrá cada pixel. Si la imagen es RGB lo normal es encontrarse aquí un 3, si es en tonos de gris, lo normal es encontrar aquí un 1. Si es una imagen RGB con canal alpha, aquí tendremos un 4, si es una imagen en tonos de gris con canal alpha, nos encontraremos con un 2, etc.
SampleFormat Indica el tipo de valor almacenado en cada pixel. Este parámetro casi nunca se encuentra en una imagen Tiff. Si creas una imagen Tiff con Photoshop por ejemplo no verás este valor almacenado en el tiff, y se asumirá que el valor por defecto es 1, que significa entero sin signo.

Ahora bien, ¿cómo decidimos si una imagen es un MDT/MDS o no?

Nunca conviene reinventar la rueda, y si hay alguna aplicación estándar que realice la operación que quieres implementar, lo ideal es analizar el comportamiento de esa aplicación y realizar una implementación parecida. De ese modo estarás reforzando ese estándar de facto.

La aplicación a seguir en este caso, y sin ningún tipo de dudas es Global Mapper.

Lo único que necesitaba son una serie de imágenes, y como se por donde van los tiros, solicité a un colega que me crease archivos TIFF con MDTs en los siguientes formatos:

Tipo de imagen Canales bits por canal tipo de valor
Tono de gris 1 8 entero sin signo
Tono de gris 1 8 entero con signo
Tono de gris 1 16 entero sin signo
Tono de gris 1 32 valor en coma flotante
Tono de gris 1 64 valor en coma flotante

Y como era de esperar, Global Mapper únicamente trata como MDT/MDS los archivos con valor en coma flotante.

De modo que las pruebas que se realizan para comprobar si un TIFF es un MDT/MDS o no son las siguientes:

  1. Se comprueba que la imagen tenga un único canal
  2. Se comprueba que el número de bits del canal sea 32 o 64
  3. Se comprueba que la imagen informe del tipo de valor almacenado en cada pixel (te recuerdo que este campo habitualmente no aparece en la mayoria de archivos .tif)
  4. Se comprueba que el tipo de valor almacenado en cada pixel es valor en coma flotante (o lo que es lo mismo, un 3, que significa IEEE floating point data

Si se superan todas estas pruebas, DigiNG considera el archivo como un MDT/MDS. Si no, se considerará como una imagen.