我尝试将Java插件编写到ImageJ,它应该:
我有门限手术的问题。我代码的一部分如下所示:
Opener opener = new Opener();
ImagePlus imp = opener.openImage(source);
// Preprocessing
IJ.run("Threshold..." , method);
// Other operations e.g. "open", "outline" etc.
IJ.saveAs(destination);
我的目标是在各种方法中获得二值化的图像。“默认”、“黄”、“中间模式”、"IsoData“、"Li”等)。获得二值化图像的唯一方法是运行:
IJ.run(imp, "8-bit", "");
IJ.run(imp, "Make Binary", "");
但是,我只获得了一个由一种方法进行二值化的图像。如何通过运行Java代码(ImageJ插件)来实现自动阈值?
发布于 2015-06-22 19:24:45
门限对话中的自动阈值方法都是单通道(8位或16位)图像上的算法.在颜色阈值对话框中,它们只适用于24位彩色图像的亮度通道.
若要在Java中再现此代码,请使用以下代码:
IJ.run(imp, "HSB Stack", "");
imp.setSlice(3);
IJ.setAutoThreshold(imp, "Triangle dark");
Prefs.blackBackground = true;
IJ.run(imp, "Convert to Mask", "only");
(将图像转换为8位只不过是使用亮度通道,丢弃色调和饱和度信息。除非您真的使用了“颜色阈值”对话框中的其他滑块,否则最好在应用阈值之前将图像转换为8位。)
发布于 2015-06-22 14:44:53
您似乎错误地使用了IJ.run
方法。第一个参数是包含ImageJ命令的字符串,第二个参数是包含该命令选项的字符串。从文件中:
公共静态无效运行( java.lang.String命令,java.lang.String选项) 运行ImageJ命令,其中包含传递给GenericDialog和OpenDialog类的选项。在命令执行完毕后才返回。要生成run()调用,启动记录器(Plugins/Macro/Record)并从ImageJ菜单栏运行命令。
您还可以使用GUI记录宏Plugins->Macros->Record...
,将记录模式设置为Java,并选择所需的方法和阈值。你会得到这样的东西:
// Color Thresholder 1.49i
// Autogenerated macro, single images only!
min=newArray(3);
max=newArray(3);
filter=newArray(3);
a=getTitle();
run("HSB Stack");
run("Convert Stack to Images");
selectWindow("Hue");
rename("0");
selectWindow("Saturation");
rename("1");
selectWindow("Brightness");
rename("2");
min[0]=139;
max[0]=254;
filter[0]="pass";
min[1]=48;
max[1]=110;
filter[1]="pass";
min[2]=189;
max[2]=255;
filter[2]="pass";
for (i=0;i<3;i++){
selectWindow(""+i);
setThreshold(min[i], max[i]);
run("Convert to Mask");
if (filter[i]=="stop") run("Invert");
}
imageCalculator("AND create", "0","1");
imageCalculator("AND create", "Result of 0","2");
for (i=0;i<3;i++){
selectWindow(""+i);
close();
}
selectWindow("Result of 0");
close();
selectWindow("Result of Result of 0");
rename(a);
// Colour Thresholding-----------------
https://stackoverflow.com/questions/30981006
复制相似问题