Equilibre as cores e publique grande quantidade de imagens de alta resolução no geoserver

11

Tenho uma grande quantidade de imagens do RapidEye (+300 Gb) que quero usar como mapa base para um aplicativo online. Até agora, eu consegui servi-los como um ImagePyramid no geoserver, seguindo as etapas mostradas em uma apresentação chamada "Geoserver on steroids". O problema é que não consegui fazer um balanço de cores adequado. Portanto, ao olhar para todo o conjunto de dados, o mosaico parece muito ruim, mas à medida que eu a aproximar, fica melhor (fotos abaixo).

Meu processo é:

  1. Converta todas as imagens em 8bits, epsg 4326, interpolação cúbica usando gdal
  2. Gere uma varredura virtual gdal com todas as imagens (gdalbuildvrt)
  3. Gere a pirâmide de imagem (gdal_retile com compactação e preparo geotiff) e publique no geoserver (usando a extensão do histograma no estilo da camada)

Alguma dica sobre como melhorar o processo e obter um melhor equilíbrio de cores?

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Daniel
fonte

Respostas:

6

Eu acredito que entendi.

Forcei um alongamento médio do histograma de desvio padrão + -2 em cada imagem do RapidEye durante a conversão para 8 bits.

Eu usei um script python para identificar a imagem min, max, média e SD. Em seguida, defino o valor da média - 2SD (ou imagem min, o que for maior) para 2 e média + 2SD (ou máx) para 254. E, para garantir, o valor original de zero na imagem foi definido como 1 e 2 ^ 16 definido como 255. NoData foi definido como 0.

Estes são os vetores da função de transferência:

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

Abaixo estão algumas capturas de tela. Os problemas que tenho que corrigir agora são

  1. Remova a borda preta ao redor da imagemPyramid
  2. Obtenha uma imagem com melhor aparência quando ampliada. Agora parece uma TV antiga sintonizada no canal errado

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Editar
Agora coloquei o código no GitHub. Já faz um tempo desde que eu o usei. O código é um pouco confuso e o repositório também. Mas ainda deve funcionar.
https://github.com/dvictori/rapideye_hist2sd

Daniel
fonte
Bravo, senhor. Você ganha 10 em 10 por isso. Quanto à sua segunda preocupação (mais bonita quando ampliada ao máximo), você poderia simplesmente usar imagens de baixa granularidade, como LandSat ou ASTER? Acho que as imagens mais grossas ficariam melhores quando reduzidas. ... como sua primeira preocupação, eu ainda estou tentando quebrar essa porca. Eu adoraria ver um artigo abrangente sobre como você fez isso, incluindo o script py, se estiver disposto a compartilhá-lo. Alguma chance de você apresentar sua abordagem em qualquer lugar?
elrobis
Eu não estava pensando em apresentar isso ou fazer uma redação. Mas agora que você mencionou, quem sabe. Alguma sugestão para uma mídia apropriada para apresentá-lo? Quanto ao script py, você pode baixá-lo em dropbox.com/s/1hfobfp9ymtku2n/rapideye_hist2sd.py No entanto, esteja avisado. Eu me considero um programador ruim e tenho certeza que meu programa pode usar muitas melhorias.
Daniel
2
Alterei o link de download do comentário acima. Se você quiser olhar para o código python que eu usei, faça o download em goo.gl/ePEc7G
Daniel
Obrigado @Daniel. Eu mantenho um blog onde eu posto instruções para essas coisas. Se eu me deparar com algo que não foi fácil e para o qual não consegui encontrar muita ajuda na web, farei um post no blog por alguns motivos. Primeiro, suponho que precisarei repetir a tarefa em algum momento; portanto, se consolidar as etapas em uma postagem, posso analisá-las facilmente mais tarde. Segundo, acho que sempre existe a chance de alguém querer fazer algo semelhante, e eles podem se beneficiar com o post. O que você fez aqui é muito digno de blog, mesmo que seja seu único post por um tempo. :)
elrobis
Essa é uma ideia incrível, e estou tentando adaptá-la para um quadro menor, câmera de 3 bandas, passando de 8 para 8 bits, mas estou tendo alguns problemas para implementá-la. Como devo direcionar o diretório de imagens de entrada para esse script? De onde eles estão sendo chamados? Eu acho que tudo isso deve estar executando através do servidor geográfico, mas posso resolver isso e executá-lo de forma independente?
Wes
4

Daniel, são imagens de estações muito diferentes? Ou horas do dia? Se são estações diferentes, obter um bom equilíbrio de cores pode ser bastante difícil. Mas se forem horários diferentes do dia, a aplicação de uma correção no ângulo do sol pode ajudar bastante. Uma boa aproximação de primeira ordem para o ângulo do sol é multiplicar os pixels por 1,0 / cos (angle_of_sun_off_directly_above). Portanto, nenhum ajuste se o sol estiver diretamente acima, aumentando para ... bem o infinito à medida que você se aproxima do amanhecer / anoitecer.

No passado, tive maus resultados usando a correspondência de histogramas entre cenas em regiões sobrepostas para montar mosaicos grandes porque você obtém efeitos de deriva estranhos no mosaico. Eu acho que uma abordagem mais útil pode ser algum tipo de histograma correspondente a uma imagem de destino da cor de base (talvez um atraente mosaico paisagístico da área). Também estou interessado em como resolver esse problema. Charlie Loyd, da MapBox, também pode ter pensamentos.

Frank Warmerdam
fonte
Frank, as imagens são principalmente da estação seca, quando a cobertura de nuvens é baixa. Mas existem imagens de meses diferentes, como agosto, novembro, etc. Agora, estou tentando dividir as imagens em pequenos blocos e fazer um mosaico para cada um. Vai deixar você saber como fica. Também escrevi um script python para fazer uma correspondência CDF e funciona bem (não muito bem) quando tenho um número pequeno de imagens (20), mas quando chego a um número grande, uma das imagens deve ter valores fora do meu faixa de imagem de referência e as coisas param de funcionar. Talvez seja necessário pensar em uma maneira melhor de selecionar a imagem de referência.
Daniel
0

Às vezes, usei o vinculador de imagem OSSIM com correspondência de histograma para criar mosaicos com equilíbrio de cores. O tutorial do Image Linker fornece alguns exemplos http://download.osgeo.org/ossim/docs/pdfs/ImageLinker_Tutorial.pdf No entanto, o Image linker não é mantido ativamente e não sei se funciona mais. O geocell Ossim é o programa atual, mas não há muitos documentos do usuário sobre isso. Lembro que, para obter um bom resultado, pré-processei minhas cenas do Landsat primeiro uma a uma com o OpenEV, aplicando um pouco de LUT para fazer com que as imagens tivessem visualmente a mesma aparência. Depois, ficou mais fácil para o OSSIM fazer a correspondência final. O produto final parecia tão bom quanto o que eu fiz com o utilitário de mosaico ER Mapper.

user30184
fonte