ラスタの透過について

id:yellow_73:20110408 のつづき。
結構ややこしい書き方になっているので、理解を助けられるか混乱させるかどうか分かりませんが、補足説明を書いてみます。

gdalwarp の -dstnodata

UTMと円筒との間で変換すると回転が発生しますので、隙間ができます。-dstnodata は、その際に発生する隙間を埋める値を決めています。これは透過、非透過関係がなく、単に開いた隙間を埋める色を決めているに過ぎません。

NoDataタグ

gdalinfo で見てバンドごとに NoData 255 等と出ます。これを前述の nodata と区別するために NoDataタグ と言うことにします。tiffに埋め込まれたタグのひとつです。
この値と同じになるピクセルはデータが無いピクセルとして扱いますよ、という情報を埋め込むためのものです。

アルファチャネル

どっちかというと非GISな一般的な画像の話。ピクセルの色はRGBであらわしますが、さらに透過度を含ませる場合があります。透過度は、複数の画像を重ねて表示する場合などに効いてきます。透過度が(完全な非透過でも完全な透過でもない)中途になっている場合、下の画像がうっすら見えるようになります。透過度を「アルファ値」、アルファ値の集合を「アルファチャネル」とも言います。頭文字の"A"を取り、"RGBA"等と表現します。ARGB (Android)のときも ABGR (KML) のときもあります。

透過する3つの場合

透過のサポートには、3つの場合があります。どうなっているかはソフトによって異なります。

  • アルファチャネルを見ずにNoDataタグを見る場合
  • アルファチャネルを見てNoDataタグを見ない
  • アルファチャネルもNoDataタグも見る

(両方とも見ない、という場合もありますが今回は無視します)

アルファチャネルを見ずにNoDataタグを見る場合

この場合、アルファチャネルを見ないので、アルファチャネルがどのようになってもレンダリングに全く影響を及ぼしません。
NoDataタグを見るので、あるピクセルについて、全てのバンドでNoDataとピクセルの値が同じ場合、そのピクセルはデータが無いものとして、透過します。
この場合、NoDataタグがR=255, G=255, B=255, A=255 となっている場合、不透明な白色になっているピクセルは全てデータが無いものとして扱います。

アルファチャネルを見てNoDataタグを見ない

この場合は、一般的な画像ビューアで画像を見たのと同じになります。NoDataタグがどうなっていても関係なく、アルファチャネルを見て透過を判断します。

アルファチャネルもNoDataタグも見る

この場合、上の2つのことが同時に発生するのと同じです。
NoDataタグがR=255, G=255, B=255, A=255 となっている場合は透過となりますし、A=0となっているピクセルも透過となります。

ソフトによる違い (確証なし)

  • QGISはアルファチャネルを見ずにNoDataタグを見る
  • MapServerはアルファチャネルを見て、NoDataタグを見ない
  • gdal2tilesはアルファチャネルもNoDataタグも見る