Lacunarityを実際に求めてみよう

今回はエディターとrubyを用いて実際にLacunarityを求めてみましょう.
本来なら実際の画像データを二値化することから始まりますが,それは今回は考えず,
今日は模擬的なバイナリーデータを作成し,そのLacuanrityを求めます.

二値化の作業については"2009-3-26:衛星画像を二値化してみよう"を参照ください.


それでは,エディターを作成したいと思います.

バイナリーデータの作成

エディターを立ち上げてください.
ファイル名は lacunarity01.rb にします.

まずはじめに,今回考えるバイナリーデータを作成します.
これは,衛星画像をある閾値で二値化したときに得られるデータに相当します.
以下のように打ち込んでください.

imageX = [0,0,0,0,0,
       1,1,0,0,1,
       0,1,0,0,0,
       0,0,0,0,1,
       0,0,0,0,0]

imageY = imageX.collect{|x| x*255}
image = imageY.pack("C25")

m = n = 5
r = 2

これは以下のような二値画像を示しています.


Gliding box中の値の総和を求める

次に一辺が2マス分のgliding boxを考え,その中に入る値の総和を求めます.
以下のように入力します

# Gliding_box中の値の総和
# r~Gliding_boxのサイズ
# Gliding_boxの中の数字を一列の文字列(x)にする
# image~もと画像データの名前
# m~もと画像データの横サイズ
# n~もと画像データの縦サイズ
# k~Gliding boxの左上隅の全体の通し番号における番号
# l~Gliding boxの最上段を0行目とカウントしたときのGliding boxの任意の行

def sum_in_box(r,image,m,k)
 x = ""                
 r.times{|l| x += image[k+l*m,r]} 
 xa = x.unpack("C*")        
 sum = 0                
 xa.each{|v| sum += v/255}    
 return sum             
end


Gliding_boxを動かし,box内の値の和の配列を作成

次に,Gliding_boxをスライドさせ,各時々のGliding_box中の値の和を
配列に挿入します.
「Gliding box中の値の総和を求める」で打ったコマンドの下に続けて,
以下のように打ち込んでください.

# Gliding_boxをスライドさせ,各Gliding_box中の値の和を配列(array)に挿入

def scan_box(image,m,n,r)
 array = []
 (n-r+1).times do |j|
  (m-r+1).times do |i|
   k = i + j*m

   array << sum_in_box(r,image,m,k)
  end
 end
 array
end

平均値,分散,Lacunarityを計算

上で作成した配列(array)の平均値,分散,Lacunarityを計算してみましょう.
上に続けて,以下のように打ち込んでください.

# 配列(array)から平均値,分散,Lacunarityを計算
def lacunarity
 require 'mean_var'
 mean,var = mean_var(array)

p [mean,var]

 lac = var/mean**2 + 1
end

arry = scan_box(image,m,n,r)

p array

lac = lacunarity(array)
p lac

これで,最初に作成したバイナリーデータの平均,分散,Lacunarityを求める
ための式が出来ました.後はrubyで走らせればバイナリーデータの平均,
分散,Lacunarityが分かるはずです.

平均,分散,Lacunarityを見てみよう

上で作ったファイル(lacunarity01.rb)を好きなところに保存してください.次に,コマンドプロンプトを立ち上げ,ファイルの保存先に移動します.
移動したら,以下のようにコマンドプロンプトに打ち込みます.

ruby lacunairty01.rb

すると以下のように表示されるはずです.
以上より次のように表示されます.

今回はここまでになります.お疲れ様でした!!

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年04月14日 11:48
添付ファイル