.Tif-Bild in mehrere Kacheln aufteilen? [geschlossen]

13

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?

Anup Panwar
quelle
Anup, github.com/mapbox/rasterio würde Ihnen eine Reihe Ihrer Eingabedaten geben. Sie können dies mit den Methoden numpy oder scipy aufteilen und jeden Teil einfach in einer neuen Datei speichern. Wäre eine solche Lösung geeignet? In diesem Fall müssen Sie angeben, wie die "ungeraden Bits" (71680 ist nicht sauber durch 20000 teilbar) behandelt werden sollen.
Bugmenot123

Antworten:

23

Ich schlage zwei Lösungen vor: die erste mit QGIS, die zweite mit Python (GDAL).


Lösung mit QGIS

In QGIS können Sie ein VRT-Mosaik erstellen.

Bitte befolgen Sie diese Prozedur (siehe Bild unten):

  1. Laden Sie das Raster im Ebenenbedienfeld .
  2. Klicken Sie mit der rechten Maustaste darauf und wählen Sie Save As...;
  3. Aktivieren Sie die Create VRTOption.
  4. Wählen Sie den Ordner, in dem Ihre Ausgaben gespeichert werden sollen.
  5. Legen Sie die Ausdehnung fest (wenn Sie mit dem gesamten Raster arbeiten möchten, ändern Sie nichts).
  6. Wählen Sie, ob Sie die aktuelle Auflösung verwenden möchten (ich empfehle, die Standardauflösung beizubehalten).
  7. Legen Sie die maximale Anzahl von Spalten und Zeilen fest (in Ihrem Fall sollten es 20000 Spalten und 2000 Zeilen sein).
  8. Drücken Sie die OKTaste.

Bildbeschreibung hier eingeben

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):

Bildbeschreibung hier eingeben

generiert 100 Kacheln in dem in Schritt 4 angegebenen Pfad:

Bildbeschreibung hier eingeben

Sie werden in QGIS geladen und sehen folgendermaßen aus:

Bildbeschreibung hier eingeben

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).


Lösung mit Python (GDAL)

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.

mgri
quelle
2
Nur ein kurzer Kommentar, dass das Beispiel, wie QGIS sie rendert, seltsam aussieht, nur weil sich der Stil an die Verteilung der Werte pro Bild anpasst . Die Daten sind völlig in Ordnung :)
Bugmenot123
Danke, vor allem für deine wirklich hilfreiche Antwort. Aber ich möchte dasselbe Ergebnis mit Python erzielen? Kannst du mir da auch weiterhelfen? Weil es eher manuell als programmatisch ist.
Anup Panwar
@ bugmenot123 Danke, ich bearbeite die Antwort mit deinem nützlichen Kommentar.
16.
@Anup Panwar, wenn ich mit PyQGIS eine Lösung finde, bearbeite ich meine Antwort! =)
16.
@ HowToInQGIS Danke, für alles andere, wenn Sie einen Weg in Python
suchen
5

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.

radouxju
quelle
2

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

Dylansq
quelle
2

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

Saleika
quelle