「基盤地図情報DEMに基づく傾斜方向ラスターの作成」で触れたように、DEMラスターは RasterHillShader トランスフォーマーによって陰影起伏 (Hillshade) ラスターに変換することができます。このトランスフォーマーが作成する陰影起伏ラスターは白黒の濃淡によって陰影を表現したグレースケールのラスターですが、DEMラスターをカラー画像ラスターに変換したうえで、グレースケールの陰影起伏ラスターから得られる濃淡の比率に基づいて各画素のRGB値を調整することにより、カラーの陰影起伏ラスターを作成することもできます。
ここでは、基盤地図情報DEMデータに基づいて陰影起伏ラスター (グレースケール、カラー) を作成するワークスペース例について、次の2段階に分けて説明します。
1. 基盤地図情報DEMラスターから標高区分カラー画像ラスターへの変換
2. 標高区分カラー画像ラスターから陰影起伏ラスターへの変換
サンプルとしたデータは、基盤地図情報10mメッシュDEM (三宅島の区域を含む2次メッシュ4区画) です。
FME 2016.0.1.2 build 16178
1. 基盤地図情報DEMラスターから標高区分カラー画像ラスターへの変換
FMEワークスペース例 1
[JP_FGD_DEM] リーダー (カスタムフォーマット): 基盤地図情報DEMデータ (XML) をラスターとして読み込む。
RasterMosaicker: 2次メッシュ4区画分のラスターを結合してひとつのラスターを作成する。
Reprojector: 座標系を変換する。
RasterExpressionEvaluator: 標高区分値 (整数) をセル値とするラスターに変換する。
RasterBandMinMaxExtractor: セル値の最小、最大値を求める。
RGBGradationCalculator (FME Hub): 各標高区分値に対応するRGBカラー値を求め、パレットを定義する。
StringConcatenator: パレット定義に Nodata 値用のエントリーを追加する。
RasterPaletteAdder: パレットをラスターに適用する。
RasterPaletteResolover: パレットに基づいて 4バンド (RGBA) ラスターに変換する。
[PNGRASTER] ライター: PNG形式でファイルに出力する。
DEMラスターのセル値は標高値 (実数) ですが、それをある基準によって区分して区分ごとの番号 (整数値) を割り当て、それらの番号をキー値として対応するRGBカラー値を定義したパレットをラスターに与えることによってカラー画像に変換するというアプローチです。
標高値の区分、および、各区分と色の対応づけの具体的な方法は、最終的に得るべき画像の仕様に応じて検討する必要がありますが、この例では、単純に標高値を10m間隔で区分し、対象とする区域 (三宅島周辺) の標高値の範囲で、次の図のように段階的に変化する色を与えることとします (左: 低 -> 右: 高)。
RasterExpressionEvaluator では、次の式によって、DEMラスターのセル値 (標高値) に基づいて10m間隔の区分値 (整数) を求め、それをセル値とするラスターに変換しました。
@if(@isnodata(A[0]), 0, @if(A[0]<10, 1, @uint16(A[0]/10.0)+1))
この式は、標高値が Nodata (海域などでデータがない) の場合は 0, 10m 未満の場合は 1, それ以外の場合は標高値を 10 で除した値の小数部を丸めてから 1 を加えた値を求めています。これによって、Nodata のセルは 0、それ以外のセルは 1 以上の標高区分値 (値が大きいほど標高が高いことを示す連番) のラスターに変換することができます。
RasterMinMaxExtractor は、入力ラスターのバンドごとにセル値の最小値と最大値を求め、リスト属性 _band{}.min, _band{}.max に格納します。Nodata 以外のセル値は 1 から始まる連番の標高区分値としたので、その最大値が、定義すべきパレットのエントリー数 (色の数) ということになります。Nodata 用のエントリーは後で追加します。
RGBGradationCalculator は FME Hub で公開されているカスタムトランスフォーマーで、指定した複数の色 (RGB値) の間を補間して段階的に変化するRGB値を求めるとともに、ラスター用のパレット定義 (文字列) を格納した属性を作成することができます。主なパラメーターの設定内容は次のとおりです。
Seed Colors: #0000ff; #00ffff; #00ff00; #ffff00; #ff0000 (色の範囲の先頭、等分割した中間、末尾のRGB値)
Format of Seed Colors: HTML Color (上記のRGB値の記述形式=HTMLフォーマット)
Number of Destination Color: _band{0}.max (作成する色の数=標高区分値の最大値)
Raster Palette Attribute Name: _palette (パレット定義を格納する属性名)
Raster Palette Interpretation: RGBA32 (パレットの種類=8ビットRGBA4バンド)
Raster Palette Alpha Value: 255 (Alphaバンドの既定値=不透過)
Raster Palette First Key Value: 1 (最初のエントリーのキー値)
Raster Palette Omit Interpretation: Yes (パレット定義先頭行のパレットの種類の記述を省略)
この設定によって、標高区分値 (キー値) 1 以上の部分のパレット定義を格納した属性 _palette が作成できます。さらに、次の StringConcatenator によって、先頭行のパレットの種類の記述 ('RGBA32') と Nodata 用のエントリー (キー値 = 0, RGBA値 = 0,0,0,0) を先頭部分に追加してパレット定義を完成させました。
パレット定義の最初の数行は、次のようになります。パレット定義の書式については、RasterPaletteExtractor トランスフォーマーのヘルプを参照してください。
RGBA32
0 0,0,0,0
1 0,0,255,255
2 0,13,255,255
3 0,26,255,255
4 0,40,255,255
5 0,53,255,255
(以下略)
RasterPaletteAdder によってこのパレット定義をラスターに与えるとともに、陰影起伏ラスターに変換するための準備として、RasterPaletteResolver によってパレットのRGBA値を各バンドの値とするラスター (8ビットRGBA4バンド) に変換しました。ここまでで、次の図のようなカラー画像ラスターが得られます。
結果 1: 標高区分カラー画像ラスター - RasterPaletteResolver からの出力
基盤地図情報10mメッシュDEM (三宅島を含む2次メッシュ4区画) に基づき作成
2. 標高区分カラー画像ラスターから陰影起伏ラスターへの変換
上記のワークスペース例にいくつかのトランスフォーマーを追加することにより、陰影起伏ラスターが作成できます。
FMEワークスペース例 2 (追加部分)
RasterHillshader: DEMラスターを陰影起伏ラスター (グレースケール) に変換する。
RasterBandNodateRemover: 標高区分カラー画像から Nodata 定義を削除する。
RasterExpressionEvaluator: 標高区分カラー画像のRGB値を調整し、陰影起伏ラスター (カラー) に変換する。
RasterExpressionEvaluator では、Mode パラメーターで "Two Rasters" を選択することにより、2つのラスター A, B に基づくセル値の演算を行うこともできます。ここでは、RasterHillshader で作成したグレースケールの陰影起伏ラスターを A、標高区分カラー画像ラスターを B としました。
RasterExpressionEvaluator によって2つのラスターに基づくセル値の演算を行う場合、A, B の範囲、解像度は厳密に同じであるとともに、Nodata 値の定義の有無、定義がある場合はその内容も同じである必要があります。この例では、RasterHillshader で作成した陰影起伏ラスター (A)、カラー画像ラスター (B) ともに同一のDEMラスターから変換した後、範囲、解像度を変更する処理はしていないので、それらが同じであることは保証されていますが、A には Nodata 値の定義がないのに対して、B の方には Nodata 値の定義があります。そのため、RasterBandNodataRemover によって B から Nodata 値の定義を削除しました。
RasterHillshader が作成するグレースケールの陰影起伏ラスターは、デフォルトでは 2 バンド (0-255 の範囲で濃淡を表すバンド、および、Nodata だったセルを 0: 透明、それ以外を 255: 不透明とする Alpha バンド) を持っています。したがって、グレースケール陰影起伏ラスター (A) の最初のバンドのセル値 A[0] を 255 で除した値 (濃淡の比率) を標高区分カラー画像ラスター (B) の R, G, B バンドのセル値にそれぞれ乗じることにより、陰影のついた R, G, B 値が求められ、また、A ラスターの第2バンドのセル値 A[1] を Alpha 値とすることで、Nodata だったセルを透明にすることができます。
以上の考え方に基づくパラメーター設定例は、次のとおりです。
結果 2: 陰影起伏ラスター (グレースケール) - RasterHillshader からの出力
基盤地図情報10mメッシュDEM (三宅島を含む2次メッシュ4区画) に基づき作成
結果 3: 陰影起伏ラスター (カラー) - RasterExpressionEvaluator_2 からの出力
基盤地図情報10mメッシュDEM (三宅島を含む2次メッシュ4区画) に基づき作成
0 件のコメント:
コメントを投稿