1
我试图直接使用来自Java的ImageJ2来创建来自输入图像的二值化图像。如何使用Java在ImageJ2中将图像从8位转换为RGB
A的我的代码有些工作版本是这样的:
final File file = new File("input.png");
try {
DefaultDataTypeService dataTypeService = new DefaultDataTypeService();
Dataset dataset = imageJ.dataset().open(file.getAbsolutePath());
Img inputImg = dataset.getImgPlus();
PluginInfo pluginInfo = imageJ.plugin().getPlugin(Binarize.class);
Binarize binarizeOp = (Binarize) pluginInfo.createInstance();
binarizeOp.setContext(imageJ.getContext());
binarizeOp.setChangeInput(true);
binarizeOp.setFillMaskBackground(true);
binarizeOp.setFillMaskForeground(true);
binarizeOp.setInputData(dataset);
binarizeOp.setInputMask(null);
binarizeOp.setMaskColor(Binarize.WHITE);
binarizeOp.setMaskPixels(Binarize.INSIDE);
binarizeOp.setThresholdEachPlane(false);
binarizeOp.setDefaultThresholdMethod();
binarizeOp.run();
dataset.rgbChange();
DefaultDatasetService defaultDatasetService = new DefaultDatasetService();
Img outputImg = dataset.getImgPlus();
outputImg = outputImg.factory().imgFactory(new UnsignedByteType()).create(outputImg,new UnsignedByteType());
Dataset outputDataset = defaultDatasetService.create(outputImg);
imageJ.dataset().save(outputDataset,"input_binary.png");
} catch (IOException e) {
e.printStackTrace();
} catch (InstantiableException e) {
e.printStackTrace();
} catch (IncompatibleTypeException e) {
e.printStackTrace();
}
运行这段代码,我有一个“input_binary.png”的问题将完全黑色,行为我可以重现使用ImageJ的客户端应用程序。
我在客户端需要做的是将图像类型从“8位颜色”更改为“RGB颜色”。但我无法弄清楚如何使用当前版本的net.imagej库在Java中进行重现。
我知道这将有可能使用1.x库,但我想使用2.x.
任何帮助将不胜感激。
非常感谢您的深入解答。尤其是为了用create()指出错误并向我展示解决问题的更好方法。 – lunactic 2015-03-04 13:05:40