ImageJのマクロ

463 views
Skip to first unread message

hara

unread,
May 23, 2018, 7:49:26 AM5/23/18
to ImageJ-jp
「ImageJ ではじめる生物画像解析」でImageJについて勉強し、
空撮写真を解析するプログラムをImageJのマクロを作っています。

本書で、マクロの解説はわずかではありましたが、
大変役に立ちました。ありがとうございました。

あとは、helpのwebサイトを参考にしています。
https://imagej.nih.gov/ij/developer/macro/functions.html


気が付いたのですが、上記サイトには、
本書に書いてある命令の「function」が抜けています。
これはどうしてでしょうか。
上記サイトは、全ての命令を網羅しているわけではないのでしょうか。


もう一つ教えてください。
functionの定義内での変数はローカルなものと位置付けられると思います。
functionからの返り値は1つだけしか設定できません。

たくさんの情報を元のプログラムに返すにはどういう方法が良いでしょうか。
全ての値を文字列の形で繋げて返すしかないのでしょか。


本体のプログラムとfunctionの定義内の両方で、
値を保持できるような変数を作ることはできませんか?

よろしくお願いします。

塚田 祐基

unread,
May 23, 2018, 10:42:33 AM5/23/18
to hara, ImageJ-jp
投稿者さま、

書籍の活用ありがとうございます。

ご質問いただいたfunctionについてですが、
挙げていただいている以下のサイト
> https://imagej.nih.gov/ij/developer/macro/functions.html
にはbuilt-in macro functionsが載っていまして、
functionはこれに対してユーザーが定義できる関数の機能になっています。
user-defined function <-> built-in function
のような対応関係です。
なのでリストには載っていないことになります。

もう一つの質問の
user-defined functionの返り値が
複数指定できるかどうかについてですが、
一つのやり方として配列で返す方法があります。
myArray[i]
というような配列のそれぞれに値を入れておいて、
return myArray;
で返せば複数の値は返せるはずです。

> 本体のプログラムとfunctionの定義内の両方で、
> 値を保持できるような変数を作ることはできませんか?
正しく質問を理解できているかわかりませんが、
マクロプログラムの始めに(user-defined functionの外に)
変数を定義するとglobal変数になると思うので、
それをfunction内から呼び出せば本体のプログラムと
functionの定義内の両方で同じ値を扱えることになります。

ご参考になれば幸いです。

塚田 祐基
> --
> このメールは Google グループのグループ「ImageJ-jp」に登録しているユー
> ザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> imagej-jp+...@googlegroups.com
> <mailto:imagej-jp+...@googlegroups.com> にメールを送信してください。
> このグループに投稿するには imag...@googlegroups.com
> <mailto:imag...@googlegroups.com> にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには
> https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com?utm_medium=email&utm_source=footer>
> にアクセスしてください。
> その他のオプションについては https://groups.google.com/d/optout にアクセ
> スしてください。

ystk...@gmail.com

unread,
May 24, 2018, 7:42:02 AM5/24/18
to ImageJ-jp
塚田様

お返事ありがとうございました。

built-in macro functionsには、全ての命令が載っているということで安心しました。

もう一つの質問の方、
「function内は全てlocal変数として扱われる」と勘違いしていました。

functionに入る前の変数はglobal変数としてアクセスできるということであれば、
returnを使わなくても、データの受け渡しは簡単にできるということですね。
逆に、function内で不用意にlobal変数をいじらないように気を付けないといけないですね。

ありがとうございました。


2018年5月23日水曜日 23時42分33秒 UTC+9 塚田祐基:

ystk...@gmail.com

unread,
May 24, 2018, 8:50:13 AM5/24/18
to ImageJ-jp
追記します。

global変数は、macro外ではvar命令文で定義するんですね。
macro内では、普通に「a=1;」のように代入すればいいのですね。

と理解したところで、
命令文 varもbuilt-in macro functionsに載っていませんでした。
varもちょっと特殊な命令という位置づけでしょうか。
他にも載っていない命令があるのでしょうか。

十分理解できていないかのかな?


2018年5月24日木曜日 20時42分02秒 UTC+9 ystk...@gmail.com:

塚田 祐基

unread,
May 24, 2018, 10:57:14 AM5/24/18
to ystk...@gmail.com, ImageJ-jp
投稿者さま、

> 命令文 varもbuilt-in macro functionsに載っていませんでした。
> varもちょっと特殊な命令という位置づけでしょうか。
> 他にも載っていない命令があるのでしょうか。
built-in functionsのリストには命令(もしくは予約語?)
が載っているわけではなくて、関数(入出力するもの)が載っています。
なので、例えばifやforなどもないはずです。

ImageJ macroの予約語が簡単に分かる方法は知らないのですが、
基本的には以下のマニュアルに記載されていると思います。
https://imagej.nih.gov/ij/developer/macro/macros.html

ご指摘されていますが、global変数については
便利なので必要なくとも使ってしまうかもしれませんが、
どこからでもアクセスできると思わぬバグを生み出すこともありますので、
必要なときにだけ、最小限使うことをおすすめします。

ご参考まで。

塚田 祐基
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/optout> にアクセ
> > スしてください。
>
> --
> このメールは Google グループのグループ「ImageJ-jp」に登録しているユー
> ザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> imagej-jp+...@googlegroups.com
> <mailto:imagej-jp+...@googlegroups.com> にメールを送信してください。
> このグループに投稿するには imag...@googlegroups.com
> <mailto:imag...@googlegroups.com> にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには
> https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com
> <https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com?utm_medium=email&utm_source=footer>

Kota Miura

unread,
May 24, 2018, 11:05:05 AM5/24/18
to 塚田祐基, ystk...@gmail.com, ImageJ-jp
はらさん、塚田さん、

Jerome MuttererとWayne Rasbandが書いたもう少し詳しいマクロリファレンス(PDF)のセクション8"8. LANGUAGE ELEMENTS"にオペレータや宣言文などのことがまとまっています。参考にしてください。


三浦


このグループから退会し、グループからのメールの配信を停止するには imagej-jp+unsubscribe@googlegroups.com <mailto:imagej-jp+unsubscribe@googlegroups.com> にメールを送信してください。
このグループに投稿するには imag...@googlegroups.com <mailto:imagej-jp@googlegroups.com> にメールを送信してください。

このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com <https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com?utm_medium=email&utm_source=footer> にアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセ スしてください。

--
このメールは Google グループのグループ「ImageJ-jp」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには imagej-jp+unsubscribe@googlegroups.com にメールを送信してください。
このグループに投稿するには、imagej-jp@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msgid/imagej-jp/c99f31c0-e412-82f7-dc16-24195bd4335b%40b.mbox.nagoya-u.ac.jp にアクセスしてください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

塚田 祐基

unread,
May 24, 2018, 11:26:51 AM5/24/18
to kota...@gmail.com, ystk...@gmail.com, ImageJ-jp
三浦さん、

なるほど、html版よりもpdfの方が充実してますね!
隣にあったので内容同じだと思っていました。ありがとうございます。

塚田 祐基

On 2018/05/25 0:05, Kota Miura wrote:
> はらさん、塚田さん、
>
> Jerome MuttererとWayne Rasbandが書いたもう少し詳しいマクロリファレンス
> (PDF)のセクション8"8. LANGUAGE ELEMENTS"にオペレータや宣言文などのこと
> がまとまっています。参考にしてください。
>
> https://imagej.nih.gov/ij/docs/macro_reference_guide.pdf
>
> 三浦
>
>
> 2018-05-24 16:57 GMT+02:00 塚田 祐基
> <tsukad...@b.mbox.nagoya-u.ac.jp
> <mailto:tsukad...@b.mbox.nagoya-u.ac.jp>>:
>
> 投稿者さま、
>
> > 命令文 varもbuilt-in macro functionsに載っていませんでした。
> > varもちょっと特殊な命令という位置づけでしょうか。
> > 他にも載っていない命令があるのでしょうか。
> built-in functionsのリストには命令(もしくは予約語?)
> が載っているわけではなくて、関数(入出力するもの)が載っています。
> なので、例えばifやforなどもないはずです。
>
> ImageJ macroの予約語が簡単に分かる方法は知らないのですが、
> 基本的には以下のマニュアルに記載されていると思います。
> https://imagej.nih.gov/ij/developer/macro/macros.html
> <https://imagej.nih.gov/ij/developer/macro/macros.html>
>
> ご指摘されていますが、global変数については
> 便利なので必要なくとも使ってしまうかもしれませんが、
> どこからでもアクセスできると思わぬバグを生み出すこともありますので、
> 必要なときにだけ、最小限使うことをおすすめします。
>
> ご参考まで。
>
> 塚田 祐基
>
>
> On 2018/05/24 21:50, ystk...@gmail.com <mailto:ystk...@gmail.com>
> wrote:
>
> 追記します。
>
> global変数は、macro外ではvar命令文で定義するんですね。
> macro内では、普通に「a=1;」のように代入すればいいのですね。
>
> と理解したところで、
> 命令文 varもbuilt-in macro functionsに載っていませんでした。
> varもちょっと特殊な命令という位置づけでしょうか。
> 他にも載っていない命令があるのでしょうか。
>
> 十分理解できていないかのかな?
>
>
> 2018年5月24日木曜日 20時42分02秒 UTC+9 ystk...@gmail.com
> <mailto:ystk...@gmail.com>:
> <mailto:imagej-jp%2B...@googlegroups.com>
>          > <mailto:imagej-jp+...@googlegroups.com
> <mailto:imagej-jp%2B...@googlegroups.com>> にメールを送信してく
>         ださい。
>          > このグループに投稿するには imag...@googlegroups.com
> <mailto:imag...@googlegroups.com>
>          > <mailto:imag...@googlegroups.com
> <mailto:imag...@googlegroups.com>> にメールを送信してください。
>          > このディスカッションをウェブ上で閲覧するには
>          >
> https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com>
>
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com>>
>
>          >
>
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com?utm_medium=email&utm_source=footer>
>
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/msgid/imagej-jp/e005b664-392f-4bd7-bc16-45303cff874b%40googlegroups.com?utm_medium=email&utm_source=footer>>>
>
>          > にアクセスしてください。
>          > その他のオプションについては
> https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>
>         <https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>> にアクセ
>          > スしてください。
>
> --
> このメールは Google グループのグループ「ImageJ-jp」に登録してい
> るユー ザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> imagej-jp+...@googlegroups.com
> <mailto:imagej-jp%2Bunsu...@googlegroups.com>
> <mailto:imagej-jp+...@googlegroups.com
> <mailto:imagej-jp%2Bunsu...@googlegroups.com>> にメールを送
> 信してください。
> このグループに投稿するには imag...@googlegroups.com
> <mailto:imag...@googlegroups.com>
> <mailto:imag...@googlegroups.com
> <mailto:imag...@googlegroups.com>> にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには
> https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com
> <https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com>
> <https://groups.google.com/d/msgid/imagej-jp/9aae8670-24f2-4357-90f0-244ac086bf11%40googlegroups.com?utm_medium=email&utm_source=footer
> <https://groups.google.com/d/optout> にアクセ スしてください。
>
>
> --
> このメールは Google グループのグループ「ImageJ-jp」の登録者に送られ
> ています。
> このグループから退会し、グループからのメールの配信を停止するには
> imagej-jp+...@googlegroups.com
> <mailto:imagej-jp%2Bunsu...@googlegroups.com> にメールを送信して
> ください。
> このグループに投稿するには、imag...@googlegroups.com
> <mailto:imag...@googlegroups.com> にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには、
> https://groups.google.com/d/msgid/imagej-jp/c99f31c0-e412-82f7-dc16-24195bd4335b%40b.mbox.nagoya-u.ac.jp
> <https://groups.google.com/d/msgid/imagej-jp/c99f31c0-e412-82f7-dc16-24195bd4335b%40b.mbox.nagoya-u.ac.jp>
> にアクセスしてください。
> その他のオプションについては、https://groups.google.com/d/optout
> <https://groups.google.com/d/optout> にアクセスしてください。
>
>

hara

unread,
May 26, 2018, 1:05:30 AM5/26/18
to ImageJ-jp
塚田様、三浦様

教えていただき、ありがとうございます。

教えていただいた資料をみて、勉強したいと思います。

今後ともよろしくお願いします。


2018年5月25日金曜日 0時26分51秒 UTC+9 塚田祐基:
Reply all
Reply to author
Forward
0 new messages