Escalamiento de imágenes georreferenciadas con gdal_translate (GDAL/OGR)

Cuando estoy procesando imágenes Landsat, la manera más rápida de ver los resultados es con Gimp. Sin embargo, en algunos casos, la aplicación se resiente señalando que le es imposible manejar adecuadamente imágenes de 16 bits por lo que eventualmente habrá pérdida de información y lo que aparece desplegado es un mosaico totalmente negro. No obstante, estas imágenes pueden ser desplegadas sin problemas en otras aplicaciones como MultiSpec o ERDAS, por ejemplo). Con la captura de imágenes de 16 bits, se pueden manejar hasta 65.536 tonalidades de gris frente a las sólo 256 que cabría esperar con las de 8 bits. No obstante, sería interesante saber si la información derivada del análisis de una imagen de 8 bits puede ser aceptable cuando se la compara con la de 16 bits. Para ello, es necesaria una transformación que guarde la misma proporción con relación a la imagen original. Ese proceso es el escalamiento.

Para escalar una imagen con las librerías GDAL/OGR se tiene el comando gdal_translate, cuyos modificadores (opciones) se pueden averiguar, en Linux, con man gdal_translate. La sintaxis del comando que se va a emplear en este caso es la siguiente:

gdal_translate -ot Byte -scale minmax_imagen_fuente minmax_imagen_destino imagen_fuente.tif imagen_destino.tif

Para averiguar los parámetros de -scale de la imagen fuente tendremos que apelar a gdalinfo -mm, donde su salida será procesada con grep y awk para extraer el mínimo y el máximo que deseamos. Los de la imagen destino son 0 255.

Para hacer más expedito el proceso hice un mini script de bash:

#!/bin/bash
clear;echo "Directorio de imagenes *.tif"; echo;ls *.tif;echo
read -p "archivo de entrada = ? " file_input; echo
echo "archivo de entrada es = " $file_input;echo
file_tmp=`echo ${file_input/.tif/""}`
file_output=`echo $file_tmp'_esc.tif'`
echo "archivo de salida es = " $file_output;echo
var_tmp=`gdalinfo -mm $file_input|grep -i min|grep -oE '[0-9.-]*'`
parametros=`echo $var_tmp|awk '{print $1,$2}'`
echo "Min, Max imagen fuente = " $parametros;echo
gdal_translate -ot Byte -scale $parametros 0 255 $file_input $file_output
cp $file_output escalados/
rm $file_output

que permite escalar a 8 bit las imágenes GeoTiff de 16 bits que tengo dentro de una carpeta, conjuntamente con el script, y después de procesadas las guarda en otra denominada escalados. Luego de ejecutar el script para 5 bandas de 16 bits provenientes de un subset que abarca la represa de Calabozo (path/row 4/54; ID 237-859), procesé las 5 bandas de 16 bits y de 8 bits con el script bandear y, produje dos imágenes multiespectrales que cargué en MultiSpec en falso color infrarrojo (bandas 432). Los resultados están en la siguiente imagen (la de la derecha es la de 8 bits):

Los resultados son prácticamente indistinguibles y la imagen multiespectral de la derecha pesa 124 MB mientras que la otra pesa 248 MB. La diferencia es el doble.

Esta entrada fue publicada en GDAL/OGR, Linux, Teledetección. Guarda el enlace permanente.

6 respuestas a Escalamiento de imágenes georreferenciadas con gdal_translate (GDAL/OGR)

  1. Pingback: Cambio de formato de imágenes con gdal_translate (GDAL/OGR) |

  2. Pingback: dans-gdal-scripts: uso de gdal_contrast_stretch |

  3. Pingback: Articulo Indexado en la Blogosfera de Sysmaya

  4. salomon dijo:

    Gracias por este gran aporte, es posible convertir así imágenes de 8 bitas a 4 bits

  5. Javier dijo:

    Hola, necesito hacer un mosaico con imágenes que geoposicioné en QGis. Hay alguna herramienta? saludos y gracias

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s