久しぶりの ImageJ Pythonプログラミング Tipsです。最近引っかかったのですが、ImagePlusオブジェクトを Duplicateしたものに対して、各ピクセルへの反復処理を行っていたところ、どうも配列の範囲を超えてしまうようなのです。
おかしいなと思って探ってみると、元のImagePlusオブジェクトのごく一部の部分しか複写されていません。結局ImagePlusオブジェクトにROI (選択範囲) の設定を行い、それを
imp1 = Duplicator().run(imp0)
で新たなImagePlusに複写すると、ROIが掛かっている部分しか複写しないことが分かりました。
ただROIが掛かっているImagePlusをさらにチャンネル分解などの操作を行うと、分割先のImagePlusではROIが解除されるようです。それで今まで問題が出ていなかったのですが、今回モノクロの単チャンネルの画像処理をやろうとして引っ掛かってしまったのでした。
今回は、ROIを掛ける前にImagePlusに複写することにして問題を回避しましたが...
なお、imp1 = imp0.getProcessor().Duplicate() という方法もありますが、こちらも同じなのか確認していません (が、おそらく同様かと思います)。
------------
以下の記事もご参照ください。
以下の記事ではこれはバグ(?)と書きましたが、結局、ROIがあるとROIからしかデータの複写を行わないという仕様のためようです。