今天,ImageJ和KNIME团队很高兴地宣布plugin:可重用图像处理操作的框架。德国康斯坦茨大学Michael Berthold团队在德国库库成功举办了一次精准的黑客马拉松的直接成果。

Happy hackers: 502 commits in five days!
动机
ImageJ2的愿景是Java的“编写、随处”的口号接入图像处理算法。由此为核心目标,ImageJ2引入了可扩展的§§2§§§和ImageJ Ops框架,使ImageJ命令更丰富、更强大并且更容易在应用程序之间共享。这些模块已经从CellProfiler、KNIME、OMERO和Alida访问。
但仍然明显缺少一个关键层:专门用于“图像处理”的框架。为了解决这个问题,我们着手创建一个可重用的图像处理算法的框架,具有以下特征:
- 易于使用和扩展。最重要的是,有大量易于使用的图像处理操作(“ops”),以及用于在新方向上扩展这些操作的简单框架。我们在第 ImageJ Conference 2012 研讨会上的观察之一是,ImageJ2 仍然需要做更多的工作来实现这种灵活性,无论是为了编写脚本的用户,还是为了创建强大且可重用的图像处理算法的开发人员。
- 功能强大且通用。操作应该能够包含数量的类型化输入和输出参数,对不同的数据结构进行操作,包括以多种不同方式存储的NviImage:作为磁盘上的文件、在内存中以编程方式生成或在远程数据库中。使用强大的§§12§§§库可以实现这一雄心勃勃的目标。
- 非常快。 ImgLib2 比 ImageJ 1.x 的数据模型更加通用,但这种通用性不能以牺牲性能为代价。否则,用户必须支付时间税才能执行它们在 ImageJ 1.x 中虽然已经可以执行的操作。ImageJ Ops 框架需要提供一种方法,用更快但更具体的替代方案来覆盖**通用但缓慢的操作,并且对用户完全透明。
当谈到计算机程序的灵活性、性能和性能时,通常的经验法则是“二选一”。然而,我们很高兴地说,我们相信通用操作在这三个标准之间取得了有利的平衡。
开始使用
op 只是一个 ImageJ 模块,但还有一些额外的结构和要求:您可以将 op 视为一个函数,它接受类型化输入列表,生成类型化输出列表,并且没有其他。其中,已实施了 80 个多个操作,其中有 module;请查看此 ImageJ 教程以了解其中的内容:
对于算法开发人员来说,还有另一个教程简要演示了如何创建新算法:
注意事项
今天是 Ops 项目的第一个测试版本:0.1.0。,目前正在大力开发中,设计的各个方面仍可能发生变化。由此,我们对核心 API 非常有信心,并且不会发生严重的变化。另外可能改变的是具体的单个操作、它们的工作方式、哪些操作可用,以及其他希望更详细的细节,随着库的继续开发和使用,这些细节将变得更加完整。
##结论
我们衷心希望Ops项目能够让各种软件工具(例如:KNIME、CellProfiler、OMERO、Alida、Icy、Vaa3D,当然还有ImageJ本身)更轻松地为ImageJ的图像处理操作提供直接支持,让科学家真正“一次编写,随处运行”并与世界分享!
附:以下是黑客马拉松期间取得的成就的详细列表:
- Curtis、Martin、Christian 和 Johannes:定义了运营框架
- Discovery and selection
- Interfaces
- Unit tests
- Extensible optimization framework
- Code is short, easy to read, fast & general!
- 定义编码约定和imagej-ops开发流程
- Martin、Christian 等人:将现有操作从 ImgLib2 和 KNIME 移植到 imagej-ops
- Christian, Michael Z: base for multithreaded ops
- Martin: lots and lots of ops
- Christian: meta ops: map, join, loop
- Christian: proof-of-concept descriptors
- Christian & Johannes: unified benchmark framework
- Johannes: proof-of-concept acceleration (on-the-fly code generation)
- Andreas G & Daniel: reimplemented several JFeatureLib implementations, evaluated existing implementations 黑客马拉松是完成任务的绝佳机会,因此我们也致力于相关项目:
- Andreas G & Daniel:新的 KNIP 节点功能
- Gabriel:SCIFIO 作家集成
- Daniel:轴选择小部件
- Andreas B. 和 Jonathan:TrackMate 接口的泛化
- Christian:开始移植所有端口
- Christian、Martin 和 Johannes:设置 Maven/Jenkins 自动创建 OSGi 包
非常感谢KNIME团队使这一切成为可能!
附言甚至还有一个 ascii 操作可以将图像转储到控制台。这对于单元测试、验证和一般调试非常有用:
// create a new blank image
final long[] dims = {78, 23};
final Object blank = ij.op().create(dims);
// fill in the image with a sinusoid using a formula
final String formula = "10 * (Math.cos(0.3*p[0]) + Math.sin(0.3*p[1]))";
final Object sinusoid = ij.op().equation(blank, formula);
// add a constant value to an image
ij.op().add(sinusoid, 13.0);
// generate a gradient image using a formula
final Object gradient = ij.op().equation(ij.op().create(dims), "p[0]+p[1]");
// add the two images
final Object composite = ij.op().add(sinusoid, gradient);
// dump the image to the console
final Object ascii = ij.op().ascii(composite);
ij.log().info("Composite sinusoidal gradient image:\n" + ascii);
Composite sinusoidal gradient image:
...,,,,,,,,,,,...,,,,---++++++++++-----+++ooo**********ooooo***
..... ...,,,-----,,,,,,,,,,---++++oooo++++++++++ooo****OOO************
....... ...,,,--------,,,,,,,---+++oooooooo+++++++ooo***OOOOOOO********OO
......... .....,,,-----------,,,----+++oooooooooo+++++ooo***OOOOOOOOOO*****OOO
,,,,..........,,,----+++------------++ooooo*ooooooooooooo***OOOOOOOOOOOO**OOOO
,,,,,.........,,,---+++++----------+++oooo****oooooooooo***OOOO###OOOOOOOOOOOO
,,,,,.........,,,---++++++---------+++ooo*****oooooooooo***OOOO###OOOOOOOOOOO#
,,,,,.........,,,---++++++---------+++ooo*****oooooooooo***OOOO###OOOOOOOOOOO#
,,,,,.........,,,---+++++----------+++oooo****oooooooooo***OOOO###OOOOOOOOOOOO
,,,,..........,,,----+++------------++ooooo*ooooooooooooo***OOOOOOOOOOO***OOOO
.,.............,,,------------,,----+++ooooooooooo++++ooo***OOOOOOOOOO*****OOO
........ ...,,,----------,,,,,----++oooooooooo++++++ooo***OOOOOOOO*******OO
....... ...,,,--------,,,,,,,---+++oooooooo+++++++ooo***OOOOOOO********OO
...... ...,,,-------,,,,,,,,---++++oooooo+++++++++ooo***OOOOO**********O
...... ...,,,,------,,,,,,,,,---+++ooooo++++++++++ooo***OOOOO**********O
...... ...,,,,------,,,,,,,,,---+++ooooo++++++++++ooo***OOOOO**********O
...... ...,,,-------,,,,,,,,---++++oooooo+++++++++ooo***OOOOO**********O
....... ...,,,--------,,,,,,,---+++oooooooo+++++++ooo***OOOOOOO********OO
........ ....,,,-----------,,,,---+++oooooooooo+++++oooo**OOOOOOOOO*******OO
,,,,..........,,,----+++------------++ooooo*ooooooooooooo***OOOOOOOOOOOO**OOOO
,,,,,,.......,,,---+++++++--------+++oooo******ooooooooo***OOO#####OOOOOOOOOO#
,,,,,,,,...,,,,---+++++++++++----+++ooo**********ooooo****OO#########OOOOOOO##
----,,,,,,,,,,---+++ooooo++++++++++ooo****OOO************OO###################
而且外观很酷。