ImageJ の Analyze Particle をマクロでやるとき,こういう感じで書いていたのだけれど, 別のPCで実行したら白黒反転してカウントされることに気づいた. つまり,対象物が白,背景が黒としてカウントされる.
"threshold 255-255 が正しくない" みたいなこの辺のエラーメッセージが出る.
threshold は 0-0 にならないといけないはずなので,見ていくと,
line 764 の boolean setThresholdLevels(ImagePlus imp, ImageProcessor ip){...}
ってとこで,
ip.getMinThreshold() == ImageProcessor.NO_THRESHOLD
がTrue
imageType!=BYTE
がFalse
Prefs.blackBackground
が True =>threshold255
の真偽が反転-
threshold255 = imp.isInvertedLut()
でFalse
だったので,True
になる threshold255
がTrue
- range が 255-255 に
という流れだった.
Prefs.blackBackground
というのは IJ.Prefs
を import すると使えて,ユーザーごとの設定値を参照したり変更したりできる.
ちなみに,ユーザーごとの設定値は ~/.imagej/IJ_Prefs.txt
にあって,開始時に読んで終了時に保存,という感じらしい.
ということで,
- 開始時に
Prefs.blackBackground
の値をいったん保存 Prefs.blackBackground = False
- 元に戻す
って感じにしたらうまくいった.
import java.lang.Float as JFloat -from ij import IJ, ImagePlus +from ij import IJ, ImagePlus, Prefs from ij.process import ImageProcessor, ImageConverter from ij.plugin.filter import ParticleAnalyzer as PA from ij.measure import ResultsTable from fiji.threshold import Auto_Threshold +bb = Prefs.blackBackground +Prefs.blackBackground = False + imp = IJ.getImage() ImageConverter(imp).convertToGray8() @@ -26,3 +29,5 @@ pa.analyze(imp) rt.show("Result") + +Prefs.blackBackground = bb