Jak zrównoważyć kolory fałszywych kompozytów wyostrzonych na panewkach obrazów Landsat w GRASS?

9

Ilekroć próbuję PAN-wyostrzyć kompozytów niektórych zdjęć Landsat w trawie przy użyciu i.pansharpen, i.fusion.broveylub IHS ostrzenie metody, wyjście będzie mieć niektóre lub wszystkie z następujących cech:

  • kolor kompozytu ma inny odcień niż kompozyt nieostrzony
  • poziom jasności jest pomieszany
  • cały kompozyt stał się całkowicie biały / całkowicie czarny (przy użyciu obrazów poddanych obróbce wstępnej do korekcji współczynnika odbicia w górnej części atmosfery lub powierzchni i.landsat.toar)

Próbowałem także wszystkich następujących; ale kolory / jasność pozostały takie same lub pogorszyły się:

  • Stosowany i.landsat.rgbprzed i po procesie ostrzenia na patelni
  • Grał z flagą -flub -pwi.landsat.rgb
  • Próbowałem r.colorsedytować tabelę kolorów na grey / grey255 / grey.eq
  • Próbowałem i.pansharpenprzy użyciu wszystkich metod Brovey / IHS / PCA
  • Grał z -lflagą w, i.pansharpenaby przywrócić równowagę niebieskiego kanału

W podręczniku GRASS GIS wyjaśniono, jak wykonywać wyostrzanie panwiowe i równoważenie kolorów, ale nie mogę wymyślić, jak połączyć oba procesy w równoległym przepływie pracy. Podejrzewałem, że wynika to z mojego słabego zrozumienia tabel kolorów, histogramu kolorów itp. W GRASS.

Czy ktoś może mi zatem wyjaśnić - jak radzisz sobie z problemami wyrównywania kolorów w przypadku obrazów Landsat po przetworzeniu w GRASS? Czy możesz podzielić się ze mną swoimi ulubionymi przepływami pracy / metodami?

Wielkie dzięki za wszelkie opinie!


źródło

Odpowiedzi:

6

Przegląd

Jednym podejściem roboczym w GRASS-GIS w wersji 7 jest uzyskanie akceptowalnego obrazu kompozytowego o zrównoważonym kolorze po wyostrzeniu pan

  1. sprawdź, czy dane wejściowe mieszczą się w zakresie 8 bitów w [0, 255]
  2. jeśli dane są w środku [0, 255], przejdź do panoramowania ( i.pansharpen)
  3. jeśli dane nie znajdują się w [0, 255], przeskaluj je do tego zakresu ( r.rescale)
  4. panoramowanie za pomocą dowolnej z zalecanych metod (Brovey, IHS, PCA)
  5. równoważenie kolorów automatycznie za pomocą i.landsat.rgbmodułu lub ręcznie dostosowując tabele kolorów pasm zainteresowania

Szczegóły i przykładowe instrukcje

Pan-Sharpening / Fusion

GRASS 7 posiada dedykowany moduł do ostrzenia pan, i.pansharpenktóry oferuje trzy techniki ostrzenia, a mianowicie transformację Brovey , klasyczną metodę IHS i jedną opartą na PCA .

i.pansharpendziała dobrze z 8-bitowymi mapami rastrowymi jako danymi wejściowymi. Jeśli przetwarzane dane są poza tym zakresem, to znaczy poza [0, 255], można je przeskalować w celu dopasowania do tego zakresu za pomocą r.rescalemodułu GRASS .

Biorąc pod uwagę zestaw 11-bitowych pasm spektralnych (na przykład niebieski, zielony, czerwony, NIR i Pan) w zakresie od [0, 2047], zapytanie na przykład o niebieskie pasmo zwróciłoby

r.info Blue_DNs -r
min=0
max=2047

Przeskalowanie niebieskiego pasma do zakresu od [0, 255]

r.rescale in=Blue_DNs out=Blue_DNs_255 from=0,2047 to=0,255

Ten sam krok dotyczy zarówno reszty pasm spektralnych, jak i pasma panchromatycznego będącego przedmiotem zainteresowania.

Jak zwykle podczas pracy z GRASS, należy ustawić region zainteresowania, tj. Dopasować zakres pasma (pasm) lub inaczej. W tym konkretnym przypadku moduł sam dba o rozdzielczość, a uzyskane w wyniku wyostrzone panoramy mapy rastrowe będą miały taką samą (wyższą) rozdzielczość jak pasmo panchromatyczne.g.regionrast=Blue_DNs_255

Może wyglądać przykładowe polecenie akcji Pan-Sharpening opartej na IHS

i.pansharpen pan=Pan_DNs_255 ms1=Blue_DNs_255 ms2=Green_DNs_255 ms3=Red_DNs_255 output=sharptest255 sharpen=ihs

Równoważenie kolorów

Po zakończeniu procesu moduł generuje dane

...
The following pan-sharpened output maps have been generated:
sharptest255_red
sharptest255_green
sharptest255_blue

To visualize output, run: g.region -p rast=sharptest255.red
d.rgb r=sharptest255_red g=sharptest255_green b=sharptest255_blue

Zwykle powinno wystarczyć ponowne zrównoważenie kolorów po wyostrzeniu obrazu za pomocą na przykład modułu i.landsat.rgb lub ręcznej regulacji każdego z trzech pasm, z których utworzy się obraz RGB.

Zrzuty ekranu

... do dodania

Nikos Alexandris
źródło
Wiedziałem, że musi być lepszy sposób! Teraz mogę swobodnie korzystać z modułu i.sharpen. Dziękujemy za wskazanie modułu r.rescale. Świetna robota Nikos!
Haziq, nie jestem pewien, czy i jak wiele „drobnych” szczegółów zostanie utraconych podczas konwersji 11-bitowych zestawów danych do 8-bitowych. Na przykład zdjęcia QuickBird to czujnik 11-bitowy. Są one dostępne zarówno w formacie 8-bitowym, jak i 16-bitowym. Użytkownik musi zdecydować, co należy zrobić. Z pewnością byłoby miło i.pansharpenobsługiwać wszystkie rodzaje formatów. Proszę spojrzeć na powiązany „bilet”: Bilet nr 2048: i.pansharpen ograniczony do zdjęć 8-bitowych . Z drugiej strony po prostu mogę nie rozumieć rzeczy, a zatem nie jestem w stanie prawidłowo używać i.pansharpen ...?
Nikos Alexandris
7

Szukałem wysoko i nisko i myślę, że odkryłem źródło moich problemów. Wydaje mi się, że mam dla nich teraz rozwiązanie - ale jest trochę niechlujne. Jestem pewien, że są lepsze sposoby ich rozwiązania. Udostępnij, jeśli znasz prostszy sposób!

KORZENIE PROBLEMÓW:

  1. Dane wyjściowe i.landsat.toar są w zmiennoprzecinkowe . Uświadomiłem sobie, że kiedy używam rastrów zmiennoprzecinkowych w dowolnej metodzie ostrzenia, kolory się popsują. Algorytm ten w jakiś sposób preferował rastry w oryginalnej liczbie całkowitej.
  2. Moduły do ​​ostrzenia panów, takie jak i.pansharpen i i.fusion.brovey moduły, psują kolory . Nie do końca rozumiem algorytmy zastosowane w tych modułach - ale jakoś wpłynie to na tablice kolorów i zrujnuje powstałe obrazy z wyostrzonymi obrazami.

ROZWIĄZANIE:

  1. Konwertuj dane wyjściowe z i.landsat.toar float na int, używając r.recode .
  2. Użyj rastrów jako danych wejściowych w metodzie ostrzenia IHS ( i.rgb.hisi i.his.rgb). Unikam używania i.pansharpeni i.fusion.brovey.

PRZEBIEG PRACY:

  1. Użyj r.info wraz z -r flagą, aby uzyskać wartości DN min i max dla każdego pasma rastrowego, które zostały przetworzone i.landsat.toar. Na przykład:

    > r.info -r BAND1
    min=0.01
    max=0.370064120902708
    

    Jak widzimy, wartości mieszczą się w zakresie od 0 do 1, które są dość różne od pierwotnych (które wynoszą od 0 do 255). To wyjaśnia, dlaczego wynik z wyostrzania panwiowego okazał się pusty, ponieważ zastosowany zakres wartości jest bardzo niski (poniżej 1).

  2. Konwertuj pasmo rastrowe za pomocą r.recode . Użyj wartości minimalnej i maksymalnej uzyskanych w kroku 1, aby przeliczyć na nowy zakres 0–255. Przykładowy fragment kodu:

    r.recode input=BAND1 output=NEWBAND1 rules=- << EOF
    0.01:0.370064120902708:0:255
    EOF
    

    Możemy sprawdzić nowe przekonwertowane wartości za pomocą r.info:

    > r.info -r NEWBAND1
    min=1
    max=254
    

    Wartości mieszczą się w zakresie 0–255: teraz można to wykorzystać do procesu ostrzenia na patelni.

  3. Zastosuj tabelę kolorów w skali szarości do przekonwertowanego pasma za pomocą r.colors .

    r.colors NEWBAND1 color=grey
    

    Do tej pory najlepsze wyniki osiągam przy użyciu szarej tabeli kolorów - kompozyty wyostrzone na patelni ściśle pasują do oryginalnych kompozytów. Inne alternatywy to wyrównanie tabeli szarości za color=grey.eqpomocą lub przy użyciu -eflagi z color=grey. Lub możemy użyć i.landsat.rgbmodułu zamiast r.colors

  4. Powtórz krok 1-3 z innymi pasmami rastrowymi, które zamierzamy wykorzystać jako kompozyty, w tym z panoramowaniem rastrowym (pasmo 8). Bardzo mile widziane byłoby użycie skryptów.

  5. Następnie użyj przetworzonych rastrów jako danych wejściowych w metodzie ostrzenia IHS . Na przykład podczas tworzenia kompleksu pasma 7,4,2:

    i.rgb.his r=NEWBAND7 g=NEWBAND4 b=NEWBAND2 hue=HUE int=INT sat=SAT
    

    Spowoduje to wygenerowanie 3 warstw: warstwy odcienia, warstwy HUEintensywności INT, a także warstwy nasycenia SAT. Następnie zastąpimy warstwę intensywności INTpasmem rastrowym NEWBAND8w i.his.rgb:

    i.his.rgb hue=HUE sat=SAT int=NEWBAND8 r=COMP742_red g=COMP742_green b=COMP742_blue
    

    Powstałe czerwone kanały COMP742_red , COMP742_green , COMP742_blue można następnie połączyć za pomocą d.rgblub r.composite..

PRÓBKA PRZED I PO:

Przed ostrzeniem na patelni:

Przed

Po ostrzeniu na patelni:

Po

Może trudno odróżnić różnice w wyostrzaniu , patrząc na tak małe obrazy. Ale ważny jest kolor wyostrzonego obrazu dopasowanego do kompozytu z oryginału. Misja zakończona sukcesem!

INNE NOTATKI:

  • Nie r.recode pasma termiczne (pasmo 6) . i.landsat.toarwyprowadzaj te pasma termiczne w wartościach temperatury Kelvina (nie ma to nic wspólnego z wartościami DN). Zachowaj r.recoderutynę na normalnych pasmach wielu widmowych i pan (pasma 1-5,7,8).
  • Jeśli nigdy nie używamy i.landsat.toar , ale powstałe kompozyty wyglądają naprawdę źle , zwykle dzieje się tak z powodu niedopasowania tabel kolorów przed i po procesie wyostrzania. Nakładałem r.colors RASTER color=greyna oryginalne paski rastrowe przed wyostrzaniem pan i na powstałe kanały po wyostrzaniu pan, aby zapewnić dokładne dopasowanie kolorów.
  • Typowy przypadek nieprawidłowego koloru kompozytu : oryginalne pasma rastrowe są włączone color=grey255, a wyjście i.landsat.rgbjest włączone color=grey.eq. Nic dziwnego, że oba wyglądają inaczej!
  • Przetwarzanie obrazów ziemi do wykorzystania może być naprawdę czasochłonne . Lepiej mieć coś do zrobienia, czekając, aż wszystko się przetworzy, lub przynajmniej trochę śmiesznej ilości kawy i dobrej muzyki, gdy jesteś przy tym;)

Mam nadzieję, że komuś to przyniesie korzyść: zajęło mi kilka dni, aby dowiedzieć się, co jest nie tak.

Społeczność
źródło
1
Dzięki za twoje badania i wysiłki, miałem również ten problem w nowej GRASS 7 od svn. Teraz kolory zaostrzonego obrazu są OK. =)
Vladimir
O tak, zapomniałem wspomnieć, którą wersję GRASS używam - dziękuję @VladimirNaumov za przypomnienie! Używam GRASS 7svn; powinienem
Wróć do tego: możesz konwertować zmiennoprzecinkowe mapy rastrowe na całkowite mapy rastrowe, używając r.mapcalcwraz ze zintegrowaną int()funkcją. Myślę, że r.recodenie należy go używać w kontekście twojej aplikacji.
Nikos Alexandris
1
Myślę, że ogólnym „problemem” i.pansharpenjest to, że oczekuje on 8-bitowych map rastrowych jako danych wejściowych, tzn. Wartości wejściowe powinny zawierać się w przedziale od 0 do 255.
Nikos Alexandris
Zauważ też, że i.pansharpenjest tylko w grass7_trunk. To jest wersja rozwojowa ... :-)
Nikos Alexandris