ユーザー定義関数とは?
ImageJにはじめから入っている関数(Built-in Macro Functionsにある関数)ではなく、ユーザー自身が定義した関数のことです。
同じ処理を繰り返し実行するときに、一度ユーザー関数として記述しておくと同じ処理についてはコードを書く必要がなくなるなどの利点があります。
記述の仕方は下記のようになります。
同じ処理を繰り返し実行するときに、一度ユーザー関数として記述しておくと同じ処理についてはコードを書く必要がなくなるなどの利点があります。
記述の仕方は下記のようになります。
① 返り値がある場合
function 関数の名前(引数1, 引数2…)
{
{
命令文
return; *値を返すときに必要(返り値)
}
② 返り値がない場合
function 関数の名前(引数1, 引数2…)
{
{
命令文
}
◆画像の中で輝度値が10以上50以下, 80以上120以下、150以上200以下であるピクセル数をカウントする関数
任意の画像を開いて下記のスクリプトを実行してみましょう。
① 返り値を記述する場合
run("8-bit"); width=getWidth(); height=getHeight(); function Count(a, b) { Num=0; for(y=0;y<height;y++){ for(x=0; x<width;x++){ Intensity=getPixel(x,y); if(Intensity>=a && Intensity<=b){ Num++; } } } return Num; } Total_1=Count (10, 50); Total_2=Count (80, 120); Total_3=Count (150, 200); print("10以上50以下のピクセル数", Total_1); print("80以上120以下のピクセル数", Total_2); print("150以上200以下のピクセル数", Total_3);
返り値ありのコード
※10以上50以下, 80以上120以下、150以上200以下であるピクセル数をカウントする→本来Count関数内に記述した命令文を3回記述する必要がありますがユーザー定義関数を使うと、1回Count関数内に記述することであとはCount (a, b);と書くだけで同じ処理を実行することができます。
また返り値を書かずに下記のように記述することも可能です。
② 返り値を記述しない場合
run("8-bit"); width=getWidth(); height=getHeight(); function Count(a, b) { Num=0; for(y=0;y<height;y++){ for(x=0; x<width;x++){ Intensity=getPixel(x,y); if(Intensity>=a && Intensity<=b){ Num++; } } } print(Num); } Count(10, 50); Count(80, 120); Count(150, 200);
返り値なしのコード
※ImageJサンプル画像のLena.tifで実行すると下記のような結果が出力されます。