Eu tenho 3 arquivos GeoTIFF de 1 banda separados. A interpretação das cores da banda é cinza. Eu quero um arquivo RGB de 3 bandas. Eu usei gdal_merge.py
gdal_merge.py -separate file1.tif file2.tif file3.tif -o output_file.tif
Mas a interpretação de cores para as 3 bandas do arquivo_de_ saída resultante é cinza, indefinida, indefinida. Além disso, todos os pixels são 0 .
Se eu executar pct2rgb.py, recebo um arquivo RGB:
pct2rgb.py output_file.tif output_file_rgb.tif
Mas é claro que os pixels também são 0. Então, eu tenho 3 perguntas:
- O gdal_merge.py é a ferramenta certa para combinar 3 arquivos de 1 banda em um arquivo RGB de 3 bandas?
- Por que estou recebendo uma interpretação de cores indefinida para bandas?
- O pct2rgb é a ferramenta certa para transformar arquivos de 3 bandas com essa interpretação de cores em arquivos RGB?
ATUALIZAÇÃO : Os rasters não possuem uma tabela de cores. Apenas interpretação de cores: cinza.
Por outro lado, os valores de pixel variam de 0 a 1023 (isso é deliberado)
Mais dados: são rasters rotacionados (sem norte para cima), mas todos eles têm a mesma geotransformação.
ATUALIZAÇÃO 2 : Posso distorcer as imagens para chegar ao norte, construir um VRT e adicionar ColorInterp para cada banda, mas ainda assim a interpretação das cores é cinza, indefinida e indefinida no resultado da saída.
O problema é que preciso criar uma tabela de cores, pelo menos, na primeira banda. Conheço a maneira de criá-los , mas não sei quantas entradas minha tabela deve ter. Por que existem 13 entradas no exemplo das Perguntas frequentes do GDAL Raster? Todos os pixels têm valores entre 0 e 1023, se ajudar.
ATUALIZAÇÃO 3 : Aparentemente, no formato TIFF não há como especificar realmente a interpretação das cores de cada banda. A maneira como o GDAL constrói a interpretação das cores ao ler um arquivo TIFF é uma combinação do valor da tag PHOTOMETRIC e EXTRASAMPLES .
Lendo sobre essas tags:
PHOTOMETRIC representa o espaço de cores dos dados da imagem. Um valor 2 significa que os componentes de um valor de pixel são RGB, mas ele assume pixels de bytes e eu tenho UInt16 pixels (tentei
-co "PHOTOMETRIC=rgb"
e obtive um erro). Portanto, não posso especificar a tag PHOTOMETRIC para o arquivo de saída.EXTRASAMPLES especifica que cada pixel tem N componentes extras. Não tenho certeza sobre como usar essa tag para criar meu arquivo mesclado. Ou se eu precisar.
Então, na atualização 2, sugiro a criação de uma ColorTable, mas como? Nos meus 3 arquivos de entrada, os valores de pixel variam de 0 a 1023. Preciso combiná-los com cores? Preciso criar uma ColorTable com 1024 entradas? Como?
Na atualização 3, parece que eu poderia usar algumas tags GeoTIFF ao criar o arquivo mesclado, mas não tenho certeza se realmente posso usá-las ou como.
fonte
Respostas:
gdal_merge.py é a ferramenta correta para 'empilhar' suas imagens de entrada.
Supondo que sua primeira banda tenha uma tabela de cores válida, você poderá usar:
gdal_merge.py -separate -pct -o output_file.tif file1.tif file2.tif file3.tif
Nota: O comando foi reformatado
-o output_file.tif
antes da lista de entradas.Dos documentos:
Eu testaria sua saída
gdalinfo -stats
para garantir que ela esteja sendo empilhada corretamente.Atualizado para OP
Na lista osgeo , parece que você pode tentar um formato diferente para verificar os resultados:
-Evan (o pôster) conhece GDAL por dentro e por fora.
fonte
A primeira maneira que consigo pensar é criar um vrt, editar e traduzir:
adicione a tag de interp de cores onde for necessário:
e depois:
fonte
Sua banda de escala de cinza de entrada possui valores de 0 a 1024, mas o RGB permite apenas valores de 0 a 255 para cada banda.
Você pode usar
gdal_translate -scale [src_min src_max [dst_min dst_max]]
para redimensionar seu arquivo de origem.Em uma segunda execução, você pode empilhar suas três bandas com gdal_merge.py e aplicar
-co "PHOTOMETRIC=rgb"
.fonte