【问题标题】:Run BackgroundSubtracter in jython script for Fiji在斐济的 jython 脚本中运行 BackgroundSubtracter
【发布时间】:2020-04-15 15:44:57
【问题描述】:

我正在尝试创建一个 Imagej/Fiji 脚本来分析显微镜图像。作为管道的一部分,我想使用斐济提供的滚球 BackgroundSubtracter。根据 Imagej API,应该是这样的:

rollingBallBackground(ImageProcessor ip,
                              double radius,
                              boolean createBackground,
                              boolean lightBackground,
                              boolean useParaboloid,
                              boolean doPresmooth,
                              boolean correctCorners)

但是,如果我尝试在三通道图像的一个通道上运行它:

from ij import IJ, ImagePlus
from ij import WindowManager as wm
from ij.plugin import ChannelSplitter
from ij.plugin.filter import BackgroundSubtracter

imp = wm.getCurrentImage()
c1, c2, c3 = ChannelSplitter.split(imp)
c1.show() # This works
c1 = c1.getProcessor()
threshold = BackgroundSubtracter.rollingBallBackground(c1,
                                                      50.,
                                                      False,
                                                      False,
                                                      True,
                                                      False,
                                                      False)

我收到一个错误:

TypeError: rollingBallBackground(): expected 8 args;得到 7 个

如果我附加另一个参数,假设另一个“False”或“1”,我会得到这个错误:

TypeError: rollingBallBackground(): self arg 不能被强制转换为 ij.plugin.filter.BackgroundSubtracter

我做错了什么?

【问题讨论】:

    标签: jython imagej background-subtraction fiji


    【解决方案1】:

    根据我使用此 API 的经验,当我看到“Expected args+1; got args”但我的参数数量肯定是正确的,这意味着我不小心尝试调用 class 方法instance 方法(您的第二个 TypeError 暗示了这一点)。在这种情况下,没有为 BackgroundSubtracter 定义任何类方法

    你非常亲密;要使其正常工作,您需要创建一个 BackgroundSubtracter 的实例,然后按照您显示的方式调用该方法

    BackgroundSubtracter().rollingBallBackground(c1,
                                                 50.,
                                                 False,
                                                 False,
                                                 True,
                                                 False,
                                                 False)
    

    这个方法也没有返回值。如果您的代码按预期运行,threshold 将是 None

    我建议查看 Java 修饰符是什么。我对 Java 不是很熟悉,但了解修饰符的含义对于理解 Jython ImageJ 文档所说的内容至关重要,这对我有很大帮助:

    public void rollingBallBackground(ImageProcessor ip,
                                      double radius,
                                      boolean createBackground,
                                      boolean lightBackground,
                                      boolean useParaboloid,
                                      boolean doPresmooth,
                                      boolean correctCorners)
    

    public 表示该方法可在类外部访问,而private 表示该方法不可访问。

    void 表示没有返回值。

    如果static 一词在这里,那么您就可以在类上调用此方法。但它丢失了,这意味着它只能在实例上调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多