Bagaimana cara menambahkan interpretasi warna untuk pita raster menggunakan GDAL?


9

Saya memiliki 3 file GeoTIFF 1-band yang terpisah. Interpretasi warna untuk band adalah abu-abu. Saya ingin file RGB 3-band. Saya telah menggunakan gdal_merge.py

gdal_merge.py -separate file1.tif file2.tif file3.tif -o output_file.tif

Tetapi interpretasi warna untuk 3 band dari output_file.tif yang dihasilkan adalah abu-abu, tidak terdefinisi, tidak terdefinisi. Selain itu, semua piksel adalah 0 .

Jika saya menjalankan pct2rgb.py, saya mendapatkan file RGB:

pct2rgb.py output_file.tif output_file_rgb.tif

Tapi tentu saja, pikselnya 0 juga. Jadi, saya punya 3 pertanyaan:

  • Apakah gdal_merge.py alat yang tepat untuk menggabungkan 3 file 1-band dalam satu file 3-band RGB?
  • Mengapa saya mendapatkan interpretasi warna yang tidak ditentukan untuk band?
  • Apakah pct2rgb alat yang tepat untuk mengubah file 3-band dengan interpretasi warna ini ke file RGB?

UPDATE : raster tidak memiliki tabel warna. Interpretasi warna saja: Abu-abu.

Di sisi lain, nilai piksel berubah dari 0 hingga 1023 (ini disengaja)

Lebih banyak data: mereka raster yang diputar (tidak ada utara ke atas), tetapi semuanya memiliki geotransformasi yang sama.

UPDATE 2 : Saya dapat membengkokkan gambar untuk membuatnya utara, membangun VRT dan menambahkan ColorInterp untuk setiap band, tapi saya masih mendapatkan interpretasi warna sebagai abu-abu, tidak terdefinisi, tidak terdefinisi dalam hasil output.

Masalahnya adalah saya perlu membuat tabel warna di, setidaknya, band pertama. Saya tahu cara membuatnya , tetapi saya tidak tahu berapa banyak entri yang harus dimiliki tabel saya. Mengapa ada 13 entri dalam contoh FAQ Raster GDAL? Semua piksel memiliki nilai antara 0 dan 1023, jika membantu.

UPDATE 3 : Rupanya, tidak ada cara dalam format TIFF untuk benar-benar menentukan interpretasi warna dari setiap band. Cara GDAL membangun interpretasi warna saat membaca file TIFF adalah kombinasi nilai tag PHOTOMETRIC dan EXTRASAMPLES .

Membaca tentang tag ini:

  • PHOTOMETRIC mewakili ruang warna dari data gambar. Nilai 2 berarti bahwa komponen dari nilai piksel adalah RGB, tetapi mengasumsikan piksel Byte, dan saya memiliki piksel UInt16 (saya mencoba -co "PHOTOMETRIC=rgb", dan mendapat kesalahan). Jadi, saya tidak bisa menentukan tag PHOTOMETRIC untuk file output.

  • EXTRASAMPLES menentukan bahwa setiap piksel memiliki komponen tambahan N. Saya tidak yakin tentang cara menggunakan tag ini untuk membuat file gabungan saya. Atau jika saya membutuhkannya.

Jadi, dalam pembaruan 2 saya menyarankan pembuatan ColorTable, tetapi bagaimana? Dalam 3 file input saya, nilai piksel berubah dari 0 hingga 1023. Apakah saya harus mencocokkannya dengan warna? Apakah saya harus membuat ColorTable dengan 1024 input? Bagaimana?

Di pembaruan 3, sepertinya saya bisa menggunakan beberapa tag GeoTIFF saat membuat file yang digabungkan, tetapi saya tidak yakin apakah saya benar-benar dapat menggunakannya, atau bagaimana.


1
Coba ini: Gunakan gdal_merge seperti yang Anda lakukan, lalu gdal_translate -co PHOTOMETRIC = RGB, untuk alasan apa pun gdal_merge tidak menghormati -co. Ini tampaknya bekerja untuk saya. Meskipun saya mungkin salah paham target Anda.

Terima kasih atas tip Anda! Saya ingin menggabungkan 3 geotiff band tunggal menjadi satu geotiff 3-band. Masalah saya adalah output dari gdal_merge sebenarnya kosong (piksel = 0). Saya tidak bisa menggunakan output itu untuk apa pun.
Jorge Arévalo

Apakah mungkin memposting data di suatu tempat, sesuatu sepertinya salah.

Saya sudah bertanya kepada bos saya, dan saya tidak bisa mempublikasikan data :-(. Saya benar-benar dapat mencampur file dengan kode mandiri, yang menyalin setiap file input pada output. Saya ingin melakukannya dengan gdal_merge Poblem saya adalah saya tidak dapat mengatur interpretasi warna RGB untuk file output dengan gdal_merge.
Jorge Arévalo

Mungkin, saya punya masalah serupa. Dapatkan ini berfungsi dengan rgb2pct.py. Kenapa ?, saya tidak tahu. Deskripsi perintah: Utilitas ini akan menghitung tabel pseudo-warna optimal untuk gambar RGB tertentu menggunakan algoritma median cut pada histogram RGB downsampled. Lalu saya jalankan gdal_translate dengan expand rgb.

Jawaban:


6

gdal_merge.py adalah alat yang tepat untuk 'menumpuk' gambar input Anda.

Dengan asumsi bahwa pita pertama Anda memiliki tabel warna yang valid, Anda dapat menggunakan:

gdal_merge.py -separate -pct -o output_file.tif file1.tif file2.tif file3.tif

Catatan: Perintah telah diformat ulang dengan -o output_file.tifsebelum daftar input.

Dari dokumen:

-pct: Ambil tabel pseudocolor dari gambar input pertama, dan gunakan untuk output. Menggabungkan gambar pseudocolored dengan cara ini mengasumsikan bahwa semua file input menggunakan tabel warna yang sama.

Saya akan menguji output Anda dengan gdalinfo -statsuntuk memastikan itu sedang ditumpuk dengan benar.

Diperbarui untuk OP

Dari daftar osgeo , sepertinya Anda dapat mencoba format lain untuk memeriksa hasilnya:

Tidak ada cara dalam format TIFF untuk benar-benar menentukan interpretasi warna dari setiap band. Cara GDAL membangun interpretasi warna saat membaca file TIFF adalah kombinasi nilai tag PHOTOMETRIC dan EXTRASAMPLES.

-Evan (poster) tahu GDAL di dalam dan luar.


Saya benar-benar melakukan itu, tapi saya mendapatkan "ERROR 6: SetColorTable () tidak didukung untuk file TIFF multi-sampel.". Dan saya mendapatkan 0 untuk semua piksel. Saya tidak yakin tentang arti kesalahan ini.
Jorge Arévalo

Oke, pertanyaan terbaru. Saya perlu tabel warna untuk band pertama.
Jorge Arévalo

Mmm ... terima kasih atas tanggapannya. Saya mencoba opsi itu. Sepertinya saya tidak bisa menggunakan PHOTOMETRIC = rgb karena tipe data saya tidak int. Tapi saya siap ...
Jorge Arévalo

3

Cara pertama yang dapat saya pikirkan adalah membangun vrt, mengedit, dan menerjemahkan:

gdalbuildvrt -separate output.vrt file1.tif file2.tif file3.tif

tambahkan tag interp warna jika diperlukan:

...
<VRTRasterBand dataType="Byte" band="1">
<ColorInterp>Red</ColorInterp>
<NoDataValue>255</NoDataValue>
<ComplexSource>
  <SourceFilename relativeToVRT="1">test.tif</SourceFilename>
  <SourceBand>1</SourceBand>
  <SourceProperties RasterXSize="42" RasterYSize="22" DataType="Byte" BlockXSize="42" BlockYSize="22" />
  <SrcRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <DstRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <NODATA>-32768</NODATA>
</ComplexSource>

lalu:

gdal_translate output.vrt output.tif

Saya mencoba, tetapi file raster saya diputar ...
Jorge Arévalo

Berarti mereka tidak memiliki SRS / geotransform yang sama?

Tidak, mereka semua memiliki geotransform yang sama, tetapi mereka bukan raster utara-up (parameter rotasi tidak 0). Dan gdalbuildvrt tidak mendukung transformasi geo yang diputar. Saya tidak ingin membengkokkan mereka.
Jorge Arévalo

Mmmm, baiklah. Jika saya membengkokkan mereka untuk membuat raster utara, saya dapat membangun VRT, dan menambahkan ColorInterp di mana diperlukan, membeli saya masih mendapatkan abu-abu, tidak terdefinisi, tidak terdefinisi. Saya perlu membuat tabel warna untuk band pertama, tetapi saya tidak tahu caranya. Saya akan memperbarui pertanyaan.
Jorge Arévalo

1

Pita skala abu-abu input Anda memiliki nilai dari 0 hingga 1024, tetapi RGB hanya mengizinkan nilai dari 0 hingga 255 untuk setiap pita.

Anda dapat menggunakan gdal_translate -scale [src_min src_max [dst_min dst_max]]untuk mengubah skala file sumber Anda.

Dalam menjalankan kedua, Anda dapat menumpuk tiga band Anda dengan gdal_merge.py dan mendaftar -co "PHOTOMETRIC=rgb".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.