test_narray
NArrayのテスト
equire 'narray'
# make a test image
@im=@im2=NArray.int(10,10).fill!(0)
for x in 3..7
for y in 2..6
@im[x,y]=2
end
end
@im[5,5]=10
@im[4,5]=5
@im[6,5]=8
p @im.dim
p @im.shape
p @im.sum
p @im.sum(0..1)
p @im.sum(1)
p @im.sort
p a=@im.sort_index #indexを要素にもつarray
p a[a.max] #maxのindex
p @im[a[a.max]] #maxのピクセルの値
p @im.max #maxの値
結果
o2@am2:~/ruby/fits$ ruby testArry.rb 2 [10, 10] 67 67 NArray.int(10): [ 0, 0, 0, 10, 13, 18, 16, 10, 0, 0 ] NArray.int(10,10): [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 5, 8, 10 ] ] NArray.int(10,10): [ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ], [ 20, 21, 22, 28, 29, 30, 31, 32, 38, 39 ], [ 40, 41, 42, 48, 49, 50, 51, 52, 58, 59 ], [ 60, 61, 62, 68, 69, 70, 71, 72, 73, 74 ], [ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84 ], [ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94 ], [ 95, 96, 97, 98, 99, 23, 24, 25, 26, 27 ], [ 33, 34, 35, 36, 37, 43, 44, 45, 46, 47 ], [ 53, 57, 63, 64, 65, 66, 67, 54, 56, 55 ] ] 55 10 10
require 'narray'
def leftHandSearch(x,y,dxp,dyp) #再帰を使った連続領域範囲の探査
# puts "("+x.to_s+","+y.to_s+")"
@ary[[x,y]]=-1 #探査済み領域はー1とする
if@miny>y then @miny=y end #星像範囲設定
if@maxx<x then @maxx=x end
if@maxy<y then @maxy=y end
if@minx>x then @minx=x end
if ((@im[x+dxp,y+dyp]>@thres)&&(@ary[[x+dxp,y+dyp]]!=-1))
leftHandSearch(x+dxp,y+dyp, dxp, dyp) #直進してよい場合
else #右へ回れ(実際の画像の座標系では、左回りになる)
dxf=dyp
dyf=(-1)*dxp
if ((@im[x+dxf,y+dyf]>@thres)&&(@ary[[x+dxf,y+dyf]]!=-1))
leftHandSearch(x+dxf,y+dyf, dxf, dyf)
end
end
end
# make a test image
@im=@im2=NArray.int(10,10).fill!(0)
for x in 0..4
for y in 0..4
@im[x,y]=2
end
end
@im[2,2]=8
for x in 5..9
for y in 5..9
@im[x,y]=3
end
end
@im[7,7]=9
p @im
p @im[@im.max]
@ary=Hash.new #探査済み領域チェック用
@maxx=@maxy=0
@minx=@miny=10000
@gx_sum=@gy_sum=@im_sum=0
@thres=1 #星像検出の閾値
leftHandSearch(2,2,1,0)
#puts @minx,@maxx,@miny,@maxy #連続領域範囲
(@minx..@maxx).each do |x|
(@miny..@maxy).each do |y|
@gx_sum = @gx_sum + x*@im[x,y]
@gy_sum = @gy_sum + y*@im[x,y]
@im_sum = @im_sum + @im[x,y]
end
end
gx = @gx_sum/@im_sum #星像の重心計算
gy=@gy_sum/@im_sum
puts "("+gx.to_s+","+gy.to_s+")"
o2@am2:~/ruby/fits$ ruby testArry2.rb NArray.int(10,10): [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 2, 5, 10, 8, 2, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ] 0 (5,4) o2@am2:~/ruby/fits$ ruby testArry.rb 2 [10, 10] 67 67 NArray.int(10): [ 0, 0, 0, 10, 13, 18, 16, 10, 0, 0 ] NArray.int(10,10): [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 5, 8, 10 ] ] NArray.int(10,10): [ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ], [ 20, 21, 22, 28, 29, 30, 31, 32, 38, 39 ], [ 40, 41, 42, 48, 49, 50, 51, 52, 58, 59 ], [ 60, 61, 62, 68, 69, 70, 71, 72, 73, 74 ], [ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84 ], [ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94 ], [ 95, 96, 97, 98, 99, 23, 24, 25, 26, 27 ], [ 33, 34, 35, 36, 37, 43, 44, 45, 46, 47 ], [ 53, 57, 63, 64, 65, 66, 67, 54, 56, 55 ] ] 55 10 10 o2@am2:~/ruby/fits$ ruby testArry2.rb NArray.int(10,10): [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 2, 5, 10, 8, 2, 0, 0 ], [ 0, 0, 0, 2, 2, 2, 2, 2, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ] 0 (5,4)
Keyword(s):
References: