GDALを使用してラスターバンドの色解釈を追加する方法


9

3つの個別の1バンドGeoTIFFファイルがあります。バンドの色の解釈は灰色です。3バンドRGBファイルが必要です。私はgdal_merge.pyを使用しました

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

しかし、結果のoutput_file.tifの3つのバンドの色の解釈は、灰色、未定義、未定義です。それを除いて、すべてのピクセルは0です。

pct2rgb.pyを実行すると、RGBファイルが表示されます。

pct2rgb.py output_file.tif output_file_rgb.tif

しかし、もちろん、ピクセルも0です。だから、私は3つの質問があります:

  • gdal_merge.pyは、3つの1バンドファイルを1つの3バンドRGBファイルに結合するための適切なツールですか?
  • なぜバンドの色の解釈が未定義になるのですか?
  • pct2rgbは、この色の解釈を持つ3バンドファイルをRGBファイルに変換するための適切なツールですか?

更新:ラスタにはカラーテーブルがありません。ただ色の解釈:灰色。

一方、ピクセル値は0から1023になります(これは意図的なものです)

より多くのデータ:それらは回転したラスター(北を上にしない)ですが、それらはすべて同じ地理変換を持っています。

更新2:画像をワープして北に上向きにし、VRTを構築し、各バンドにColorInterpを追加しますが、出力結果で色が灰色、未定義、未定義として解釈されます。

問題は、少なくとも最初のバンドでカラーテーブルを作成する必要があることです。私が知っているそれらを作成する方法を、私は私のテーブルには、どのように多くのエントリを持っていなければならないのか分かりません。GDALラスターFAQの例に13のエントリがあるのはなぜですか?役立つ場合、すべてのピクセルの値は0〜1023です。

更新3:どうやら、TIFF形式では各バンドの色の解釈を実際に指定する方法はありません。TIFFファイルを読み取るときにGDALが色の解釈を構築する方法は、PHOTOMETRICタグとEXTRASAMPLESタグの値の組み合わせです

これらのタグについて読む:

  • PHOTOMETRICは、画像データの色空間を表します。値2は、ピクセル値のコンポーネントがRGBであることを意味しますが、バイトピクセルを想定しており、UInt16ピクセルを持っています(を試行し-co "PHOTOMETRIC=rgb"てエラーが発生しました)。そのため、出力ファイルにPHOTOMETRICタグを指定できません。

  • EXTRASAMPLESは、各ピクセルにN個の追加コンポーネントがあることを指定します。このタグを使用してマージされたファイルを作成する方法がわかりません。または、必要な場合。

それで、更新2では、ColorTableの作成をお勧めしますが、どうやって?3つの入力ファイルでは、ピクセル値は0〜1023です。それらを色と一致させる必要がありますか?1024入力のColorTableを作成する必要がありますか?どうやって?

更新3では、マージされたファイルを作成するときにいくつかのGeoTIFFタグを使用できたようですが、実際にそれらを使用できるかどうか、またはどのように使用するかはわかりません。


1
これを試してください:gdal_mergeが-coを尊重しない何らかの理由で、gdal_mergeを以前と同じように使用し、次にgdal_translate -co PHOTOMETRIC = RGBを使用します。これは私のために働くように見えました。あなたの目標を誤解しているかもしれませんが。

ヒントをありがとう!1つの3バンドジオティフに3つのシングルバンドジオティフをマージしたいと思います。私の問題は、gdal_mergeの出力が実際には空である(ピクセル= 0)ことです。その出力は何にも使用できません。
ホルヘアレバロ2013年

どこかにデータを投稿することは可能ですか?

上司に質問したところ、データを公開できません:-(。実際には、ファイルをスタンドアロンコードと混合して、出力の入力ファイルをバンドごとにコピーすることもできます。gdal_mergeでそれを実行したいと思います。 。私のpoblemは、私がgdal_mergeと出力ファイルのRGBの色の解釈を設定することはできませんです。
ホルヘ・アレバロ

多分、私は同様の問題を抱えていました。これはrgb2pct.pyで機能します。なんで?コマンドの説明:このユーティリティは、ダウンサンプリングされたRGBヒストグラムで中央カットアルゴリズムを使用して、指定されたRGB画像の最適な疑似カラーテーブルを計算します。次に、expand rgbを使用してgdal_translateを実行します。

回答:


6

gdal_merge.pyは、入力画像を「スタック」するための正しいツールです。

最初のバンドに有効なカラーテーブルがあるとすると、次のように使用できます。

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

注:コマンドは-o output_file.tif、入力リストの前に再フォーマットされています。

ドキュメントから:

-pct:最初の入力画像から疑似カラーテーブルを取得し、それを出力に使用します。この方法で疑似カラー画像をマージする場合、すべての入力ファイルが同じカラーテーブルを使用すると想定しています。

出力をテストして、gdalinfo -stats適切にスタックされていることを確認します。

OP用に更新

osgeoリストから、別のフォーマットを試して結果を確認しているようです。

TIFF形式では、各バンドの色の解釈を実際に指定する方法はありません。TIFFファイルを読み取るときにGDALが色の解釈を構築する方法は、PHOTOMETRICタグとEXTRASAMPLESタグの値の組み合わせです。

-エヴァン(ポスター)はGDALを内外で知っています。


実際にはそうしましたが、「エラー6:マルチサンプルTIFFファイルではSetColorTable()はサポートされていません。」というメッセージが表示されます。そして、すべてのピクセルで0を取得します。このエラーの意味がわかりません。
ホルヘアレバロ2013年

更新された質問です。最初のバンドのカラーテーブルが必要です。
ホルヘアレバロ2013年

うーん...応答をありがとう。私はそれらのオプションを試しています。データ型がintではないため、PHOTOMETRIC = rgbを使用できないようです。しかし、私はそれをしています...
ホルヘアレバロ2013年

3

私が考えることができる最初の方法は、VRTを作成し、編集して翻訳することです。

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

必要な場所にcolor interpタグを追加します。

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

その後:

gdal_translate output.vrt output.tif

試しましたが、ラスターファイルが回転しています...
JorgeArévalo2013年

同じSRS /ジオトランスフォームがないということですか?

いいえ、それらはすべて同じジオトランスフォームを持っていますが、ノースアップラスターではありません(回転パラメーターは0ではありません)。また、gdalbuildvrtは回転した地理変換をサポートしていません。ゆがめたくない。
ホルヘアレバロ2013年

うーん。それらをワープしてノースアップラスターを作成する場合、VRTを構築し、必要に応じてColorInterpを追加できます。購入しても、灰色、未定義、未定義が表示されます。最初のバンドのカラーテーブルを作成する必要がありますが、方法がわかりません。質問を更新します。
ホルヘアレバロ2013年

1

入力グレースケールバンドの値は0〜1024ですが、RGBでは各バンドに0〜255の値しか使用できません。

を使用gdal_translate -scale [src_min src_max [dst_min dst_max]]して、ソースファイルを再スケーリングできます。

2回目の実行では、3つのバンドをgdal_merge.pyでスタックして適用できます-co "PHOTOMETRIC=rgb"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.