结合ImageJ Jython中的频道?

时间:2018-01-11 18:34:03

标签: python jython imagej

我有一个来自图像堆栈的两个通道,我这样分开了:

red_c, green_c = ChannelSplitter.split(imp)

现在我想将它们水平组合:

combined_img = StackCombiner.combineHorizontally(green_c, red_c)

这会抛出一个错误,表示预期有3个参数,但只提供了2个参数。但是从文档中可以看出combineHorizontally(ImageStack stack1, ImageStack stack2)

为什么这不起作用?

编辑:解决了。原来正确的写作方式是

combined = StackCombiner().combineHorizontally(grn_stack, red_stack)

为什么这需要额外的(),但ChannelSplitter对我来说并不神秘。它们都是从ij.plugin导入的。有人能说清楚这个吗?

1 个答案:

答案 0 :(得分:3)

  

解决了它。

很高兴您找到了它。对于将来,像这样的问题仍然适合ImageJ forum(您似乎也有account),特别是在您询问ImageJ API的具体细节时

  

为什么这需要额外的()但ChannelSplitter对我来说并不是一个谜。

ImageJ是一个Java应用程序,在您的Jython脚本中,您实际上正在调用Java API of StackCombiner。电话

StackCombiner.combineHorizontally(green_c, red_c)
如果combineHorizontallystatic的{​​{1}}方法,则

会有效,但由于它不是,它需要首先实例化一个新的StackCombiner对象。< / p>

Java 中,您必须写:

StackCombiner

Python 中,您不需要new StackCombiner().combineHorizontally(a,b) 个关键字,但仍需要使用constructor

new

相比之下,ChannelSplitter.split(ImagePlus) methodStackCombiner().combineHorizontally(a,b) ,因此您可以在不实例化对象的情况下使用它。