Como equilibrar cores falsas composições de imagens Landsat com nitidez de panorâmica no GRASS?

9

Sempre que eu tento compósitos para deslocar-sharpen de algumas imagens Landsat na grama usando i.pansharpen, i.fusion.broveyou o IHS método nitidez, a saída terá alguns ou todos as seguintes características:

  • a cor composta está em um tom diferente em comparação com o composto não afiado
  • o nível de brilho está bagunçado
  • todo o composto ficou totalmente branco / totalmente preto (ao usar imagens pré-processadas para refletir a refletância do topo da atmosfera ou as correções de refletância da superfície i.landsat.toar)

Eu também tentei todos os seguintes; mas as cores / brilho permaneceram as mesmas ou ficaram ainda piores:

  • Aplicado i.landsat.rgb, antes e depois do processo de afiação de pan
  • Jogado com a bandeira -fou-pi.landsat.rgb
  • Tentou r.colorseditar a tabela de cores para cinza / grey255 / grey.eq
  • Tentei i.pansharpenusando todos os métodos Brovey / IHS / PCA
  • Jogou com a -lbandeira i.pansharpenpara reequilibrar o canal azul

O manual do GRASS GIS explicou como executar o ajuste de nitidez e o equilíbrio de cores, mas não consigo descobrir como combinar os dois processos em um fluxo de trabalho simultâneo. Eu suspeitava que isso se devesse ao meu fraco entendimento de tabelas de cores, histograma de cores etc. no GRASS.

Então, alguém pode me explicar - como você lida com problemas de equilíbrio de cores ao lidar com imagens do Landsat após o processamento de imagens no GRASS? Você pode compartilhar comigo seus métodos / fluxos de trabalho favoritos?

Muito obrigado por qualquer feedback!


fonte

Respostas:

6

visão global

Uma abordagem de trabalho dentro do GRASS-GIS versão 7 para obter uma imagem composta com equilíbrio de cores aceitável após a nitidez

  1. verifique se os dados de entrada estão dentro de 8 bits [0, 255]
  2. se os dados estiverem dentro de [0, 255], prossiga para o aumento da nitidez ( i.pansharpen)
  3. se os dados não estiverem dentro de [0, 255], redimensione-os novamente para esse intervalo ( r.rescale)
  4. nitidez com qualquer um dos métodos apresentados (Brovey, IHS, PCA)
  5. equilíbrio de cores automaticamente usando o i.landsat.rgbmódulo ou ajustando manualmente as tabelas de cores das faixas de interesse

Detalhes e instruções de exemplo

Afiação de Pan / Fusão

O GRASS 7 possui um módulo de afiação de pan dedicado, i.pansharpenque apresenta três técnicas para afiar, a saber, a transformação de Brovey , o método IHS clássico e o que é baseado no PCA .

i.pansharpenfunciona bem com mapas raster de 8 bits como entrada. Se os dados a serem processados ​​estiverem fora desse intervalo, ou seja, fora dele [0, 255], eles poderão ser redimensionados para se ajustarem a esse intervalo usando o r.rescalemódulo GRASS .

Dado um conjunto de bandas espectrais de 11 bits (por exemplo, azul, verde, vermelho, NIR e Pan) variando entre [0, 2047], consultar a banda azul, por exemplo, retornaria

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

Reescalonar a faixa azul para variar entre [0, 255]

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

O mesmo passo se aplica tanto ao restante das bandas multi-espectrais quanto à banda de interesse pancromático.

Como sempre, ao trabalhar com o GRASS, é necessário definir a região de interesse, ou seja, corresponder à extensão da (s) banda (s) ou então. A resolução em si é cuidada nesse caso específico pelo módulo e os mapas de varredura com nitidez de pan resultante terão a mesma resolução mais alta que a banda Panchromatic.g.regionrast=Blue_DNs_255

Um exemplo de comando para uma ação de nitidez de pan com base no IHS pode parecer

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

Balanceamento de cores

Após a conclusão do processo, o módulo gera

...
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

Normalmente, deve ser suficiente reequilibrar as cores após a nitidez da panorâmica usando, por exemplo, o módulo i.landsat.rgb ou o ajuste manual de cada uma das três bandas que compõem uma imagem RGB.

Screenshots

... a ser adicionado

Nikos Alexandris
fonte
Eu sabia que devia haver uma maneira melhor! Agora posso usar livremente o módulo i.sharpen. Obrigado por apontar o módulo r.rescale. Trabalho impressionante Nikos!
Haziq, não tenho certeza se e quanto dos detalhes "finos" são perdidos ao converter conjuntos de dados de 11 bits em 8 bits. As imagens do QuickBird, por exemplo, são um sensor de 11 bits. Eles estão disponíveis nos formatos de 8 e 16 bits. Cabe ao usuário decidir o que fazer. Seria certamente bom i.pansharpenlidar com todos os tipos de formatos. uma olhada em um "ticket" relacionado: Ticket nº 2048: i.pansharpen limitado a imagens de 8 bits . Por outro lado, eu simplesmente não entendo as coisas e, portanto, não consigo usar o i.pansharpen corretamente ...?
Nikos Alexandris
7

Pesquisei alto e baixo e acho que descobri a raiz dos meus problemas. Acredito que tenho a solução para eles agora - mas é um pouco confuso. Tenho certeza de que existem maneiras melhores de resolvê-los. Compartilhe se você souber uma maneira mais fácil!

RAIZES DE PROBLEMAS:

  1. A saída de i.landsat.toar está no ponto flutuante . Percebi que, quando uso raspadores de ponto flutuante em qualquer método de nitidez de pan, as cores ficam confusas. De algum modo, esse algoritmo preferia rasters na forma inteira original.
  2. Os módulos de nitidez de pan, como os módulos i.pansharpen e, i.fusion.brovey irão bagunçar as cores . Não compreendi bem os algoritmos que eles usaram nesses módulos - mas, de alguma forma, as tabelas de cores serão afetadas e arruinarão as imagens nítidas resultantes.

SOLUÇÃO:

  1. Converta a saída de i.landsat.toar float para int, usando r.recode .
  2. Use os rasters como entradas no método de nitidez de pan IHS ( i.rgb.hise i.his.rgb). Eu evito usar i.pansharpene i.fusion.brovey.

O FLUXO DE TRABALHO:

  1. Use r.info com o -r sinalizador para obter os valores mínimo e máximo de DN de cada banda de varredura que foram processadas i.landsat.toar. Por exemplo:

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

    Como podemos ver, os valores estão entre 0-1, que são bem diferentes dos originais (que estão entre 0-255). Isso explica por que a saída do nitidez de pan ficou em branco, porque a faixa de valor usada é muito baixa (abaixo de 1).

  2. Converta essa banda raster usando r.recode . Use os valores mínimo e máximo obtidos na etapa 1 para converter em um novo intervalo de 0 a 255. Um exemplo de trecho de código:

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

    Podemos verificar os novos valores convertidos com r.info:

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

    Os valores estão entre 0 e 255: agora é utilizável no processo de nitidez de pan.

  3. Aplique a tabela de cores em escala de cinza à banda convertida com r.colors .

    r.colors NEWBAND1 color=grey
    

    Até agora, eu obtenho os melhores resultados usando a tabela de cores cinza - os compósitos com nitidez de pan combinam com os compósitos originais. As outras alternativas são equalizar a tabela de cores cinza com color=grey.eqou usando a -ebandeira com color=grey. Ou podemos usar o i.landsat.rgbmódulo em vez de r.colors..

  4. Repita as etapas de 1 a 3 com outras bandas raster que pretendemos usar como compósitos, incluindo a raster pan (banda 8). O uso de scripts seria muito apreciado aqui.

  5. Em seguida, use as rasters processadas como entradas no método de nitidez de pan IHS . Por exemplo, ao fazer o composto da banda 7,4,2:

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

    Isso produzirá 3 camadas: uma camada de matiz HUE, uma camada de intensidade INTe também uma camada de saturação SAT. Em seguida, substituiremos a camada de intensidade INTpela banda pan raster NEWBAND8em i.his.rgb:

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

    Os canais vermelhos resultantes de COMP742_red , COMP742_green , COMP742_blue podem ser combinados usando d.rgbou r.composite..

AMOSTRA ANTES E DEPOIS:

Antes de afiar o pan:

Antes

Depois de afiar o pan:

Depois de

Talvez seja difícil dizer as diferenças de nitidez ao visualizar imagens tão pequenas. Mas o importante é que a cor da imagem com nitidez de panorâmica corresponde ao compósito do original. Missão cumprida!

OUTRAS NOTAS:

  • Não r.recode as bandas térmicas (banda 6) . i.landsat.toarproduz essas bandas térmicas em valores de temperatura Kelvin (nada a ver com valores DN). Mantenha a r.recoderotina nas bandas multiespectrais e pan normais (bandas 1-5,7,8).
  • Se nunca usamos i.landsat.toar , mas os compostos resultantes parecem realmente errados , geralmente é devido à incompatibilidade das tabelas de cores antes e depois do processo de nitidez de pan. Apliquei r.colors RASTER color=greynas bandas de varredura originais antes da nitidez de pan e nos canais resultantes após nitidez de pan para garantir a correspondência aproximada de cores.
  • Um caso usual do problema de composição de cores erradas : as bandas raster originais estão inseridas color=grey255, a saída de i.landsat.rgbestá inserida color=grey.eq. Não é de admirar que ambos pareçam diferentes!
  • O processamento de imagens do landsat para uso pode realmente ser uma atividade que exige tempo . É melhor ter algo a fazer ao esperar que tudo processe, ou pelo menos tomar uma quantidade absurda de café e boa música enquanto você está nisso;)

Espero que isso beneficie alguém: levei dias para descobrir o que há de errado ..

Comunidade
fonte
11
Obrigado por sua pesquisa e esforços, eu também tive esse problema no novo GRASS 7 do svn. Agora, as cores da imagem nítida estão OK. =)
Vladimir
Ah, sim, esqueci de mencionar qual versão do GRASS estou executando - obrigado @VladimirNaumov por lembrar! Estou usando o GRASS 7svn; deveria ter percebido que esta questão poderia ser algo que não acontece em todas as versões do GRAMA (Eu não tentei outras versões) ..
De volta a isso: você pode converter mapas de varredura de ponto flutuante em mapas de varredura inteiros usando r.mapcalcjunto com sua int()função integrada . Eu acho que r.recodenão é para ser usado no contexto do seu aplicativo.
Nikos Alexandris
11
Eu acho que o "problema" global sobre i.pansharpené que ele espera de 8 bits raster mapeia como entrada, ou seja, os valores de entrada deve variar de 0 a 255.
Nikos Alexandris
Além disso, observe que i.pansharpenestá apenas no grass7_trunk. Essa é a versão de desenvolvimento ... :-)
Nikos Alexandris