Warum ist das Ergebnis der Zusammenführung mehrerer Raster so groß? [geschlossen]

10

Ich versuche 14 Geotiffs wie folgt zusammenzuführen:

Geben Sie hier die Bildbeschreibung ein

Jeder Geotiff ist ungefähr 50 MB groß. Ich brauche einen Geotiff am Ausgang

Mein Workflow:

gdalbuildvrt -input_file_list list.txt test.vrt 

(wo meine Liste den Namen der Tifs enthält)

Dann :

gdal_translate -of Gtiff test.vrt test.tif
Input file size is 79841, 59955

Es funktioniert, aber das Ergebnis ist ein Geotiff von 13,3 GB! Für 14 Dateien mit jeweils 50 MB habe ich einen Geotiff von 700 MB und nicht von 13 GB versucht.

Ich weiß, dass gdal nicht standardmäßig komprimiert, deshalb habe ich diesen Befehl ausprobiert:

gdal_translate -of Gtiff -co COMPRESS=JPEG test.vrt test_compressed.tif

Die "Zusammenführung" der Datei ist jedoch für die JPEG-Komprimierung zu groß:

Input file size is 79841, 59955
0ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: An error occured while writing a dirty block
...

Also habe ich einen anderen Workflow ausprobiert und alle meine TIFs in JPEG (jeweils 14 MB) konvertiert, eine vrt-Datei erstellt und mit LZW-Komprimierung übersetzt. Der Ausgangs-Geotiff beträgt jedoch etwa 5 GB.

Können Sie mir sagen, was die beste Vorgehensweise ist und ob es möglich ist, einen Geotiff von 14 * 50 MB zu erhalten?

Ich habe es nicht ausprobiert, aber ich habe darüber nachgedacht, diese TIFs in Photoshop zusammenzuführen und dann mit den Koordinaten oben links / unten rechts neu zu georeferenzieren. Mit diesem Workflow denke ich, dass ich 14 * 50 MB haben werde, aber ich bin mir nicht sicher. Und ich möchte gdal Best Practices lernen, also habe ich es im Moment nicht ausprobiert


Kommen zu Bissen: Wenn die Eingabe tif mit 8 Bit und der Export standardmäßig 32 Bit ist, werden Sie ernsthafte Probleme bekommen. Stellen Sie also sicher, dass Sie Ihre Byte-Definition so lassen, wie sie ist. Und denken Sie daran: Das volle tif wird prob. habe 20x 50mb als tiff ist immer rechteckig

Wenn ich verstehe, muss die Nummer, auf die ich in diesem Screenshot grün gezeigt habe, links und rechts gleich sein?

Bits

Ihr Ausgabebild hat mehr Pixel als die Summe Ihrer Eingabebilder, dies erklärt jedoch nicht den großen Unterschied. Ich schlage vor, dass Sie sich die Eigenschaften Ihrer Bilder basierend auf gdalinfo ansehen, um festzustellen, welche Komprimierung verwendet wird, und um zu überprüfen, ob die Ausmaße korrekt sind.

Die 14 Tifs von 50 Mb waren ursprünglich 14 Tifs von 700 Mb, die ich mit gdal_translate mit -co COMPRESS = JPEG verarbeitet habe. Ich habe das Raster komprimiert, um die Anzahl der MB zu verringern, aber vielleicht war es keine gute Idee?

Dieser Screenshot stellt die 2 gdal-Informationen desselben Geotiffs (01.tif) dar. Links im Screenshot befindet sich die gdalinfo des nicht komprimierten Gtiff von 700 MB. Beenden Sie rechts den gleichen Gtiff mit COMPRESS = JPEG 50 Mb, mit dem Diff in grün:

gdalinfo der 01.tif-Datei nicht komprimieren und komprimieren

Meiner Meinung nach sind die Ausmaße korrekt, da sie in qgis mit anderen Datenquellen und Satellitenbildern übereinstimmen.

* Unter der Annahme, dass Ihre Eingabebilder dieselbe Größe haben, ergeben sich 20000 * 12000 Pixel pro Eingabebild, was für ein Bild von 50 MB groß ist. Möglicherweise überschreiten Sie beim Erstellen des Mosaiks die Ausdehnung Ihres Koordinatensystems. *

Ich bin mir nicht sicher, was Sie unter "Überqueren des Ausmaßes" verstehen. Aber ich habe versucht, mein 5 Gb LZW in QGIS zu öffnen, und das Ausmaß ist gut, weil es mit anderen Datenquellen übereinstimmt.

Ihre Antwort lässt mich erkennen, dass die Gtiff nicht die gleiche Größe haben. Glauben Sie, dass dies die Ursache für die Vergrößerung beim Zusammenführen sein könnte? Weil gdal Dateien gleicher Größe bevorzugt. Ich habe auf jedem Gtiff eine gdalinfo erstellt, um seine Größe zu ermitteln. Es gibt einen sehr kleinen Unterschied zwischen der Größe der Gtiffs:

02.tif Size is 19956, 11981
03.tif Size is 19959, 11993
04.tif Size is 19961, 11992
05.tif Size is 19958, 11993
06.tif Size is 19958, 11990
07.tif Size is 19956, 11984
08.tif Size is 19956, 11993
09.tif Size is 19958, 11993
10.tif Size is 19958, 11989
11.tif Size is 19958, 11985
12.tif Size is 19958, 11993
13.tif Size is 19959, 11993
14.tif Size is 19960, 11994

Dann sollten Sie sich die Pixeltiefe Ihrer Bilder ansehen: Wenn Ihre Eingabe in Bytes erfolgte,> sollten Sie Bytes behalten. gdal_translate -of Gtiff -ot Byte -co COMPRESS = LZW test.vrt test.tif

Ich habe diesen Befehl ausprobiert, aber der GDAL sagte mir, dass die Größe des Tiffs überschritten wurde.

Input file size is 79841, 59955
0...10...20...30...40...50..ERROR 1: TIFFAppendToStrip:Maximum TIFF file size exceeded. Use BIGTIFF=YES creation option.
ERROR 1: WriteEncodedTile/Strip() failed.

Aber wenn ich ein großes TIFF erstellen muss, löst es mein Problem nicht, da es mehr als 4 GB beträgt. Ist die Pixeltiefe in meinem Fall wichtig? (HD-Foto von Karten, dann georeferenziert, nicht DEM)

Anmerkung 1: Das Konvertieren Ihrer Bilder in JPEG vor dem Erstellen eines VRT hilft nicht und Sie können Daten verlieren.

Es ist nicht ernst, wenn ich ein bisschen Information verliere. Ich ziehe es natürlich vor, es nicht zu verlieren, aber wenn ich muss, ist es kein Problem. Ich war überzeugt, dass die Ausgabe leichter wäre, wenn ich mit JPEG arbeiten würde, aber als Fazit ist es nicht wahr, wenn die Ausgabe Gtiff ist. Das ist also keine gute Lösung. Ich gebe diese Lösung auf.

> Bemerkung 2: Die Verwendung eines vrt ist hilfreich: Sind Sie sicher, dass Sie GTiff benötigen?

Ja, ich benötige einen Gtiff, da ich ihn in eine mobile Anwendung importieren muss, für deren Funktion Geotiff-Eingaben erforderlich sind (ich denke, die App kann auch geografische PDF-Eingaben verarbeiten, aber ich arbeite nie damit und möchte mein Problem damit verstehen gdal, weil es nicht das erste mal ist, dass ich es habe).


Ich habe versucht, -co gekachelt = ja -co bigtiff = ja -co komprimieren = jpeg -co photometrisch = ycbcr und ich habe versucht -co gekachelt = ja -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512

Diese 2 Befehle funktionieren gut, ich habe eine Größe von ~ 700 Mb. Es ist genau das, was ich erwartet hatte.

Jetzt habe ich ein weiteres Problem: Es kann von QGIS nicht schnell geöffnet werden. Ich muss 15 Minuten warten (aber ich beende, bevor QGIS das TIF erfolgreich öffnet). Ich weiß nicht warum. Und in meiner Android-App funktioniert es nicht (möglicherweise wegen "gekachelt = ja"). Ich muss selbst ein Dokument lesen.

Grimdaemon
quelle
Verwenden Sie -co gekachelt = ja -co bigtiff = ja -co komprimieren = jpeg -co photometrisch = ycbcr
user30184

Antworten:

2

Ihr Ausgabebild hat mehr Pixel als die Summe Ihrer Eingabebilder, dies erklärt jedoch nicht den großen Unterschied. Ich schlage vor, dass Sie sich die Eigenschaften Ihrer Bilder basierend auf gdalinfo ansehen, um festzustellen, welche Komprimierung verwendet wird, und um zu überprüfen, ob die Ausmaße korrekt sind. (Unter der Annahme, dass Ihre Eingabebilder dieselbe Größe haben, ergeben sich 20000 * 12000 Pixel pro Eingabebild, was für ein Bild von 50 MB groß ist. Möglicherweise überschreiten Sie beim Erstellen des Mosaiks die Ausdehnung Ihres Koordinatensystems.) Dann sollten Sie dies tun Schauen Sie sich die Pixeltiefe Ihrer Bilder an: Wenn Ihre Eingabe in Bytes erfolgte, sollten Sie Bytes behalten.

gdal_translate -of Gtiff -ot Byte -co COMPRESS=LZW test.vrt test.tif 

Anmerkung 1: Das Konvertieren Ihrer Bilder in JPEG vor dem Erstellen eines VRT hilft nicht (es wird vor dem nächsten Schritt dekomprimiert) und Sie verlieren möglicherweise Daten.

Bemerkung 2: Die Verwendung eines vrt ist hilfreich: Sind Sie sicher, dass Sie GTiff benötigen?

BEARBEITEN: Es gibt kein Wunder bei der Größe Ihrer Bilder, aber Sie sollten ein gekacheltes TIF als Ausgabe verwenden, damit Sie die JPEG-Komprimierung mit Ihren großen Datenmengen verwenden können (-co TILED = yes -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512) ). Wenn es zu groß bleibt, besteht die einzige Lösung darin, gdalwarp zu verwenden, um ein Resample mit einer niedrigeren Auflösung durchzuführen.

Radouxju
quelle
Kommen zu Bissen: Wenn die Eingabe tif mit 8 Bit und der Export standardmäßig 32 Bit ist, werden Sie ernsthafte Probleme bekommen. Stellen Sie also sicher, dass Sie Ihre Byte-Definition so lassen, wie sie ist. Und denken Sie daran: Das volle tif wird prob. habe 20x 50mb als tiff ist immer rechteckig.
Riccardo
Woher hast du 20000 x 12000? Die in der Frage gezeigte Ausgabe würde vorschlagen, dass das Eingabebild 79841 x 59955 ist.
Evil Genius
79841, 59955 ist die Größe des Eingangs vrt. Da es jedoch 5 Zeilen und 4 Spalten gibt, habe ich ~ 80000 durch 4 und ~ 60000 durch 5 geteilt. Wie gesagt, dies setzt voraus, dass die Bilder dieselbe Größe haben und wie in der Abbildung positioniert sind.
Radouxju
Ich habe meine ursprüngliche Frage bearbeitet und hoffe, dass ich so weitermachen muss.
Grimdaemon