二値化とは

  画像や音声などを、コンピュータで処理するために二進化されたデータ(バイナリデータ)として表すことを言います。二値化の方法としては、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