データ解析のためのIgorPro活用術

2次元データを1次元データとして出力する

このIgorPro (for Windows) のProcedureは2次元のimageデータにおいて指定した列(行)を別の1次元データとして出力させるものです。
例えば下の図のような128x128のイメージデータがあったとしてオレンジの枠でかかれた領域でx軸方向の1次元データ(オレンジの曲線)として切り出したいという場合に使用します。

Programの内容

使用方法

  1. メニューバーのmacrosにある"image2curve"という項目を実行させる
  2. matrixの名前、出力ファイル名前、軸方向、平均化させたい領域の指定 (指定しなかった軸のPoint)を入力する。なお、ダイアログのリストに表示されるmatrixは active windowのグラフに表示されているmatrixとしている。

カスタマイズ、その他

  1. imageデータのx,y のスケールが出力ファイルのスケールになります
  2. 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
一つ上の項目に戻る