原始 MediaWiki 页面

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

ImageJ2 资助提案

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

以下是 2009 年中期 ImageJDev 资助提案的原文。

Please note that ImageJ2’s project directions evolved substantially as it developed, so the text below is dated, but in many ways, this document continues to represent the project’s conceptual core.

总结

目的:完善 ImageJ 的核心设计,以满足科学界更广泛的需求。

成像是现代生物学家可用的最强大的工具之一,定量显微镜和图像分析的最新进展极大地加速了我们对许多复杂和动态过程的理解。 NIH 的开源§§2§§§软件自 1997 年发布以来,在许多此类项目中都非常有用。任何成功的软件项目,经过一段时间的持续增长和添加超出原始预期范围的功能后,都将受益于随后一段时间的审查和重构,ImageJ 也不例外。这样的审查有助于该计划保持对新人的可访问性,对专家来说足够强大,并且与不断发展的社区相关。此外,现有 ImageJ 社区以及由于 ImageJ 的局限性而阻碍其构建的研究人员迫切需要满足的需求,促使我们提出以下工作来改进 ImageJ 的功能和互操作性:

目标 I – 改进 ImageJ 核心架构

ImageJ 项目的开发和稳定性、与其他软件的互操作性以及支持新功能和应用程序的能力需要对核心架构进行改进:

  1. 将数据模型与用户界面分离 – 当前的 ImageJ 与其 GUI 紧密耦合,阻碍了它在许多应用程序中的使用。我们将把 ImageJ 数据模型与其显示分离。这将实现数据的替代视图、动态图表和实时链接显示等功能,最重要的是,能够在计算集群上以无头模式使用 ImageJ 或作为独立功能库。
  2. 引入算法扩展框架 – 为了在独立开发的算法之间实现更广泛的互操作性,并能够以多种脚本语言记录和编写模块化宏,我们将引入一个明确声明输入和输出的框架,包括图像之外的数据类型,例如分割结果、数值统计和其他元数据,该框架是在成功的分析工作流程软件之后建模的。
  3. 拓宽图像数据模型 – 我们将扩展 ImageJ 以处理重要的图像类型,包括大量图像平面、超过 5D 的维度、高分辨率图像平面以及存储在数据库中的图像。数据模型还将利用图像元数据,随着成像实验变得更加复杂,这是必需的。

目标 II – 通过将 ImageJ 与现有开源程序连接来扩展功能

为了确保开发朝着最大化互操作性的实用方向进行,并改进 ImageJ 的功能,我们将改进的 ImageJ 框架与两个现有的开源生物学应用程序 VisBioCellProfiler 相连接。我们将把 VisBio 重新设计为一套 ImageJ 扩展,利用改进的数据模型提供强大的 3D 可视化和大规模多维图像分析。我们将 CellProfiler 与 ImageJ 链接起来,允许用户在两​​者之间执行分析工作流程,从而可以共享算法。

目标 III – 在保持兼容性的同时发展社区驱动的开发

ImageJ 拥有强大的、成熟的用户群,拥有数千个插件和宏,用于执行各种任务;对 ImageJ 的拟议更改将以保留现有代码功能的方式完成。为了促进不断发展的社区的参与、理解和热情,我们建议采用与其他现代、成功的开源项目一致的几种“最佳实践”,这些项目结合在一起将建立在 ImageJ 社区驱动开发的坚实基础上。这将包括建立一个具有标准扩展位置的公共源代码存储库、部署单元测试和持续集成系统、增加现代语言功能的使用以及开发集成的在线帮助系统。

结论

总之,这些改进将增强 ImageJ 的功能和互操作性,巩固和扩大依赖它在生物医学所有领域进行重要研究的研究人员社区的努力。

方法

目标 I – 改进 ImageJ 核心架构

多年来,在外部开发人员的许多贡献下,ImageJ 随着要求的功能的添加而有机发展。结果是一个具有广泛功能的程序,能够解决各种图像处理和分析问题,特别是在生命科学领域。然而,这种增长模式虽然受到 ImageJ 的主要开发人员Wayne Rasband的精心控制,但并不能替代采用模块化设计从头开始构建的整体工程包。任何成功的软件项目,经过一段时间的持续增长和添加超出程序最初意图范围的功能后,都将从随后一段时间的审查和重构中受益,ImageJ 也不例外。这样的审查有助于该计划保持对新人的可访问性,对专家来说足够强大,并且与不断发展的社区相关。 基于现有 ImageJ 社区未满足的迫切需求以及由于 ImageJ 的局限性而阻碍在 ImageJ 上构建的几个开源项目的需求,我们将这一目标分为三个子目标,以最大程度地受益和扩大 ImageJ 社区:

目标 IA – 将数据模型与用户界面分离

许多开发人员希望将 ImageJ 用作库,在无 GUI 的情况下以无头模式进行批处理,或与外部用户界面(Swing、SWT、Java3D 等)集成。当前的 ImageJ 与 Java 的抽象窗口工具包 (AWT) 紧密耦合,阻碍了它在这些上下文中的使用。

为了克服这个问题,我们将采用一种流行且成功的设计模式,称为模型-视图-控制器 (MVC),将 ImageJ 数据模型与其显示解耦。该范例创建了一个两层程序,其中有一个“粘合层”用于连接两者。下层是数据或“模型”,在 ImageJ 的情况下是图像本身。 ImageJ 的当前实现隐式地将屏幕上的一个窗口与每个打开的图像关联起来;相反,通过 MVC 设计,图像数据将是独立的,根本不需要任何图形用户界面 (GUI)。这样的设计很有用,例如,对于外部应用程序来说,可以使用 ImageJ 作为库,读取图像、处理图像并输出结果,所有这些都不需要用户进行任何交互。上层是 GUI 或“视图”,它通过粘合层或“控制器”连接到模型。这种设计允许任意数量的链接窗口显示相同的基础数据,可能具有不同的查看参数,例如颜色表或图像缩放。

我们还将使用 Java 的事件驱动方法为其他软件提供一种在 ImageJ 的模型发生变化时“监听”的方法,从而实现动态图表和实时链接显示等功能。通过这种设计,对底层模型的更改将自动传播到所有活动的链接视图,并且用户与视图的交互(例如裁剪图像)将能够更改模型。

重构 ImageJ 以使用 MVC 设计是一项重大工作,但幸运的是,在这个方向上已经完成了初步工作:Grant Harris 撰写了一份白皮书 (ImageJX_Mar09.pdf),描述了他迄今为止为部署可扩展、模块化 GUI 支持的界面驱动架构所做的努力。随着进一步的发展,我们将把 ImageJ 转变为一个可供多种科学图像软件使用的灵活库。

Aim IB – 引入算法扩展框架

ImageJ 有一个插件基础设施,用于通过用户创建的分析算法和任务来扩展 ImageJ 的功能。虽然方便且应用广泛,但该机制仅支持单图像输入、单图像输出处理,并且需要临时处理更复杂的分析结果(例如图形)。这种方法虽然灵活,但限制了分析算法之间的互操作性。更通用的扩展框架将使独立开发的算法之间实现更广泛的互操作性。沿着这些思路,我们将定义一种扩展方法,以清楚地声明其输入和输出,包括图像之外的数据类型,例如分割结果、数值统计和其他元数据,以 CellProfiler 的分析工作流程系统为模型。有了这个更加“强类型”的框架,就可以准确定义哪些分析模块的输出数据应该输入到其他分析模块的哪些输入参数中,从而定义更复杂的分析过程,能够处理各种数据,不仅包括图像平面,还包括分割结果、每个图像和每个实验的统计数据以及其他数值数据。

ImageJ 的另一个有用功能是对小脚本(在 ImageJ 术语中称为“宏”)的内置支持,这些脚本执行一系列命令和插件来创建用于分析的微型工作流程。通过宏,可以将分析例程链接在一起,一次批量处理许多图像,或两者的组合。然而,ImageJ 宏语言虽然在某些方面与 Javascript 等脚本语言相似,但具有独特的语法,通常不如 Jython、Beanshell 和 Clojure 等独立开发的脚本语言强大。我们不会不断尝试在表达能力和功能方面“赶上”这些语言,而是利用类似于 Aim IA 的 MVC 设计,以可扩展、模块化的方式支持多种脚本语言。通过这种方法,用户可以用自己选择的语言编写 ImageJ 脚本,甚至可以使用 ImageJ 的宏记录器功能从 ImageJ 用户界面操作生成此类脚本。

Aim IC – 拓宽图像数据模型

与许多图像分析程序一样,ImageJ 能够熟练地处理常见的、非科学的二维图像格式(例如 JPEG、PNG 和 TIFF)。不过,与许多其他图像程序不同的是,ImageJ 越来越多地努力支持 2D 之外的多维科学图像,包括表示三个空间维度 (3D) 的图像堆栈、作为附加维度的时间以及颜色提供附加维度的多通道图像。五维或更多维度的图像在各个科学学科中变得越来越普遍;例如,荧光光谱寿命成像[19, 21] 产生超过 5D 的尺寸,而 ImageJ 目前不支持。 我们将扩展 ImageJ 的功能,以使用维度轴长度的张量表示来处理任意维度的图像数据,每个像素具有任意数量的通道。处理代表不同维度的图像堆栈的一个重要方面是,正确处理和支持图像附带的元数据变得至关重要。 ImageJ 有一个最小的元数据模型,支持指定物理宽度、高度和图像平面切片距离,仅此而已。元数据面临的巨大挑战是,每个学科都有对其特定类型的分析至关重要的不同信息,因此没有一种“正确的方式”来表示所有信息。然而,随着每个学科开发数据模型来描述其元数据(例如开放显微镜环境为光学显微镜采集元数据所做的工作[15]),ImageJ 应该提供将使用这些数据模型表达的元数据附加到图像的灵活性,以便识别特定元数据风格的分析模块可以利用和操纵它(如果存在)。通过这种方式,分析工作流程可以在可行的情况下共享信息,而无需尝试强制数据采用过于严格的表示形式。

另一个问题是处理不断增长的图像数据,因为它经常超出可用的计算机内存。 ImageJ 提供了一种“虚拟堆栈”功能,可以根据需要一次从磁盘中提取一个图像平面,以避免一次在磁盘上存储大量数据,但此功能仅是此类技术可能实现的功能的边缘。通过智能缓存,无需过多的内存即可实现更好的性能。此外,既然 ImageJ 能够对内存中的数据和磁盘上的数据进行相同的操作,为什么不能对网络上的数据(例如远程数据库或网站上的数据)进行同样的操作呢?我们将使用接口驱动的架构来抽象图像数据的来源,磁盘上的图像、来自 URL 的图像、存储在数据库中的图像等,只要有足够的带宽,所有这些都可以同等地访问和运行。

现代数据集不仅在图像平面的数量上有所增长,而且每个单独平面的空间大小也在增长。数字病理学等一些学科现在可以生成超过 400 兆像素(20,000 x 20,000 像素)的整个载玻片的巨大图像平面,很少有图像软件应用程序能够直接处理。通常,这样的图像平面已经超出了可用的计算机内存,这意味着需要一种更聪明的方法来有效地处理数据。我们建议在 ImageJ 中添加一种多分辨率平铺机制,类似于 MapQuest 和 Google Maps 等地图网站,能够一次分析一块图块,根据需要从数据源检索图像图块,类似于上面概述的平面缓存方法。

ImageJ 还缺少科学图像处理中常见的一些图像类型。具体来说,我们将添加对有符号 8 位整数、无符号 32 位整数和双精度浮点图像的支持。

目标 II – 通过将 ImageJ 与现有开源程序连接来扩展功能

为了推进 ImageJ 的功能集,并证明 Aim I 中的底层软件工程改进能够实现互操作性和新功能,我们建议将两个现有工具包与 ImageJ 连接起来。

首先,我们将把 VisBio 重新设计为一套 ImageJ 扩展,利用改进的数据模型提供强大的 3D 可视化和海量多维生物图像数据分析。其次,我们将 CellProfiler 与 ImageJ 链接起来,允许用户在两​​者之间执行分析工作流程,这样 CellProfiler 模块就可以利用 ImageJ 扩展,反之亦然。这两个应用程序将展示两种截然不同但同样有效的在科学图像软件中利用 ImageJ 代码库的方法,并且两者都将作为其他软件寻求实现类似目标的模型。

Aim IIA – 在 ImageJ 框架内继续开发 VisBio

虽然 ImageJ 对于许多任务都非常有用,但其当前版本在生命科学图像处理方面存在一些限制。具体来说,它缺乏以下健全的机制:

  1. 处理任何大小、维度和文件格式的生命科学数据。
  2. 使用任意切片、体积渲染和正交堆栈投影等技术以 3D 形式可视化数据。
  3. 通过将操作序列链接在一​​起来启用分析工作流程。

为了满足这些要求,我们创建了VisBio,这是一种生物可视化工具,旨在轻松可视化和分析多维数据[10]。我们的主要重点是用于处理大量 N 维光学显微镜数据的通用基础设施。大多数可用的生物软件包仅限于最多 5D(空间、时间和通道),或者特定于特定模式,例如光谱寿命。我们希望 VisBio 能够超越这些限制,同时还为特定模式提供有针对性的分析功能。 为了实现上述三个目标,VisBio 需要一个灵活的多维数据引擎,将数据本身和图形用户界面分开。用于科学可视化和分析的VisAD库为此类引擎提供了基础,该引擎具有强大的3D可视化功能以及数据和显示之间的严格分离。因此,上面的第 2 项相当简单,我们的大部分精力都花在了其他两个需求上:支持海量多维图像数据(无论文件格式如何),并具有通用的分析工作流程系统。

毫不奇怪,在开发软件的过程中,我们发现自己实现了多种文件格式的阅读器。我们很快意识到这种文件格式支持作为一个独立的库对社区非常有用,因此我们将其分成自己的包 Bio-Formats,并为 ImageJ 创建了一套 Bio-Formats 插件。

与此同时,ImageJ 社区中越来越多的运动开始表示有兴趣克服许多与我们在 VisBio 上的工作相同的限制。近年来,ImageJ 作为一个框架已经有了一些实质性的改进,但还不足以满足社区的需求:

  • ImageJ 现在支持多达五个维度的数据(3 空间、跨时间和多通道),但没有更高维度的抽象。例如,寿命、光谱和偏振分量在光学显微镜中变得越来越常见。
  • ImageJ 现在具有“虚拟堆栈”的概念,可以根据需要从磁盘或其他来源提取数据,允许处理大于可用内存的数据集,但它不会智能地缓存部分数据以提高性能。
  • 现在存在一些有限的 3D 查看器插件,但仍然没有将图像数据与显示解耦的核心基础设施。许多应用程序需要使用多个链接视图,其中一个视图中的用户操作可以交互地更新其他视图。

VisBio 是我们解决这些问题的最初尝试,但最终我们在 Bio-Formats 级别上解决了其中的几个问题,因为这样做很方便。例如,由于许多数据格式包含超过 5D 的多维数据,因此 Bio-Formats 包含 N 维图像数据的表示,该数据最初是 VisBio 数据引擎的一部分。 Bio-Formats 还提供通用缓存机制,旨在智能管理内存中的图像平面子集。然而,即使我们已经开始解决 VisBio 中的一些需求以及 Bio-Formats 中的一些需求,这些代码库和 ImageJ 之间仍需要更紧密的耦合。

展望未来,我们预计 ImageJ 和 Bio-Formats 之间的耦合会更紧密,将这些功能和其他功能合并到 ImageJ 框架中(目标 1c)。除了已经提到的这些功能之外,Bio-Formats 元数据模型对于 ImageJ 充实其元数据支持也很有用。 与 VisBio/Bio-Formats 建立更紧密的耦合还将为 ImageJ 提供以下新功能(上面的 #2 和 #3 项):

3D 可视化。一旦模块化显示架构到位(目标 1a),我们将把 VisBio 可视化方法调整到 ImageJ 框架中。我们将提供一套 VisBio 3D 显示模块,用于可视化图像堆栈,提供与 VisBio 目前可用的相同灵活的显示选项,但与 ImageJ 框架集成。一些例子包括:半透明体积渲染;交互式任意切片;透视或正交模式下的图像堆栈视图;交互式颜色表操作;在单个窗口中叠加多个数据集; VisBio 驱动的图形覆盖,包括形状和文本。通过这种集成,可以直接对 VisBio 窗口中可视化的数据执行 ImageJ 操作,或者在支持 VisBio 的上下文中可视化 ImageJ 插件的结果。

分析工作流程系统。引入更强类型的扩展框架(技术目标 1b),包括对 ImageJ 框架内脚本语言的模块化支持,将实现强大的分析工作流程基础设施。 ImageJ 脚本将是一种记录和重复在给定数据集上执行的步骤的方法。在这方面唯一剩下的主要挑战是与其他分析工作流程系统的互操作性。如果可能,我们将调整或与提供相关功能的其他项目集成,包括OMERO platformJe’XperimentBisque。尽管这一努力可能不会保留“VisBio”的绰号,但这种整合历来是 VisBio 的长期设计目标。

在可行的情况下,我们将为这些工具导出一种通用语言,用于描述其分析,这将有助于跨多个数据集执行的可重复性。这种通用语言将是显微镜采集元数据的 OME-XML 模式的扩展,并将以人类和机器可读的方式描述工作流程中采取的步骤。在各种工具范式不同的领域,我们将确保可以将一个系统的分析结果嵌入到另一个系统中,这样就不会丢失有关工作流程的信息。例如,在 OMERO 平台中,可以将二进制文件(例如 ImageJ 脚本、电子表格或 PDF 文件)附加到实验中,并将结果数据存储为衍生图像。通过这种方式,跨多个系统执行的分析可以保留其来源。

Aim IIB – 将 Cell Profiler 与 ImageJ 链接

CellProfiler 是广泛使用的生物图像分析程序的一个示例,由于 ImageJ 基础设施的限制,该程序是独立于 ImageJ 开发的(请参阅 Carpenter 支持信)。 目标 1 中概述的技术目标有助于实现 ImageJ 与 CellProfiler 等图像分析程序的完全互操作性。 CellProfiler 和 ImageJ 社区都将受益于两个软件包之间构建良好的接口。对此的需求很强烈,并且可以共享迄今为止独立开发(有时是冗余开发)的算法和方法。

为了开发改进的 ImageJ 架构,CellProfiler 是一个出色的接口测试用例,因为它在计算集群上的典型用法需要将数据模型与用户界面分离(目标 1a),其用于分析工作流程的强大数据模型将为 ImageJ 扩展机制的设计提供很大信息(目标 1b),并且其典型用例需要扩展的数据模型,例如处理多维图像(目标 1c)。在下面的部分中,我们简要描述 CellProfiler 架构和用例的相关方面,以及 ImageJ 的增强功能将如何带来好处。

CellProfiler 概述

CellProfiler 是一种多功能的开源工具,用于量化生物图像中的各种表型,特别是在高通量实验中[11-14]。自三年前发布以来,CellProfiler 已得到广泛应用,已被 60 多个国家的用户下载超过 8,000 次,并被近 100 篇论文引用。使用 CellProfiler 的点击界面,研究人员构建了定制的图像分析模块链来识别和测量图像中的生物对象。该软件是在一个紧密协作的跨学科研究环境中发展起来的,具有数十种不同的应用程序。 CellProfiler 已成功应用于各种测定(例如,细胞计数、测量染色强度以及通过机器学习对复杂表型进行评分)和实验规模(几幅图像或数十万幅图像)中测量细胞、集落和整个生物体。

CellProfiler 数据模型概述

CellProfiler 主要设计用于对大量图像的实验进行自动分析,它在图像集上按顺序执行一系列模块(每个模块均使用特定设置进行自定义)。该处理生成派生图像、分割结果(对象)和测量结果。数据模型由两部分组成:模块管道和图像、分割结果和测量的工作空间。通常,使用计算集群处理图像并将数据上传到数据库,尽管可以在本地处理较小规模的实验并在电子表格中分析数据。

管道是一系列模块,每个模块执行图像或数据操作。每个模块都有一组构成其内部状态的设置。设置代表模块的配置值;每个设置都可以序列化为一个文本值,模块的设置可以序列化为文本值序列,管道可以序列化为文本值序列序列。

管道。 管道是一个模块容器。它具有加载和存储其包含的模块以及在图像集上运行自身的机制。图像可以通过存在于同一图像文件中(例如,彩色图像文件中存在三个波长/通道)、通过存在于某些位置(例如,子文件夹)、或者通过图像文件名或单独的数据文件中存在的元数据标签来分组为图像集。

模块。 每个模块代表一些图像或数据操作。模块的状态完全由其设置表示。模块的代码具有用于查找模块的设置、执行图像或数据操作(例如图像处理)、支持旧版本软件以实现向后兼容性以及枚举模块生成的测量的方法。 CellProfiler 的模块生成三类测量:实验范围的测量(实验测量)、每个图像集合成的测量(图像测量)和每个对象合成的测量(对象测量)。

设置。 设置代表模块保存配置值。这些设置是数值、值范围(例如算法的最小值和最大值)和文本值(例如某些文件访问步骤的目录)。有两类特殊的设置:提供者和订阅者。这些是提供名称的文本值,但它们也具有语义意义。 提供程序提供存储在工作区中的模块输出的名称。订阅者提供从工作区获取的模块输入的名称。提供者为后续模块提供中间结果。订阅者从先前模块提供商提供的值中选择他们的值。在运行时,模块使用提供程序设置提供的值将图像和分割数据存储在工作区中。模块使用订户设置提供的值检索图像和分割数据。设置订阅者使用管道在管道中较早地查找可能的设置提供者。 在 CellProfiler 的 UI 上下文中,设置是模型-视图-控制器 (MVC) 界面中的模型。 视图根据设置的类创建模块配置的图形元素,控制器根据设置的类和视图生成的事件来操作设置。 设置与 UI 无关,这使得可以在 CellProfiler 之外的框架中呈现它们。设置的子集是可见设置。虽然设置代表模块的状态并且可用于序列化和反序列化模块的状态,但可见设置仅是那些应该显示给用户的设置。这些可能取决于上下文;在某些情况下,只有当另一个设置具有特定值时,一个设置才相关(因此仅可见)。

工作区。 CellProfiler 工作区是一块黑板,其中保存图像集的初始图像以及模块生成的中间图像、对象和测量结果。模块从工作区读取输入(通常是图像或对象)并将结果写入其中(通常是处理后的图像、对象和测量结果)。

Aim 1 的 ImageJ 设计增强功能与 CellProfiler 接口的优势

数据模型与用户界面分离(目标 1a)。 CellProfiler 具有可以与显示解耦的数据模型,并且可以在不同 UI 框架的控制下运行。一旦 ImageJ 更新为使用 MVC 设计模式,就可以在本机 ImageJ 窗口中显示 CellProfiler 的复杂分析结果。这种解耦还将有助于在没有 GUI 的情况下在计算集群上使用 ImageJ——这是 CellProfiler 服务的高吞吐量用户社区使用 ImageJ 的主要障碍之一。

引入算法扩展框架(目标 1b)。 如上所述,CellProfiler 具有针对图像分析工作流程的稳健设计,这可以极大地为 ImageJ 中的类似功能提供信息。通过 ImageJ 中的类似框架,用户将能够混合和匹配图像处理功能来创建工作流程。其价值不可低估:各种算法之间的相互测试对于图像分析的成功至关重要,而缺乏非程序员可访问的模块化工作流程一直是当前 ImageJ 的一个关键限制。引入该框架还有其他优点:(1)使 CellProfiler 和 ImageJ 能够非常统一地接口,允许各种数据(图像、分割结果和测量)在两个程序之间自由地来回传递(目标 2 的目标),以及(2)通过使其函数轻松接收多个复杂输入(多个图像、掩模、文本或数字数据)来增强 ImageJ 中可行的操作类型,就像目前 CellProfiler 模块的情况一样,这对于由 CellProfiler 提供服务的高通量用户社区。

扩大图像数据模型(目标 1c)。 CellProfiler 将受益于所提议的图像数据模型的多项改进。抽象数据源的能力将允许 CellProfiler 处理来自 ImageJ 支持的任何新数据源的数据,例如来自 URL 或图像数据库。 它还将扩展 CellProfiler 可读的文件格式,通过采用 Bio-Formats OME 元数据模型,CellProfiler 能够定位重要的元数据,无论文件格式如何。大多数 CellProfiler 用户需要一个能够有效表示多维图像的数据模型,例如包含多种颜色、时间点和三维 z 系列的图像。此外,CellProfiler 还经过优化,可处理 1 兆像素 (1000 x 1000) 或更少的图像; ImageJ 中的平铺机制可以让 CellProfiler 在更大的图像上高效运行。

CellProfiler 与 ImageJ 集成

因此,目标 1 中描述的 ImageJ 增强功能将使我们能够轻松创建 CellProfiler/ImageJ 互操作层,用于两个包之间的双向通信。 两个用户社区都对这种互操作性有强烈的需求,因为每个包都具有其他包所不具备的强大算法。互操作性层将维护 CellProfiler 管道结构来配置设置,以及代表 CellProfiler 模块的工作区,包括将图像集的初始图像加载到工作区中。它还会将 CellProfiler 分割结果(包括相关元数据)转换为一流的 ImageJ 对象,以便根据扩展框架的类型机制使它们可供其他 ImageJ 扩展模块使用。为了促进这种集成,我们将使用 CellProfiler 的提供者/订阅者功能来确定模块生成的图像和分割结果,从而通过 ImageJ 扩展 API 提供信息。完成这项工作后,CellProfiler 可以作为单个整体扩展出现,其配置涉及模块选择和配置。或者,用户在 CellProfiler 框架内编写的模块可以用作单独的 ImageJ 扩展,反之亦然。 这种接口的重要方面的示例包括掩蔽和覆盖。当处理包含不需要的对象(例如灰尘、孔边缘和细胞类型的混合物)(仅其中一些是我们感兴趣的)的图像时,遮罩是一种有用且实用的技术。我们将确保图像及其关联的掩模可以作为 CellProfiler 和 ImageJ 模块之间的输入和输出参数自由通信。分割和测量叠加也必须在 ImageJ 和 CellProfiler 模块之间正确连接。每个图像中每个对象的位置都是由 CellProfiler 分割模块生成的信息。此信息可在 ImageJ 中用于标记或勾勒图像中的对象、选择图像中的对象以及在对象顶部显示计算值。

目标 III – 在保持兼容性的同时发展社区驱动的开发

ImageJ 拥有强大的、成熟的用户群,拥有数千个插件和宏,旨在执行各种任务;对 ImageJ 的拟议更改将以保留现有代码功能的方式完成。为了促进不断发展的社区的参与、理解和热情,我们建议采用与其他现代、成功的开源项目一致的几种“最佳实践”,这些项目结合在一起将建立在 ImageJ 社区驱动开发的坚实基础上。

公共源代码存储库。 我们将为 ImageJ 源代码建立一个官方存储库,所有开发人员(内部和社区范围)都可以在其中工作。这样的存储库有很多用途:防止开发人员覆盖彼此的工作、简化定期代码备份、简化社区代码的贡献等。

单元测试和持续集成。 在目标 1 中,我们建议对 ImageJ 代码库进行重大更改。至关重要的是,我们要逐步进行这些更改,并在每一项更改后进行测试,以确保现有功能继续发挥作用。最现实的方法是建立一套全面的单元测试,这些测试是小型自动化测试,用于验证系统的每个原子功能。虽然创建这样一个套件是一项艰巨的工作,但它是一项长期投资,可确保该计划在未来许多年内继续按照广告宣传的那样发挥作用。此外,通过将测试套件与持续构建集成系统链接,只要将代码提交到官方存储库,就可以自动运行测试,并在测试失败时通知开发人员。

现代语言功能。 Java 语言的第 5 版已经几乎无处不在,但与许多遗留 Java 应用程序一样,ImageJ 必须与运行旧版本 Java 的少数系统(例如 Mac OS X 10.3)保持兼容。然而,使用 Retroweaver 这样的工具,可以在继续保留对这些旧系统的支持的同时继续前进。因此,我们可以开始将代码库迁移到使用 Java 5,这将提高代码的可读性和类型安全性,同时减少某些类型的程序错误。

扩展的中心位置。 与核心 ImageJ 软件的中央代码存储库类似,社区需要一个中心位置来查找插件、宏和其他第三方扩展。 ImageJ 网站有大量插件,但它是由一个人手动维护的,而不是社区的努力。近年来,另一个位置 ImageJ 文档 Wiki 上线,允许任何人提交插件并使用 wiki 社区模型提交在线文档和链接(类似于维基百科的运行方式)。我们建议在 ImageJ 主网站上采用这种 wiki 方法,以减轻插件列表的维护负担,同时允许社区使网站保持最新的工作。

为了促进该资源的广泛采用,我们将在 ImageJ 中实现“扩展管理器”功能,允许用户搜索、浏览和下载各种类别的可用扩展,类似于许多 Linux 发行版的包管理器功能。此功能将消除用户手动下载 JAR 文件并将其放置在 ImageJ 插件文件夹中的需要,并且还提供自动检查已安装扩展的更新的功能。

集成帮助系统。 最后,我们将添加到 ImageJ 的另一个内置系统是一个在线帮助功能,用于记录程序功能和扩展。每个扩展都能够提供丰富的文本来解释其用途,并且所有扩展都可以从 ImageJ 主界面中进行搜索。当我们开发扩展框架本身(目标 1b)时,我们将寻找提供更细粒度帮助机制的方法,以便也可以记录各个输入和输出参数。

时间表和里程碑

第一年第一季度:
(目标3)建立ImageJ源代码库。 (目标 3)引入单元测试以尽量减少回归错误并确保未来的兼容性。

第一年第二季度:
(目标 1a)以 Grant Harris 的工作为起点,开始将数据模型与用户界面解耦。
(目标 3)继续开发单元测试,最大限度地覆盖现有 ImageJ 功能。

第一年第三季度:
(目标 1a)继续进行模型-视图-控制器 (MVC) 重构,使用新的命名空间以避免与遗留代码发生冲突。
(目标 1c)重构数据模型以允许任何数据源,而不仅仅是文件和 URL。
(目标 1c)将对平铺图像的支持集成到数据模型中。
(目标 3)在适当的情况下迁移代码以使用 Java 5 语言功能。

第一年第四季度:
(目标 1a)丰富事件模型,以实现动态图表和实时链接显示等功能。
(目标 1b)开发通用的扩展基础设施,支持常见类型的输入和输出数据。
(目标 1c)使用张量表示将 5D 图像模型推广到 N 维。
(目标 1c)实现对其他常用像素深度(有符号 8 位整数、双精度浮点等)的支持。
(目标 3)尽可能通过委托给新命名空间来减少遗留代码。

第 2 年第 1 季度:
(目标 1a)为 Swing 和 Java3D 实现附加显示模块。
(目标 1b)将现有核心分析插件迁移到新的扩展基础设施。
(目标 1c)扩展对“虚拟堆栈”的支持,以允许根据用户引导的缓存策略缓存图像数据的子集。
(目标 2)开始更新 VisBio 可视化和分析包,以利用改进的 ImageJ 扩展基础设施。

第 2 年第 2 季度:
(目标 1b)模块化脚本支持,以便能够以任何支持的脚本语言记录命令。
(目标 2)继续开发新的 VisBio ImageJ 扩展套件:支持多视图光谱寿命数据挖掘。
(目标 3)实现易于使用、标准化的扩展文档机制。

第 2 年第 3 季度:
(目标 1c)扩展 ImageJ 的元数据模型,以独立于格式的方式存储常用的元数据字段。
(目标 2)将改进的 ImageJ 框架与 CellProfiler 细胞图像分析软件集成。
(目标3)建立统一的扩展存储库。

第 2 年第 4 季度:
(目标 2)研究 OMERO 和 FARSIGHT 分析工作流程框架中新扩展机制的使用。
(目标 3)创建一个图形扩展管理器,用于下载、安装、配置和删除扩展。

可衡量的成果

在两年的开发期结束时,我们预计将取得以下成果和可交付成果:

  1. 重新设计的 ImageJ,具有开发人员所需的功能,但对 ImageJ 的长期用户来说是透明的。
  2. 一个使用专业实践进行代码开发和工程的 ImageJ 开发网站。
  3. CellProfiler 和 VisBio 应用程序与 ImageJ 完全连接并经常使用。

其他可交付成果

该赠款的技术目标促进的新应用示例:

  1. 使用 ImageJ 进行光谱寿命分析(目标 1a 和 1c):MVC 架构将启用描述多个数据表示的实时链接视图,以促进数据挖掘。例如,当与多维张量表示和 Java3D 等 3D 显示模块结合使用时,我们可以探测光谱寿命数据。
  2. 平铺图像浏览器,类似于 Brainmaps.org 或 Google 地图(目标 1c):高分辨率图像平面的平铺引擎与数据源抽象相结合,将使这一切变得简单。 3.实时远程浏览图像,例如OMERO数据库(目标1c):数据源抽象对于此类功能至关重要。
  3. 简单、灵活的分析工作流程引擎(目标 1b):具有兼容输入和输出的扩展可以链接在一起。

参考文献

  1. Collins, T.J.,用于显微镜的 ImageJ。生物技术,2007 年。43(1 增刊):第 17 页。 25-30。
  2. Pool, M. 等人,NeuriteTracer:一种新颖的 ImageJ 插件,用于自动量化神经突生长。 《神经科学方法杂志》,2008 年。168(1):第 17 页。 134-9。
  3. Dello, S.A. 等人,即插即用肝脏容量测定:使用 ImageJ 自行操作。世界外科杂志,2007 年。31(11):第 11 页。 2215-21。
  4. Picht, E. 等人,SparkMaster:使用ImageJ进行自动钙火花分析。Am J Physiol Cell Physiol,2007年。293(3):第14页。C1073-81。
  5. 欧文,学士 等人,NIH ImageJ 和 Slice-O-Matic 计算机断层扫描成像软件用于量化软组织。规划(银泉),2007 年。15(2):第 15 页。370-6。
  6. 凯瑟琳,R.、F. Lopez 和 C. Klopp,AGScan:基于 ImageJ 库的可插入微阵列图像量化软件。生物信息学,2007 年。23(2):第 14 页。247-8。
  7. 费奇,J.N. 等人,PixFRET,用于 FRET 计算的 ImageJ 插件,可以适应吸收吸收的变化。Microsc Res Tech,2005 年。68(1):第 17 页。51-8。 8.巴博里亚克,D.P. 等人,使用 ImageJ 创建 DICOM 感知应用程序。 J Digit Imaging,2005 年。18(2):第 17 页。91-9。
  8. Girish, V. 和 A. Vijayalakshmi,使用 NIH Image/ImageJ 进行经济实惠的图像分析。《印度癌症杂志》,2004 年。 41(1):第 41 页。 47.
  9. Rueden, C., K.W.埃利塞里,J.G. White,VisBio:一种用于多维生物图像数据可视化的计算工具。交通,2004年。5(6):第17页。411-7。 11.琼斯,T.R. 等人,CellProfiler Analyst:用于基于屏幕的复杂图像的数据探索和分析软件。BMC生物信息学,2008年。9:第11页。482. 12.沃克斯,硕士和A.E. Carpenter,使用CellProfiler自动识别和测量图像中的生物对象。Curr Protoc Mol Biol,2008。第14章:第14页。第14单元17.
  10. Lamprecht,M.R.,D.M. Sabatini 和 A.E. Carpenter,CellProfiler:用于自动化生物图像分析的免费多功能软件。生物技术,2007 年。42(1):第 11 页。71-5。
  11. Carpenter, A.E. 等人,CellProfiler:用于识别和量化细胞表型的图像分析软件。基因组生物学,2006年。7(10):第17页。R100。
  12. Swedlow,J.R.,I.G.戈德堡,K.W. Eliceiri,实验生物学的生物图像信息学(*)。生物物理学年鉴,2009年。38:第14页。327-346。
  13. Eliceiri,K.W.和C. Rueden,用于可视化活体标本多维图像的工具。《光化学光生物》,2005年。81(5):第17页。1116-22。
  14. Eliceiri,K.W. 等人,多维图像生物数据分析。生物技术,2002年。33(6):第14页。1268-73。 18.鲁登,C.T.和K.W. Eliceiri,多维图像生物数据的可视化方法。生物技术,2007年。43(1增刊):第17页。31、33-6。
  15. 普罗文扎诺,P.P. 等人,乳腺癌内源性和外源性荧光团的非线性光学成像和光谱消耗计算分析。J Biomed Opt,2008年。13(3):第14页。031220。
  16. 阿布拉莫夫,M.、P. Magalhaes 和 S. Ram,使用 ImageJ 进行图像处理。国际生物光子学,2004 年。劳林出版社
  17. Yan, L. 等人,组合光谱生存生物学在生物学中的应用。生物技术,2006年。41(3):第41页。249、251、253 帕西姆。

另请参阅