Tengo una imagen de tamaño 1GB (.tif), con el ancho y alto 94000x71680. Me gustaría trocear esta imagen en 20000X20000 azulejos para poder procesarlos.
¿Cómo puedo hacerlo?
Tengo una imagen de tamaño 1GB (.tif), con el ancho y alto 94000x71680. Me gustaría trocear esta imagen en 20000X20000 azulejos para poder procesarlos.
¿Cómo puedo hacerlo?
Propongo dos soluciones: la primera usando QGIS, la segunda usando Python (GDAL).
En QGIS puedes crear un mosaico VRT.
Siga este procedimiento (vea la imagen de abajo):
Save As...
;Create VRT
opción;OK
botón.Por ejemplo, el uso de los parámetros en el cuadro de diálogo anterior en este raster de muestra (los parámetros que establezco son elegidos al azar):
generará 100 baldosas en la ruta especificada en el paso 4:
Al cargarlos en QGIS, tienen este aspecto:
Como bien dijo @bugmenot123 en los comentarios, el resultado se ve raro sólo 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 ).
En referencia al mismo ejemplo descrito anteriormente, puede utilizar 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)
Evidentemente, tienes que adaptar los valores a tu caso concreto.
Sólo un comentario rápido de que el ejemplo de cómo QGIS los renderiza se ve raro sólo porque el estilo se ajusta a la distribución de los valores por imagen . Los datos están perfectamente bien :)
Gracias, en primer lugar por su respuesta realmente útil, pero quiero lograr el mismo resultado usando python? Me puede ayudar en eso también Porque es más manual en lugar de programática así.
No te separes
Usted gdalbuildvrt Puedes crear baldosas virtuales que sólo utilizarán unos pocos bytes de tu disco. Entonces puedes usar la mayoría de los programas que tomarán tus vrt's como entrada para realizar tu procesamiento.
Como alternativa, prefiero buscar una herramienta que pueda trabajar con una imagen de 1Gb 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 envolver OTB para Python o ejecutarlo desde QGIS o desde líneas de comando.
Otra solución que utiliza GDAL es el gdal_retile.py herramienta:
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 más información, consulte: http://www.gdal.org/gdal_retile.html
Utilizando el Raster dividido puede dividir una trama en mosaicos basándose en algunos métodos de división, como el tamaño de cada baldosa o el número de baldosas .
Ver también Dividir un raster en ArcGIS
I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.
0 votos
Anup, github.com/mapbox/rasterio te daría un array(s) numpy de tus datos de entrada. Podrías dividirlos usando métodos numpy o scipy y guardar cada parte en un nuevo archivo fácilmente. ¿Calificaría esta solución? Si es así, tienes que decir cómo deben tratarse los "bits desiguales" (71680 no es limpiamente divisible por 20000).
0 votos
En QGIS, si tiene el plugin Processing instalado y activo, obtendrá elementos de menú adicionales en el menú Raster, uno de los cuales es Extracción. Este tiene "Clip Raster by Extent", que es una pantalla que le permite dibujar una caja alrededor de un área y guardar como un GeoTiff. Esto me permitió eliminar áreas no deseadas en tiffs enormes, y el tiempo de procesamiento se redujo significativamente.