前回(1999.6.10)は、地図画像を読みこみ、カラーパレットを利用して建物、道路を含むレイヤーを抽出しました。
その後、ユーザの方から以下のコメントをもらいました。
「数値地図画像は1画素8ビットの各ビットに印刷の版が対応しているので,文字等のマスクにより隠れて見えないところでも線はつながっているはずです。
http://www.jmc.or.jp/ken1/gsi/suchi/25gazou/25gazou.html
例えば,道路や線などの「墨版」は第6ビットなので,画素値としては32-63ばかりでなく,96-127など画素値としては半分が対応しているはずです。
私は,初夏の水田と海や川をTM画像上で区別するのが難しいので,予め地図画像から水面のマスクを作りかぶせてしまいました。その時にSMLで抽出したのは以下のような方法です。
O = (I & 2) == 2
ここで,O:出力画像(マスク)(binary), I:入力画像(地図画像)
この方法により,例えば「石狩川」などの注記も無いマスクを作ることができました。このように,論理演算子を使った方が簡単に抽出できると思います。」
非常に有用なコメント有り難うございます。
調べると、これはC言語の「ビットのマスク」演算子の使い方のようです。
ということはSMLでラスタに対して、C言語の演算子が使えるということのようです。
各ビットの意味については、数値画像のReadme.txtに次のように書かれています。
-----------------------------------------------
(2)TIFFファイルの構造
・図葉ファイルは、PackBits圧縮されたTIFF(Revision5.0以上)ファイルである。
・1ピクセル8ビットで表現されたパレットカラー画像であり、各ビットが2万5千
分1地形図の各版(通常は、全部で8版)に対応している。各ピクセルにおいて、
その版に画線があれば1、なければ0である。
版とビット位置の関係は、次のようになっている。
+----+----+----+----+----+----+----+----+ | 注 | 注 | 墨 | 藍 | 褐 | 墨 | 藍 | 褐 | | 記 | 記 | | | | マ | マ | マ | | | マ | | | | ス | ス | ス | | | ス | | | | ク | ク | ク | | | ク | | | | | | | +----+----+----+----+----+----+----+----+ <---- ----> 上位ビット 下位ビット
・各版の内容は、標準的には、次のとおりです。
注記版・・・・・・居住地名や人工物、自然物等の名称、または、建物記号等
注記マスク版・・・注記文字を含む範囲をマスク
墨版・・・・・・・道路、鉄道、建物、境界等
藍版・・・・・・・水涯線、水田
褐版・・・・・・・等高線、がけ、土堤、地下鉄
墨マスク版・・・・樹木に囲まれた居住地
藍マスク版・・・・河川水面、海水面、湖水面
褐マスク版・・・・国道
-----------------------------------------------
従って、注記版は10進数で128、以下順に64,32,16,8,4,2,1に対応します。以上から、以前のSMLを以下のように変えると、各版の抽出ができるようです。
clear()
GetInputRaster(Rin)
lins=NumLins(Rin)
cols=NumCols(Rin)
datatype$="binary"
GetOutputRaster(Rout,lins,cols,datatype$)
for each Rin[row,col] {
#Rout =Rin & 1 #kokudou
#Rout =Rin & 2 #kasen-suimen, kaisui-men, kosui-men
#Rout =Rin & 4 #jumoku ni kakomareta kyojuuchi
#Rout =Rin & 8 #toukou-sen, gake, dote, chikatetu
#Rout =Rin & 16 #suigai-sen, suiden
#Rout =Rin & 32 #douro, tetsudou, tatemono, kyoukai, tou
#Rout =Rin & 64 #chuki-masuku-ban
Rout =Rin & 128 #chuki-ban
}
ほしい版の、行先頭のコメント#をはずして使います。
(抽出例)
例1.注記版(128を使用)、注記マスク版(同64)
例2.等高線、がけ、土堤、地下鉄(8を使用)
文字や境界線の背後の等高線もちゃんとあります。
例3.国道(1)、河川水面、海水面、湖水面(2)
河川水面は墨版(32)で、国道は等高線(8)で切られています。
今後の発展形は、
1.TIFFファイル名から、四隅の緯度経度を計算し、インポートした画像にジオリファレンスを自動で与える。
2.抽出ラスタに自動にジオリファレンス・サブオブジェクトをコピーするようにする。
3.上のSMLをメニュー化する。
4.TIFFファイルの選択を賢くする。(あるフォルダに入れたもの全部を変換対象にする)。
が考えられます。