¡Hola a todos! Hoy vamos a hablar sobre el desarrollo de un programa para el análisis de imágenes satelitales utilizando Python y la librería GDAL. Este trabajo requiere un conocimiento básico en programación, por lo que se recomienda tener al menos una noción sobre Python y su sintaxis.
¿Qué es GDAL?
Para comenzar, es importante conocer qué es GDAL. GDAL (Geospatial Data Abstraction Library) es una librería de que facilita la manipulación de datos geoespaciales. Es utilizada en muchas aplicaciones, ya sea para procesamiento, análisis o visualización de imágenes provenientes de diferentes fuentes, como un sistema de información geográfica o el sensor de una nave espacial. Con GDAL, se pueden abrir y leer imágenes en diferentes formatos, como tiff, gif, jpeg, entre otros.
Preparación del ambiente de trabajo
Para poder utilizar GDAL en nuestro programa de Python, primero debemos tener instalada la librería. Lo mejor es instalarlo desde la línea de comandos, ya que se actualizará automáticamente a su última versión disponible. Ejecutamos los siguientes comandos en la terminal:
sudo apt update
sudo apt install gdal-bin python3-gdal
Así, ya tendremos disponible el módulo gdal
en nuestro proyecto.
Leer una imagen con GDAL
Con gdal.Open()
podemos cargar una imagen. Para esto, debemos proveer la dirección de la imagen en el sistema de archivos.
from osgeo import gdal
def read_image(filename):
data = gdal.Open(filename)
return data
Obtener información sobre la imagen
Con la funciónGetMetadata()
podemos obtener información sobre la imagen, por ejemplo, las coordenadas geográficas o la fecha de toma de la imagen.
def get_metadata(filename):
data = read_image(filename)
metadata = data.GetMetadata()
for key, value in metadata.items():
print(key + ": " + value)
Ejemplo:
get_metadata("ruta/a/la/imágen.tif")
Esto nos devolverá como salida información sobre la imagen.
Transformar la imagen
Con la función ReadAsArray()
podemos obtener una representación de la imagen en forma de un array numérico bidimensional.
def transform_image(filename):
data = read_image(filename)
band = data.GetRasterBand(1)
array = band.ReadAsArray()
return array
Ejemplo:
transform_image("ruta/a/la/imágen.tif")
Esto nos devolverá como salida una matriz (numpy array) que representa la imagen.
Recortar una imagen
Una operación común es la de recortar una porción de una imagen que nos interese. Para esto, debemos definir las coordenadas de la parte que queremos mantener. En el siguiente ejemplo, recortaremos una imagen en su cuadrante superior derecho:
def crop_image(image, width, height):
x_origin = int(image.shape[0] / 2) - int(width / 2)
y_origin = int(image.shape[1] / 2) - int(height / 2)
cropped_image = image[x_origin:x_origin + width, y_origin:y_origin + height]
return cropped_image
Ejemplo:
image = transform_image("ruta/a/la/imágen.tif")
crop_image(image, 500, 500)
Esto nos devolverá como salida una matriz (numpy array) que representa la imagen recortada.
Visualizar la imagen
Podemos visualizar una imagen con ayuda de la librería matplotlib de Python. Si no tienes instalada la librería, ejecuta desde la línea de comandos pip install matplotlib
.
import matplotlib.pyplot as plt
def plot_image(image):
plt.imshow(image, cmap='gray')
plt.show()
Ejemplo:
image = transform_image("ruta/a/la/imágen.tif")
plot_image(image)
¡Y eso es todo! Con estas funciones básicas, podemos comenzar a trabajar con imágenes satelitales, procesarlas y visualizarlas. Ya con esto, podrás comenzar a desarrollar aplicaciones más complejas. Si deseas profundizar en este tema, te dejamos algunos enlaces útiles:
¡Espero que este tutorial te haya sido de utilidad!