データ解析のためのIgorPro活用術
2次元データを1次元データとして出力する
このIgorPro (for Windows) のProcedureは2次元のimageデータにおいて指定した列(行)を別の1次元データとして出力させるものです。
例えば下の図のような128x128のイメージデータがあったとしてオレンジの枠でかかれた領域でx軸方向の1次元データ(オレンジの曲線)として切り出したいという場合に使用します。
Programの内容
2Dのwave, 軸方向、領域を指定し、その成分のみを抽出して1Dのwaveとして出力させる。このとき同じ名前のWaveがある場合は上書きされることに注意すること
使用方法
- メニューバーのmacrosにある"image2curve"という項目を実行させる
- matrixの名前、出力ファイル名前、軸方向、平均化させたい領域の指定
(指定しなかった軸のPoint)を入力する。なお、ダイアログのリストに表示されるmatrixは
active windowのグラフに表示されているmatrixとしている。
カスタマイズ、その他
- imageデータのx,y のスケールが出力ファイルのスケールになります
- matrixにおける演算について
n×m の2Dデータを取り扱う場合、iterate-loop を2度繰り返し全ての行列
要素に対して演算を行うと、計算量は要素の数(n×m)となります。
しかし
wave[]=mat[p][Num]もしくは
wave[]=mat[Num][p]とすると Num 番目の
行、列でまとめて演算を行いますので計算量はm,またはnとなるので演算の量が少なくなります。
ここで pはPointを表す関数です。
ここからProcedureです。
/////////////////////////////////////////////////
// This procedure is creation of 1D wave from 2D data.
// created by M. Nagai on Aug, 1998,
// modified on Jan. 13, 2003
/////////////////////////////////////////////////
Macro image2curve(mat_f,setaxis,Peakwave,p_st,p_fn)
String mat_f="mat"
String setaxis = "x"
String Peakwave="Int1"
Variable p_st = 140, p_fn=110
Prompt mat_f, "select imagewave",popup WaveList("*", ";","WIN:")
Prompt setaxis, "Which axis?", popup "x;y"
Prompt Peakwave, "Saved file name"
Prompt p_st, "set start pixel"
Prompt p_fn, "set final pixel"
Variable p_n=0,datanum,pp,da,db
silent 1
PauseUpDate
if (p_st>p_fn)
pp= p_st
p_st= p_fn
p_fn= pp
endif
//get imformation of X asis
if (CmpStr(setaxis, "x") == 0)
datanum=Dimsize($mat_f,0)
da=DimOffset($mat_f, 0)
db=DimDelta($mat_f, 0)
//get imformation of Y asis
else
datanum=Dimsize($mat_f,1)
da=DimOffset($mat_f, 1)
db=DimDelta($mat_f, 1)
endif
//make new wave
Make/N=(datanum-1)/D/O $Peakwave
$Peakwave=0
if (CmpStr(setaxis, "x") == 0)
do
$Peakwave[]+=$mat_f[p][p_n+p_st]
p_n+=1
while (p_n<p_fn-p_st+1)
else
do
$Peakwave[]+=$mat_f[p_n+p_st][p]
p_n+=1
while (p_n <p_fn-p_st+1)
endif
SetScale/P x da,db,"", $Peakwave
endmacro
ここまで
最終更新日: 2003.1.19
一つ上の項目に戻る