Balans kolorów i publikuj w geoserver dużą liczbę zdjęć w wysokiej rozdzielczości

11

Mam dużą liczbę obrazów RapidEye (+300 Gb), które chcę wykorzystać jako mapę bazową aplikacji online. Do tej pory udało mi się służyć im jako ImagePyramid w geoserver, wykonując kroki przedstawione w prezentacji o nazwie „Geoserver na sterydach”. Problem polega na tym, że nie byłem w stanie zrobić właściwego balansu kolorów, więc patrząc na cały zestaw danych, mozaika wygląda bardzo słabo, ale kiedy powiększam, robi się lepiej (zdjęcia poniżej).

Mój proces to:

  1. Konwertuj wszystkie obrazy na 8-bitowe, epsg 4326, interpolacja sześcienna za pomocą gdal
  2. Wygeneruj wirtualny raster gdal ze wszystkimi obrazami (gdalbuildvrt)
  3. Wygeneruj piramidę obrazu (gdal_retile z kompresją i uprawami geotiff) i opublikuj na geoserver (używając histogramu w stylu warstwy)

Wszelkie wskazówki, jak poprawić proces i uzyskać lepszy balans kolorów?

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Daniel
źródło

Odpowiedzi:

6

Wierzę, że to rozumiem.

Wymusiłem średni odcinek histogramu odchylenia standardowego +2 na każdym obrazie RapidEye podczas konwersji na 8bit.

Użyłem skryptu python do identyfikacji obrazu min, maks, średniej i SD. Następnie ustawiłem wartość średniej - 2SD (lub obrazu min, w zależności od tego, która wartość była wyższa) na 2 i średniej + 2SD (lub maks.) Na 254. I dla bezpieczeństwa, pierwotna wartość zero na obrazie została ustawiona na 1 i 2 ^ 16 ustawiono na 255. NoData ustawiono na 0.

Oto wektory funkcji przenoszenia:

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

Poniżej kilka zrzutów ekranu. Problemy, które muszę teraz rozwiązać, to

  1. Usuń czarną ramkę wokół imagePyramid
  2. Uzyskaj lepiej wyglądający obraz po powiększeniu w pełnym zakresie. Teraz wygląda jak stary telewizor ustawiony na niewłaściwy kanał

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Edytuj
Teraz umieściłem kod w GitHub. Minęło trochę czasu, odkąd go użyłem. Kod jest nieco niechlujny, podobnie jak repozytorium. Ale nadal powinno działać.
https://github.com/dvictori/rapideye_hist2sd

Daniel
źródło
Brawo, proszę pana. Dostajesz za to 10 z 10. Jeśli chodzi o drugą kwestię (lepiej wyglądać po powiększeniu do pełnego zakresu), czy możesz po prostu użyć mniej szczegółowych zdjęć, takich jak LandSat lub ASTER? Myślę, że grubsze zdjęcia wyglądałyby lepiej po pomniejszeniu. .. dla twojej pierwszej troski, wciąż staram się rozwalić ten orzech. Chciałbym zobaczyć kompleksowy opis tego, jak to zrobiłeś, w tym skrypt py, jeśli chcesz go udostępnić. Czy jest jakaś szansa, że ​​zamierzasz przedstawić swoje podejście gdziekolwiek?
elrobis
Nie planowałem tego prezentować ani pisać. Ale teraz, jak wspomniałeś, kto wie. Wszelkie sugestie co do odpowiednich mediów do przedstawienia tego? Jeśli chodzi o skrypt py, możesz go pobrać ze strony dropbox.com/s/1hfobfp9ymtku2n/rapideye_hist2sd.py Jednakże, należy ostrzec. Uważam się za gównianego programistę i jestem pewien, że mój program mógłby użyć wielu ulepszeń.
Daniel
2
Zmieniłem link do pobrania z powyższego komentarza. Jeśli chcesz zobaczyć kod python, którego użyłem, możesz go pobrać z goo.gl/ePEc7G
Daniel
Dzięki @Daniel. Prowadzę bloga, na którym zamieszczam poradniki dotyczące takich rzeczy. Jeśli natknę się na coś, co nie było łatwe i dla którego nie mogłem znaleźć dużej pomocy w Internecie, z kilku powodów opublikuję post na blogu. Po pierwsze, zakładam, że będę musiał kiedyś powtórzyć zadanie, więc jeśli skonsoliduję kroki w post, będę mógł później łatwo je przejrzeć. Po drugie, myślę, że zawsze istnieje szansa, że ​​ktoś chce zrobić coś podobnego i może skorzystać z tego postu. To, co tu zrobiłeś, jest bardzo warte blogowania, nawet jeśli jest to twój jedyny post na jakiś czas. :)
elrobis
To niesamowity pomysł i próbuję go dostosować do mniejszej klatki, 3-pasmowej kamery przechodzącej z 8 do 8 bitów, ale mam problemy z implementacją. Jak mam skierować katalog obrazów wejściowych do tego skryptu? Skąd oni są wywoływani? Wydaje mi się, że to wszystko musi być uruchomione przez geoserver, ale czy mogę to przerwać i uruchomić samodzielnie?
Wes
4

Daniel, czy są to zdjęcia z bardzo różnych pór roku? A może pory dnia? Jeśli są to różne pory roku, uzyskanie dobrego balansu kolorów może być dość trudne. Ale jeśli są różne pory dnia, wówczas zastosowanie korekcji kąta słońca może znacznie pomóc. Dobrym przybliżeniem pierwszego rzędu dla kąta słonecznego jest pomnożenie pikseli razy 1,0 / cos (angle_of_sun_off_directly_above). Więc nie ma regulacji, jeśli słońce jest bezpośrednio nad nim, zwiększając się do ... no nieskończoności, gdy zbliżasz się do świtu / zmierzchu.

W przeszłości miałem złe wyniki przy użyciu dopasowania histogramu między scenami w nakładających się regionach do składania dużych mozaik, ponieważ uzyskujesz dziwne efekty dryfowania po mozaice. Myślę, że bardziej użytecznym podejściem może być dopasowanie histogramu do obrazu docelowego w kolorze podstawowym (być może atrakcyjna mozaika tego obszaru). Interesuje mnie również sposób rozwiązania tego problemu. Charlie Loyd z MapBox również może mieć przemyślenia.

Frank Warmerdam
źródło
Frank, obrazy pochodzą głównie z pory suchej, kiedy zachmurzenie jest niskie. Ale są zdjęcia z różnych miesięcy, takie jak sierpień, listopad itp. Próbuję teraz podzielić obrazy na małe bloki i zrobić mozaikę dla każdego z nich. Poinformuje Cię, jak to się skończy. Napisałem również skrypt Pythona, aby wykonać dopasowanie CDF i działa dobrze (nie świetnie), gdy mam niewielką liczbę obrazów (20), ale gdy dojdę do dużej liczby, jeden z obrazów musi mieć wartości poza moją zakres obrazu odniesienia, a następnie rzeczy przestają działać. Może trzeba wymyślić lepszy sposób wyboru obrazu odniesienia.
Daniel
0

Czasami używałem programu OSSIM Image linker z dopasowaniem histogramu do tworzenia mozaik o zrównoważonym kolorze. Samouczek programu Image linker podaje przykład http://download.osgeo.org/ossim/docs/pdfs/ImageLinker_Tutorial.pdf Jednak program Image linker nie jest aktywnie utrzymywany i nie wiem, czy działa. Geocell Ossim jest bieżącym programem, ale nie ma na ten temat wielu dokumentów użytkownika. Pamiętam, że aby osiągnąć dobry wynik, najpierw przetworzyłem moje sceny Landsata kolejno za pomocą OpenEV, stosując pewne rozciąganie LUT, aby obrazy miały wizualnie podobny wygląd. Potem OSSIMowi łatwiej było dokonać ostatecznego dopasowania. Produkt końcowy wyglądał tak dobrze, jak ten, który wykonałem za pomocą narzędzia mozaikowego ER Mapper.

użytkownik30184
źródło