Tengo una imagen de tamaño 1GB (.tif), con el ancho y la altura 94000x71680. Me gustaría fragmentar esta imagen en mosaicos 20000X20000 para poder procesarlos.
¿Cómo puedo hacer esto?
Tengo una imagen de tamaño 1GB (.tif), con el ancho y la altura 94000x71680. Me gustaría fragmentar esta imagen en mosaicos 20000X20000 para poder procesarlos.
¿Cómo puedo hacer esto?
Respuestas:
Propongo dos soluciones: la primera con QGIS, la segunda con Python (GDAL).
En QGIS puede crear un mosaico VRT.
Siga este procedimiento (vea la imagen a continuación):
Save As...
;Create VRT
opción;OK
botónPor ejemplo, el uso de los parámetros en el cuadro de diálogo anterior en este ráster de muestra (los parámetros que configuro se eligen al azar):
generará 100 mosaicos en la ruta especificada en el paso 4:
Al cargarlos en QGIS, se ven así:
Como @ bugmenot123 dijo correctamente en los comentarios, el resultado parece extraño solo porque el estilo de cada imagen se ajusta a la distribución de valores por imagen (pero los datos están perfectamente bien).
Otra forma de obtener el mismo resultado es el uso de GDAL ( gdal_translate ).
Con referencia al mismo ejemplo descrito anteriormente, puede usar este script:
import os, gdal
in_path = 'C:/Users/Marco/Desktop/'
input_filename = 'dtm_5.tif'
out_path = 'C:/Users/Marco/Desktop/output_folder/'
output_filename = 'tile_'
tile_size_x = 50
tile_size_y = 70
ds = gdal.Open(in_path + input_filename)
band = ds.GetRasterBand(1)
xsize = band.XSize
ysize = band.YSize
for i in range(0, xsize, tile_size_x):
for j in range(0, ysize, tile_size_y):
com_string = "gdal_translate -of GTIFF -srcwin " + str(i)+ ", " + str(j) + ", " + str(tile_size_x) + ", " + str(tile_size_y) + " " + str(in_path) + str(input_filename) + " " + str(out_path) + str(output_filename) + str(i) + "_" + str(j) + ".tif"
os.system(com_string)
Obviamente, necesita adaptar los valores a su caso específico.
No dividir
Usted gdalbuildvrt , puede crear mosaicos virtuales que solo usarán unos pocos bytes en su disco. Luego puede usar la mayoría de los softwares que tomarán sus vrt como entrada para realizar su procesamiento.
Alternativamente, prefiero buscar una herramienta que pueda funcionar con una imagen de 1 Gb que dividir y fusionar una imagen. Por ejemplo, OTB tiene la mayoría de las capacidades para el procesamiento de imágenes estándar (y a veces avanzado) con imágenes grandes. Puede ajustar OTB para Python o ejecutarlo desde QGIS o desde líneas de comando.
Con la herramienta Dividir ráster , puede dividir un ráster en mosaicos según algunos métodos de división, incluido el tamaño de cada mosaico o el número de mosaicos .
Consulte también División de ráster en ArcGIS
Otra solución que usa GDAL es la herramienta gdal_retile.py :
mkdir image_tiles
gdal_retile.py -v -r bilinear -levels 1 -ps 20000 20000 -co "TILED=YES" -co "COMPRESS=JPEG" -targetDir image_tiles big_input_image.tif
Para obtener más información, consulte: http://www.gdal.org/gdal_retile.html