2017年1月31日 更新

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。 今回の記事ではImageJのユーザー定義関数について学んでいきます。

968 view お気に入り 0

ユーザー定義関数とは?

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で実行すると下記のような結果が出力されます。

21 件

関連する記事 こんな記事も人気です♪

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ~

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。
柏崎広美 | 1,121 view
シリーズ4.ImageJマクロ言語を用いた画像解析~②二値化処理-3~

シリーズ4.ImageJマクロ言語を用いた画像解析~②二値化処理-3~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。
柏崎広美 | 1,194 view
ImageJ Plugin で数値計算をしてみる #5

ImageJ Plugin で数値計算をしてみる #5

非情報科学研究者 (特に生物系研究者) が ImageJ plugin を作るために超えるべき壁やTipsをまとめます。今回は、面積の平均値や中央値、分散を出力するためのコードをご紹介します。
湖城 恵 | 1,035 view
シリーズ6.マクロ言語を使った画像処理の応用編~ノイズ軽減① 空間フィルタ処理~

シリーズ6.マクロ言語を使った画像処理の応用編~ノイズ軽減① 空間フィルタ処理~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。 今回の記事から応用編としてさらに詳しく画像処理を学んでいきます。最初のテーマはノイズ軽減です。
柏崎広美 | 876 view
ImageJ まとめ

ImageJ まとめ

「このページを見れば,ImageJ のこと全てが解決する」をモットーに,日々更新を行っています.
三好 裕之 | 1,995 view

この記事のキーワード

この記事のキュレーター

柏崎広美 柏崎広美