Ho un'immagine di dimensioni 1 GB (.tif), con larghezza e altezza 94000x71680. Vorrei suddividere questa immagine in riquadri 20000X20000 in modo da poterli elaborare.
Come posso fare questo?
Ho un'immagine di dimensioni 1 GB (.tif), con larghezza e altezza 94000x71680. Vorrei suddividere questa immagine in riquadri 20000X20000 in modo da poterli elaborare.
Come posso fare questo?
Risposte:
Propongo due soluzioni: la prima con QGIS, la seconda con Python (GDAL).
In QGIS è possibile creare un mosaico VRT.
Si prega di seguire questa procedura (vedere l'immagine sotto):
Save As...
;Create VRT
opzione;OK
pulsante.Ad esempio, l'utilizzo dei parametri nella finestra di dialogo sopra su questo esempio di raster (i parametri che ho impostato sono scelti in modo casuale):
genererà 100 tessere nel percorso specificato al passaggio 4:
Caricandoli in QGIS, sembrano così:
Come @ bugmenot123 ha detto correttamente nei commenti, il risultato sembra strano solo perché lo stile di ogni immagine si adatta alla distribuzione dei valori per immagine (ma i dati sono perfettamente a posto).
Un altro modo per ottenere lo stesso risultato è l'uso di GDAL ( gdal_translate ).
Con riferimento allo stesso esempio sopra descritto, è possibile utilizzare questo 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)
Ovviamente devi adattare i valori al tuo caso specifico.
Non dividere
È gdalbuildvrt , è possibile creare tessere virtuali che utilizzeranno solo pochi byte sul disco. Quindi è possibile utilizzare la maggior parte dei software che prenderanno il tuo VRT come input per eseguire l'elaborazione.
In alternativa, preferirei cercare uno strumento in grado di lavorare con un'immagine da 1 GB anziché dividere e unire un'immagine. Ad esempio, OTB ha la maggior parte delle funzionalità per l'elaborazione di immagini standard (e talvolta avanzate) con immagini di grandi dimensioni. Puoi avvolgere OTB per Python o eseguirlo da QGIS o dalle righe di comando.
Utilizzando lo strumento Dividi raster , è possibile dividere un raster in riquadri in base ad alcuni metodi di divisione tra cui la dimensione di ogni riquadro o il numero di riquadri .
Vedi anche Divisione raster in ArcGIS
Un'altra soluzione che utilizza GDAL è lo strumento 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
Per ulteriori informazioni, consultare: http://www.gdal.org/gdal_retile.html