Estoy procesando una gran cantidad de datos del Landsat. Las escenas de Landsat se envían como una colección de tiffs, un archivo para cada banda espectral, además de un montón de máscaras. Necesito apilar algunas de las bandas en un solo tiff para su posterior procesamiento. Puedo hacer esto fácilmente en varios programas, pero me gustaría automatizar el proceso utilizando GDAL en python. Eventualmente necesitaré automatizar el apilamiento de cientos o miles de imágenes, por lo que la eficiencia será importante.
He escrito un script que es simple y perfectamente funcional pero se siente extremadamente hacky- abro los tiffs deseados, los convierto en arrays de numpy, apilo los arrays, y guardo el array apilado en un nuevo geotiff con metadatos tomados de la entrada. Aquí está una versión simplificada del código:
from osgeo import gdal, gdal_array
import numpy as np
b1 = gdal.Open("LT50250232011160PAC01_sr_band1.tif")
b2 = gdal.Open("LT50250232011160PAC01_sr_band2.tif")
array1 = b1.ReadAsArray()
array2 = b2.ReadAsArray()
stacked = np.array([array1,array2])
gdal_array.SaveArray(stacked.astype("int"), "b12_stacked.tif", "GTiff", gdal.Open("LT50250232011160PAC01_sr_band1.tif"))
Si es posible, me gustaría evitar la conversión de los datos a arrays numpy, y simplemente apilar los objetos gdal.Dataset (b1 y b2). Esto haría el código más limpio y presumiblemente más eficiente. Parece que debería ser sencillo de hacer, pero no he podido encontrar ninguna información sobre cómo hacerlo.
Los enfoques alternativos que he encontrado en la investigación sería utilizar gdal_merge.py o vrts (como se sugiere aquí ). Ninguno de los dos me parece ideal; gdal_merge está diseñado para tareas mucho más complicadas que las mías y presumiblemente implica mucha sobrecarga, mientras que los vrts sólo se pueden utilizar en la línea de comandos. Sin embargo, si el enfoque que he esbozado más arriba no es factible, ¿podría uno de estos aprestos ser más eficiente/pitónico que el hack que ya he escrito?
Edición: mi código debe ejecutarse en un sistema Windows.