ArcMapで単バンドのラスタ データをArcMapに開く際、思った色と違って表示される場合があります。たとえば1ビットのラスタを開くと、普通と黒の2階調で表示すると思うものですが、こんな感じでおかしな色で表示される場合があります。
今回あたった問題は、1ビットの2階調画像をジオリファレンスで補正した際、NoDataに該当するピクセル値が0となり、等高線を示すピクセルと同じに見なされてしまうことから始まりました。そもそも、データのあるところは"1"、ないところは"0"と考えると、白黒反転した画像を普通の画像処理ソフトで作っていればよいという話だったりしますが、有効なデータ部分、無効なデータ部分、NoData部分とをはっきりと分けて処理させたかったことからカラーマップを作成しようと思いました。3つのピクセル値を持たせるには、前処理として1ビットから4ビットや8ビットなどにラスタを変換する作業からはじめます。
ArcGISでは、ラスタレイヤの表現方法は5種類あります。これはレイヤ プロパティのシンボル タブで確認することができますが、使用できるシンボルは、読み込ませるラスタデータの種類によって分かれてきます。ArcObjectsを知ってるとここらへんの機能が一目瞭然で分かります。
- 分類:RasterClassifyColorRampRenderer
- カラーマップ:RasterColormapRenderer
- RGB表示系:RasterRGBRenderer
- ストレッチ:RasterStretchColorRampRenderer
- 個別値:RasterUniqueValueRenderer
そもそも、ArcObjectsを使えば直接ラスタ データセットにアクセスしてカラーマップをいじることができるのですが、コード量も多くなって面倒だと思ったので今回はGUIで操作する方法を調べてみました。
1.カラーマップ ファイルを定義する方法
GRIDフォーマットに限り、GRIDと同一名でカラーマップ ファイル(*.clr)を作成すれば各ピクセルごとに表示するRGB色を割り当てることができます。この方法はTIFFやIMGには適用できません。
IMGはカラーマップを自ファイル内に、TIFFの場合はauxファイルにバイナリとして格納しているので直接は操作することができません。ただ、一旦GRID形式にしてカラーマップ ファイルを作成してArcMapに読み込ませ、さらにそれをTIFFやIMGにエクスポートするとカラーマップが定義されたIMGなどを作成することができます。カラーマップが適用されているラスタ データをArcMapに追加すると、シンボル設定は「カラーマップ」がデフォルトになります。
カラーマップ ファイルの作り方
//www.esrij.com/support/arcview3/material/mesh/infomail/infomail_077.html
また、ArcToolboxを使えば他のラスタデータに定義されているカラーマップを該当のラスタに割り当てることもできます。
ArcToolbox > データ管理ツール > ラスタ > カラーマップの追加
ただし、このツールにはデータの制約があり、clr で定義したカラーマップはテンプレートに適用できないようです。GRIDにもauxファイルにカラーマップの情報を持たせることができ、clrと共に配置すると、auxファイルの定義を優先します。
データ変換を繰り返すので操作が面倒です。やはり簡単に操作させるためには自分でツールを作るしかないですね。
2.RGBを示したテーブルを追加する
ラスタ データにもテーブルを作成することができます。ラスタレイヤから属性テーブルを表示し、"Red"、"Green"、"Blue"というShort Integer型のフィールドを作成します。そして、それぞれのフィールドにRGB値を256段階で入力します。レコードへの入力はエディタ ツールバーから編集の開始で入力できるようになります(編集対象のワークスペースはなぜか"シェープファイル"として認識されるようです)。ラスタ データのテーブルにRGB値をもっていると、デフォルトのシンボルは「個別値」となります。たしかテーブルを表示できるラスタは単バンドのみのはずです。また、単バンドなのにテーブルが表示できなかったら、ArcToolboxで追加するように設定できます。
//webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Raster_dataset_colormaps
ただ、RGBを設定する方法は、マニュアル通りに操作してもうまく反映されませんでした。この部分はもう少し調べてみます。