Farbbalance und Veröffentlichung einer großen Menge hochauflösender Bilder in Geoserver

11

Ich habe eine große Anzahl von RapidEye-Bildern (+300 GB), die ich als Grundkarte für eine Online-Bewerbung verwenden möchte. Bisher habe ich es geschafft, sie als ImagePyramid in Geoserver zu verwenden. Befolgen Sie dazu die Schritte in einer Präsentation mit dem Titel "Geoserver auf Steroiden". Das Problem ist, dass ich keine korrekte Farbbalance erzielen konnte. Wenn ich also den gesamten Datensatz betrachte, sieht das Mosaik sehr schlecht aus, aber beim Vergrößern wird es besser (Bilder unten).

Mein Prozess ist:

  1. Konvertieren Sie alle Bilder mit gdal in 8 Bit, epsg 4326, kubische Interpolation
  2. Generieren Sie ein virtuelles gdal-Raster mit allen Bildern (gdalbuildvrt)
  3. Generieren Sie die Bildpyramide (gdal_retile mit Komprimierung und Geotiff-Bearbeitung) und veröffentlichen Sie sie auf dem Geoserver (mithilfe der Histogramm-Dehnung im Ebenenstil).

Irgendwelche Tipps, wie Sie den Prozess verbessern und eine bessere Farbbalance erzielen können?

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Daniel
quelle

Antworten:

6

Ich glaube ich habe es verstanden.

Ich habe während der Konvertierung in 8 Bit in jedem RapidEye-Bild eine mittlere Histogrammdehnung von + -2 Standardabweichung erzwungen.

Ich habe ein Python-Skript verwendet, um das Bild Min, Max, Average und SD zu identifizieren. Ich habe dann den Wert von Mittelwert - 2SD (oder Bild min, je nachdem, welcher Wert höher war) auf 2 und Mittelwert + 2SD (oder max) auf 254 gesetzt. Und um sicher zu gehen, wurde der ursprüngliche Wert von Null im Bild auf 1 und gesetzt 2 ^ 16 auf 255 gesetzt. NoData wurde auf 0 gesetzt.

Dies sind die Übertragungsfunktionsvektoren:

original image values = [0, mean-2SD, mean+2SD, 65536]
rescaled values = [1 2, 254, 255]

Unten finden Sie einige Screenshots. Die Probleme, die ich jetzt beheben muss, sind

  1. Entfernen Sie den schwarzen Rand um die imagePyramid
  2. Erhalten Sie ein besser aussehendes Bild, wenn Sie es vollständig zoomen. Es sieht jetzt aus wie ein alter Fernseher, der auf den falschen Kanal eingestellt ist

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Bearbeiten
Ich habe jetzt den Code auf GitHub platziert. Es ist schon eine Weile her, seit ich es benutzt habe. Der Code ist etwas chaotisch, ebenso das Repository. Sollte aber trotzdem funktionieren.
https://github.com/dvictori/rapideye_hist2sd

Daniel
quelle
Bravo, Sir. Sie erhalten 10 von 10 dafür. Könnten Sie für Ihr zweites Problem (das beim vollständigen Zoomen besser aussieht) einfach Bilder mit geringerer Körnung wie LandSat oder ASTER verwenden? Ich denke, die gröberen Bilder würden beim Verkleinern besser aussehen. ..als für Ihre erste Sorge, ich versuche immer noch, diese Nuss selbst zu knacken. Ich würde gerne eine umfassende Beschreibung sehen, wie Sie dies getan haben, einschließlich des Py-Skripts, wenn Sie bereit sind, es zu teilen. Gibt es eine Chance, Ihren Ansatz irgendwo zu präsentieren?
Elrobis
Ich hatte nicht vor, dies zu präsentieren oder einen Artikel zu schreiben. Aber jetzt wo du es erwähnt hast, wer weiß. Irgendwelche Vorschläge zu geeigneten Medien, um dies zu präsentieren? Das py-Skript kann von dropbox.com/s/1hfobfp9ymtku2n/rapideye_hist2sd.py heruntergeladen werden. Seien Sie jedoch gewarnt. Ich betrachte mich als beschissenen Programmierer und bin mir sicher, dass mein Programm viele Verbesserungen gebrauchen könnte.
Daniel
2
Ich habe den Download-Link aus dem obigen Kommentar geändert. Wenn Sie sich den von mir verwendeten Python-Code ansehen möchten, können Sie ihn gerne von goo.gl/ePEc7G
Daniel
Danke @ Daniel. Ich führe einen Blog, in dem ich Anleitungen für solche Sachen poste. Wenn ich auf etwas stoße, das nicht einfach ist und für das ich im Internet nicht viel Hilfe finden konnte, werde ich aus mehreren Gründen einen Blog-Beitrag verfassen. Zunächst gehe ich davon aus, dass ich die Aufgabe irgendwann wiederholen muss. Wenn ich also die Schritte in einem Beitrag zusammenfasse, kann ich sie später problemlos überprüfen. Zweitens denke ich, dass es immer eine Chance gibt, dass jemand da draußen etwas Ähnliches tun möchte, und er könnte von der Post profitieren. Was Sie hier gemacht haben, ist sehr blogwürdig, auch wenn es für eine Weile Ihr einziger Beitrag ist. :)
Elrobis
Dies ist eine erstaunliche Idee, und ich versuche, sie für eine 3-Band-Kamera mit kleinerem Frame von 8 Bit auf 8 Bit anzupassen, aber ich habe einige Probleme bei der Implementierung. Wie soll ich das Verzeichnis der Eingabebilder auf dieses Skript leiten? Woher werden sie gerufen? Ich denke, das muss alles über den Geoserver laufen, aber kann ich das herausbrechen und es eigenständig ausführen?
Wes
4

Daniel, sind diese Bilder aus sehr unterschiedlichen Jahreszeiten? Oder Tageszeiten? Wenn es sich um verschiedene Jahreszeiten handelt, kann es ziemlich schwierig sein, eine gute Farbbalance zu erzielen. Wenn es sich jedoch um unterschiedliche Tageszeiten handelt, kann eine Korrektur des Sonnenwinkels spürbar hilfreich sein. Eine gute Näherung erster Ordnung für den Sonnenwinkel besteht darin, die Pixel mit 1,0 / cos (angle_of_sun_off_directly_above) zu multiplizieren. Also keine Anpassung, wenn die Sonne direkt über Ihnen steht und auf ... bis unendlich ansteigt, wenn Sie sich der Morgendämmerung nähern.

Ich habe in der Vergangenheit schlechte Ergebnisse bei der Verwendung von Histogramm-Übereinstimmungen zwischen Szenen in überlappenden Regionen erzielt , um große Mosaike zusammenzusetzen, da Sie seltsame Drifteffekte über das Mosaik erhalten. Ich denke, ein nützlicherer Ansatz könnte eine Art Histogramm sein, das mit einem Grundfarben-Zielbild übereinstimmt (möglicherweise ein attraktives Landsat-Mosaik des Gebiets). Ich bin auch daran interessiert, wie ich dieses Problem lösen kann. Charlie Loyd von MapBox könnte auch Gedanken haben.

Frank Warmerdam
quelle
Frank, die Bilder stammen größtenteils aus der Trockenzeit, wenn die Wolkendecke niedrig ist. Aber es gibt Bilder aus verschiedenen Monaten, wie August, November usw. Ich versuche jetzt, die Bilder in kleine Blöcke aufzuteilen und für jeden ein Mosaik zu erstellen. Lassen Sie Sie wissen, wie es ausgeht. Ich habe auch ein Python-Skript geschrieben, um eine CDF-Übereinstimmung zu erstellen, und es funktioniert gut (nicht großartig), wenn ich eine kleine Anzahl von Bildern habe (20), aber wenn ich zu einer großen Anzahl komme, muss eines der Bilder Werte außerhalb meiner haben Referenzbildbereich und dann funktionieren die Dinge nicht mehr. Möglicherweise müssen Sie sich einen besseren Weg ausdenken, um das Referenzbild auszuwählen.
Daniel
0

Ich habe manchmal OSSIM Image Linker mit Histogramm-Matching verwendet, um farbausgeglichene Mosaike zu erstellen. Das Tutorial zum Image-Linker enthält ein Beispiel: http://download.osgeo.org/ossim/docs/pdfs/ImageLinker_Tutorial.pdf Der Image-Linker wird jedoch nicht aktiv gepflegt und ich weiß nicht, ob er nicht mehr funktioniert. Ossim Geocell ist das aktuelle Programm, aber es gibt nicht viele Benutzerdokumente dazu. Ich erinnere mich, dass ich, um ein gutes Ergebnis zu erzielen, meine Landsat-Szenen zuerst einzeln mit OpenEV vorverarbeitet habe, indem ich eine LUT-Dehnung angewendet habe, damit die Bilder optisch ungefähr das gleiche Aussehen haben. Dann war es für OSSIM einfacher, das endgültige Matching durchzuführen. Das Endprodukt sah ungefähr so ​​gut aus wie das, das ich mit dem ER Mapper-Mosaik-Dienstprogramm erstellt habe.

user30184
quelle