ユーザー定義関数とは?
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で実行すると下記のような結果が出力されます。
エルピクセル編集部