Gibt es eine Möglichkeit zu überprüfen, ob zwei bestimmte Rasterebenen identischen Inhalt haben ?
Wir haben ein Problem mit unserem gemeinsam genutzten Unternehmensspeichervolumen: Es ist jetzt so groß, dass die Durchführung einer vollständigen Sicherung über 3 Tage dauert. Voruntersuchungen haben ergeben, dass On / Off-Raster einer der größten platzraubenden Schuldigen sind, die wirklich als 1-Bit-Layer mit CCITT-Komprimierung gespeichert werden sollten.
Dieses Beispielbild ist derzeit 2 Bit (also 3 mögliche Werte) und wird als LZW-komprimiertes TIFF mit 11 MB im Dateisystem gespeichert. Nach der Konvertierung in 1 Bit (also 2 mögliche Werte) und der Anwendung der CCITT Group 4-Komprimierung wird diese auf 1,3 MB reduziert, was fast einer Größenordnung der Einsparungen entspricht.
(Dies ist eigentlich ein sehr gut erzogener Bürger, es gibt andere, die als 32-Bit-Float gespeichert sind!)
Das sind fantastische Neuigkeiten! Es gibt jedoch fast 7.000 Bilder, um dies auch anzuwenden. Es wäre einfach, ein Skript zu schreiben, um sie zu komprimieren:
for old_img in [list of images]:
convert_to_1bit_and_compress(old_img)
remove(old_img)
replace_with_new(old_img, new_img)
... aber es fehlt ein wichtiger Test: Ist die neu komprimierte Version inhaltsidentisch?
if raster_diff(old_img, new_img) == "Identical":
remove(old_img)
rename(new_img, old_img)
Gibt es ein Werkzeug oder eine Methode, mit der automatisch nachgewiesen werden kann, dass der Inhalt von Bild-A mit dem Inhalt von Bild-B identisch ist?
Ich habe Zugriff auf ArcGIS 10.2 und QGIS, bin aber auch für fast alles andere offen, als die Notwendigkeit zu vermeiden, alle diese Bilder manuell zu überprüfen, um die Richtigkeit vor dem Überschreiben sicherzustellen. Es würde fälschlicherweise convert schrecklich sein und ein Bild überschreiben , dass wirklich haben mehr haben als Ein / Aus - Werte drin. Die meisten kosten Tausende von Dollar, um sie zu sammeln und zu generieren.
Update: Die größten Straftäter sind 32-Bit-Floats, die bis zu 100.000 Pixel pro Seite reichen, also ~ 30 GB unkomprimiert.
NoData
Handhabung bleibt im Gespräch.
len(numpy.unique(yourraster)) == 2
, wissen Sie, dass es zwei eindeutige Werte hat, und Sie können dies sicher tun.
numpy.unique
wird rechenintensiver (sowohl zeitlich als auch räumlich) als die meisten anderen Methoden, um zu überprüfen, ob der Unterschied eine Konstante ist. Bei einem Unterschied zwischen zwei sehr großen Gleitkomma-Rastern, die viele Unterschiede aufweisen (z. B. beim Vergleich eines Originals mit einer verlustbehafteten komprimierten Version), würde es wahrscheinlich für immer festsitzen oder vollständig versagen.
gdalcompare.py
zeigte sich
raster_diff(old_img, new_img) == "Identical"
darin, zu überprüfen, ob das zonale Maximum des Absolutwerts der Differenz gleich 0 ist, wobei die Zone über die gesamte Gitterausdehnung genommen wird. Ist dies die Art von Lösung, nach der Sie suchen? (Wenn ja, müsste es verfeinert werden, um zu überprüfen, ob alle NoData-Werte auch konsistent sind.)