原始 MediaWiki 页面

我知道编辑这个网站吗?
the ImageJ2 platform本页介绍与 the ImageJ2 platform 相关的内容。点击徽标查看详情。

ImageJ 操作

自迁移出 MediaWiki 以来,本页内容尚未经过审查。如果您愿意帮忙,请查看帮助指南

ImageJ Ops 是可重用图像处理操作的框架。 Ops 将 Java 的“一次编写,随处运行”的口号扩展到图像处理算法。

中心目标是使程序员能够在 Ops 框架中编写图像处理算法,然后可以在任何 SciJava 兼容的软件项目中按原样使用,例如ImageJ2CellProfilerKNIMEOMEROAlida

设计目标

Ops 具有三个主要设计目标:

  1. 易于使用和扩展。 必须有大量易于使用的图像处理操作(“ops”),以及用于在新方向上扩展这些操作的简单框架。
  2. 功能强大且通用。 操作应该能够包含任意数量的类型化输入和输出参数,对任意数据结构进行操作,包括以多种不同方式存储的 N 维图像:作为磁盘上的文件、在内存中以编程方式生成或在远程数据库中。使用强大的 ImgLib2 库可以实现这一雄心勃勃的目标。
  3. 非常快。 尽管 ImgLib2 比 ImageJ 的数据模型通用得多,但这种通用性不应以牺牲性能为代价。否则,用户必须支付时间税才能执行他们在 ImageJ 中已经可以执行的操作。 ImageJ Ops 框架需要提供一种方法,用更快但更具体的替代方案来覆盖任何通用但缓慢的操作,并且对用户完全透明。

## 入门

首先阅读这些 Jupyter 笔记本:

Ops 是一种特殊类型的 ImageJ 插件,因此强烈建议对 SciJava plugin framework 有基本的了解。

除了克隆 imagej-ops 本身之外,以下组件还有有用的操作示例:

教程和研讨会

## 常问问题

为什么不将算法实现为“普通的旧 Java”方法?

Ops 匹配框架提供了可扩展性。 Ops 是插件,因此任何开发人员都可以根据需要覆盖特定操作的行为,例如,为了提高特殊情况的性能。请参阅上面的“设计目标”。

C/C++ 或 MATLAB 函数可以转换为操作吗?

是的,但是 Ops 中没有对本机/外部功能的自动包装。 ops-experiments 项目是一项持续的努力,旨在为使用本机代码的操作制定基于 Maven 的构建系统。到目前为止,工作重点是使用 javacpp 的反卷积算法的包装、cuda、mkl 和张量流实现。

是否有 Ops 列表及其功能的简要描述?

有关查看所有可用操作的交互式工具,请参阅Op Finder文档。

对于可用的核心操作,您可以访问 ImageJ Ops javadocs。 net.imagej.ops包下的任何类都与Ops相关。

您还可以使用 ImageJ 中的 Script Editor 并使用 Ops 本身主动搜索。以 groovy 语言为例:

// @OpService 操作
打印 ops.help()

in groovy 会给出每个 Op 签名的列表。 help op 还可以提供有关 ops 或名称空间的信息;例如,ops.help("add")将返回有关可用add操作的信息。

有图像处理的 Ops 吗?

是的,有。查看使用 Ops BrowserImageJ javadocs 中的 net.imagej.ops.* 包的现有操作。

未来需要开发哪些Ops?

Ops 目前正在开发中,如 0.x.x 版本号所示。有关未来发展的想法和讨论,请访问 ImageJ Ops GitHub page 并查看问题和拉取请求。

为什么匹配很重要?

这是任何基于插件的基础设施的必要部分(参见Inversion of control)。核心库(ImageJ Ops)有许多内置操作,但是:

  1. 不可能涵盖所有可能的实现方式
  2. 如果用户必须显式调用其参数的精确签名,那将是不切实际的。

Ops 匹配是一个附加层,允许根据被调用函数的参数定制插件选择。

一个人为的示例:假设 add(array, array) 的默认操作实现迭代数组并组合它们的值。

然后 guava 提出了一种组合数组的方法,速度快了 100 倍;我们不希望基础操作库中存在 guava 依赖项,但我们可以有一个提供 GuavaAddArrayOp 的“imagej-ops-guava”组件。

然后,一位独立开发人员想出了一种新方法来添加数组,速度提高了 50,000 倍。他们将其变成闭源、专有的 Op 并出售。

不管实现的数量如何激增,用户只需编写 ops.math().add(array1, array2) 即可工作。如果他们的类路径上有 guava 实现,速度会更快,如果他们购买专有实现,速度还会更快。但他们的代码不必调整。

另请参阅