二値化とは
画像や音声などを、コンピュータで処理するために二進化されたデータ(バイナリデータ)として表すことを言います。二値化の方法としては、P-タイル法、モード法、微分ヒストグラム法、判別分析法などがあります。
では、実際に衛星画像を二値化していきます。
ⅰ)lac01.rbをファイルに書き出す
コマンドプロンプトを立ち上げ、lac01.rbのファイルが保存されている作業スペースまで移動した後、
ruby lac01.rb
ruby lac01.rb > hist30
と打ち込みます。
これで、lac01.rbをファイルに書き出すことができました。
ⅱ)Gnuplotでグラフを作る
閾値を定めるため、グレースケールごとの頻度をプロットします。ここでは、Gnuplotを使用するので、(O:)ドライブからGnuplotと書かれたファイルをコピーしてきてください。
Gnuplotのbinファイルの中のwgnuplot_pipesを立ち上げます。
cd '(hist30が保存してある作業スペース)'
plot 'hist30' w l
plot 'hist30' w boxes
set xrange[50:80]
plot 'hist30' w boxes
と打ち込み、プロットの形状を見て閾値を定めます。
今回は閾値を60と定めました。
ⅲ)衛星画像を二値化する
閾値をもとに衛星画像を二値化して、白黒表示にします。
lab01.rbをコピーし、lab02.rbとして保存します。lab02.rbの中を、
file = "B30.ppm" # 入力file
threshold = 64 # B30.ppmの閾値
out_file = "B30_b.ppm" # 出力2値化file
f = open(file,"rb") # バイナリfileをopen
out = open(out_file,"wb")
line = f.gets # fileからヘッダー行読み取り
out.puts line # ヘッダー行をoutに書き出す
40000.times{ # 全セルについて実行
value = f.read(1).unpack("C")[0] # value = 各セルのDN値
binary_value = 255 # 二値化作業
binary_value = 0 if value < threshold # バイナリで書き出す
out.write([binary_value].pack("C"))
}
f.close; out.close # fileをclose
と変更してください。
ちゃんと出来ていたら,次にコマンドプロンプトを立ち上げてください.
以下のように打ち込みます.
ruby lac02.rb
作業領域にB30_b.ppmが出来ているのを確認してください.
無事出来ていたら,それが二値データであることを確認するために
paintshop等で表示させます.
表示した画像が白黒画像ならOKです.
これで今日はおしまいです,お疲れ様でした.
最終更新:2009年06月19日 12:20