Ich habe ein Bild der Größe 1GB (.tif) mit der Breite und Höhe 94000x71680. Ich möchte dieses Bild in 20000 x 20000 Kacheln aufteilen, damit ich sie verarbeiten kann.
Wie kann ich das machen?
Ich habe ein Bild der Größe 1GB (.tif) mit der Breite und Höhe 94000x71680. Ich möchte dieses Bild in 20000 x 20000 Kacheln aufteilen, damit ich sie verarbeiten kann.
Wie kann ich das machen?
Antworten:
Ich schlage zwei Lösungen vor: die erste mit QGIS, die zweite mit Python (GDAL).
In QGIS können Sie ein VRT-Mosaik erstellen.
Bitte befolgen Sie diese Prozedur (siehe Bild unten):
Save As...
;Create VRT
Option.OK
Taste.Zum Beispiel die Verwendung der Parameter im obigen Dialogfeld für dieses Beispiel-Raster (die von mir festgelegten Parameter werden nach dem Zufallsprinzip ausgewählt):
generiert 100 Kacheln in dem in Schritt 4 angegebenen Pfad:
Sie werden in QGIS geladen und sehen folgendermaßen aus:
Wie @ bugmenot123 in den Kommentaren richtig sagte, sieht das Ergebnis seltsam aus, nur weil sich der Stil jedes Bildes an die Verteilung der Werte pro Bild anpasst (aber die Daten sind vollkommen in Ordnung).
Eine andere Möglichkeit, das gleiche Ergebnis zu erzielen, ist die Verwendung von GDAL ( gdal_translate ).
Mit Bezug auf dasselbe oben beschriebene Beispiel können Sie dieses Skript verwenden:
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)
Sie müssen die Werte natürlich an Ihren speziellen Fall anpassen.
Nicht spalten
Mit gdalbuildvrt können Sie virtuelle Kacheln erstellen, die nur wenige Bytes auf Ihrer Festplatte belegen . Dann können Sie die meisten Softwareprogramme verwenden, die Ihre vrts als Eingabe verwenden, um Ihre Verarbeitung durchzuführen.
Alternativ würde ich eher nach einem Tool suchen, das mit einem 1-GB-Bild arbeiten kann, als ein Bild zu teilen und zusammenzuführen. Beispielsweise verfügt OTB über die meisten Funktionen für die standardmäßige (und manchmal erweiterte) Bildverarbeitung mit großen Bildern. Sie können OTB für Python umbrechen oder es über QGIS oder über Befehlszeilen ausführen.
Mit dem Werkzeug Raster teilen können Sie ein Raster auf der Grundlage einiger Aufteilungsmethoden in Kacheln aufteilen, einschließlich der Größe der einzelnen Kacheln oder der Anzahl der Kacheln .
Siehe auch Raster in ArcGIS teilen
Eine andere Lösung, die GDAL verwendet, ist das Tool 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
Weitere Informationen finden Sie unter: http://www.gdal.org/gdal_retile.html