本节内容已经过时,可能具有误导性或无效。请谨慎对待这里的任何说明。如有疑问,请向社区求助。
此页面是一个旧的酷/有用项目的想法列表,这些项目与 ImageJ 的 Fiji 发行版本有一定的关系。其中一些可能仍然值得追求。
#可视化
基于 ImgLib 单元的 Block-Face EM 图像体积的 3 路查看器
Imglib提供了一个单元容器,其中每个单元都是一个各自的n维图像,可能被分页到文件中。使用无损压缩存储的各向同性有效3d单元的具体情况浏览。此设置可以和分析尽可能可用RAM的图像体积,同时从XY、YZ和XZ平面观察特定的3D ROI块。这些图像体积在Block-Face Serial Scanning Electron Microscopy中很常见,该技术现在被商业化为“Gatan” 3 向视图 EM”。请参阅本页了解 theory 和 pictures and examples。
目标: 为 Imglib 单元容器的 3d 实例创建 3 向查看器。
语言:斐济支持的任何语言,最好是java。
联系方式: Ignacio Arganda-Carreras
混合文件格式 MultiVirtualHyperStack 查看窗口的插件
这个想法是能够在单个多色复合窗口中显示多个虚拟超堆栈类型数据集。我已经使用多个 QuickTime 或 AVI 进行了安排电影。但理想的情况是允许覆盖多个 BioFormats 的支持文件类型中任何一种的混合数据。
用户将能够在4个维度中密度、重新扫描和删除单独的通道,然后同步浏览一些ZT维度中的复合视图。对于此功能有需求,尤其是许多实验室以不同文件格式创建的非常大的数据存储库。通过元数据启用自动空间布局将允许对具有感兴趣区域的所有通道进行测量分析,解决所有重叠数据。
该项目将包括
-
为众多类型的输入数据文件系列编写了一个扩展 VirtualStack.java 类的类。目前,这些存在于 FileSeriesFromList 和 QTVirtualStack 中。
-
创建一个 MultiVirtualHyperStack.java 类,该类可以将多个 VirtualStack 类型组织到通过单个 ImagePlus 和 StackWindow 显示的单个 VirtualHyperStack 中。此类中的 getProcessor() 方法必须能够整理从混合格式虚拟堆栈请求的任何通道/切片/帧的文件坐标,并从格式化格式的每个专用 VirtualStack 类调用 getProcessor()。
-
创建一个控制面板,允许调整混合覆盖组件的任何单个 VirtualHyperStack 的 XYZT 位置。
目标: 混合文件格式 MultiVirtualHyperStack 查看窗口的插件。
语言: Java。
联系方式: Bill Mohler (wmohler@neuron.uchc.edu)
插件: python script for multi-stack composite image
渐变强度/LUT 曲线
在济斐,您可以通过调用Edit › Find in files…来调整图像的动态范围。但是,前提是您可以选择像素强度和查找表之间的线性映射。该项目旨在提供非线性控制,例如分段线性函数、伽玛曲线、样条线等
图像处理插件
将机器学习评估图像分割问题
术语“图像分割”描述了对图像中的对象进行概述的任务,以便每个像素都连接到命名对象或背景。
传统上,分割是一个非常困难的问题,尤其是在存在可变照明、噪声或低恢复的情况下。
斐济已经实施了许多分割算法来执行图像分割,例如Auto Threshold和Auto Local Threshold,但在实践中,它们都可能无法,因为它们是根据特定图像设计的,并且您的图像可能无法满足这些需求。
最近,出现一类新的分割算法:实例分割。这些算法需要一组示例,用于计算出一个模型,该模型可以拟合其他外观相似的图像。
我们将考虑通用的实现应用程序(即它们适用于任何图像),或者尝试解决非常具体的问题(例如在使用电子显微镜或共焦推理的连续切片中分割神经元)。
我们有几个图像数据集及其相应的手动分割(用于训练算法)。参见示例:
- 果蝇幼虫大脑使用 ssTEM 理论:http://t2.ini.uzh.ch/data.html
- 果蝇与共焦显微镜结论。
欢迎您使用您选择的任何与科学相关的数据集,但我们将优先考虑生物学的数据集。
目标:实现多种基于机器学习的分割算法。
语言: Java。
导师: Albert Cardona、Johannes Schindelin
为 Imglib 实现算法
新的imglib支持独立于维度、存储和数据类型的图像处理。该库已经内置了一些算法,但强烈需要通用地实现更通用的图像处理算法、存储策略和数据类型,例如:
- 插值(三次插值、样条插值……)
- 熵过滤器、平均过滤器、百分数(最小、中值、最大值)过滤器…
- 部分图像加载的内存管理
- 色彩空间和色彩空间转换
- 非光栅图像的高效表示(基于2d光栅形状和3d/4d网格)
目标: 实现图像处理的通用算法。
语言: Java。
导师: Stephan Preibisch、Stephan Saalfeld、Tobias Pietzsch、Johannes Schindelin
着色算法
有许多关于将灰度图像转换为彩色图像的书籍。该项目的目的是解决多地实施其中的项目。
注意:这是一个非定性问题,因为灰度图像中没有足够的信息来识别原始颜色。然而,在某些情况下,可以估计大多数或所有像素的颜色的最佳猜测。
目标: 实现一个着色插件。
语言: Java。
导师: Albert Cardona
图像选择器/排序器
实现一种算法,根据颜色等特征对大量图像进行排序。受到 Kai-Uwe Barthel 的 pixolu 项目的启发。
一套更强大的画笔和图像编辑工具
即使斐济的目标是科学图像处理而不是美化照片,拍摄假期照片并使用您熟悉的图像处理软件进行梯度处理也可能很有趣。
可能的工具是喷枪(允许透明颜色)或具有一定惯性的画笔以实现字体效果等。
目标:实现一个用于交互式脚本效果的插件。
语言: Java。
导师: Albert Cardona
小波修复
使用小波实现简单的修复方法(即恢复由ROI标记的图像中丢失/不需要的部分):应用小波变换,然后在每个级别上使用扩散算法从周围部分推导出平滑信号,最后对小波进行逆变换恢复的图像。
目标:实现一个用于交互式脚本效果的插件。
语言: Java。
导师: Johannes Schindelin
编写脚本
添加 JMathLib(MATLAB 克隆)支持
有相当多的算法可初始化概念验证MATLAB脚本。虽然它是wrong to think of pixels as little squares,并且实际上所有执行图像处理的MATLAB脚本都受到这种影响,但如果能够运行这些脚本而必须出于购买MATLAB许可的目的,那就了。
MATLAB 允许一个 Java 运行时(事实上,所有 MATLAB 的 GUI 都是用 Java 实现的!)并用户实例化 Java 类并调用它们的方法:
import java.io.File;
f = File('/usr/local/Fiji.app/');
f.exists()
令人高兴的是,有一个用Java编写的MATLAB克隆:JMathLib。虽然它显然不是速度恶魔,但将JMathLib作为新的脚本语言添加到ImageJ并将其集成到斐济中应该很有用,以便MATLAB脚本也可以像所有其他ImageJ脚本一样执行。
其中,我们有a branch which adds rudimentary JMathLib bindings to Fiji’s scripting interface。我们可能还需要修改 JMathLib 本身以支持该项目 - 完成后,将更改贡献回 JMathLib 项目。
JMathLib源代码需要解决以下问题:
-
在嵌入(非独立)模式下,FunctionManager 安装一个 WebFunctionLoader,它不允许添加新函数。或者需要教导 WebFunctionLoader 允许(可能是可选的)添加新函数,或者需要另一种嵌入 JMathLib 的模式,但仍然允许定义新函数。
-
在嵌入模式下,JMathLib不得调用System.exit()
-
只有在独立模式下,可用函数才会在运行时发现,而不是从嵌入文件中读取。该文件不是必需的。 JMathLib 应检测它是否捆在 .jar 中,并使用 a JarInputStream 或遍历目录层次结构。执行此操作的最佳位置可能是教 FileFunctionLoader 也接受URL不是File。
-
JMathLib 通过基于 DynamicJava 的非标准机制支持 Java。这与MATLAB不兼容,因此需要使用reflection的机器支持来支持上面提到的实例化 Java 对象的方法。
这个问题需要在斐济的源代码中解决:
- JMathLib 的图像工具箱包含的内容并不多。连沟通的功能都恢复了。即使有函数,我们也必须重写它们,因为这些函数需要以某种方式完成,以便它们使用 ImageJ 并与 ImageJ 交互。最好的方法可能是首先实现 MATLAB 的 image processing toolbox’ 入门 部分中提到的功能,通过实现直接调用 ImagePlus 的 .m 文件(使用上述技术)。
目标: 集成 JMathLib 作为一种新的脚本语言。
语言: Java。
导师: Albert Cardona
一个 Javascript 记录器
与宏记录器类似,但生成了Javascript。ImageJ现在有一个Javascript记录器,但它还没有集成到Fiji脚本编辑器中。Javascript记录器似乎还没有宏记录器那么强大。
脚本编辑器中的代码模板
脚本编辑器提供了一种编写执行一些简单任务的小插件脚本的好方法。如果你知道怎么做的话。
提供大量修改模板,使用户不必从头开始。一个模板还应包含更多的文档,而不是更少的文档,因此理想情况下,用户必须查找适当的 API 调用,而只需记录好的代码。
让##脚本编辑器在另存为…时自动重命名Java类
公共 Java 类必须从反映类名的源文件进行编译,因此当文件以新名称保存时重命名 Java 类是有意义的。教脚本编辑器如此。
在脚本编辑器中添加标签功能
通常,在查看文件的其他部分后,记住要返回当前的字体位置会非常方便。也许⌃ Ctrl +
##添加对Haskell(通过Jaskell)和Tcl(通过Jacl)的支持
我们在斐济已经有了 Jacl,因为它是蜡染的附属产品。 Haskell 还有一个纯 Java 实现的语言,两者都应该相对容易作为脚本语言集成到斐济中。
对于 Tcl,脚本编辑器需要最少的调整,因为 RSyntaxTextArea 已经支持 Tcl,但对于 Haskell,必须实现新的 Token。
##添加Image › Adjust › Brightness & Contrast
我们已经提供了一个编译错误和堆栈跟踪跳转的机制之间的位置。可以使用相同的机制来传送多个文件的搜索结果。
将 “REPL” (Read-Eval-Print-Loop) 添加到 Script Editor
宏录制后检测循环
一种特殊的完成形式的自相关(在文本上)应该很好地指示用户在循环中可能想要重复的事情。这将帮助很少有编程背景的用户通过宏记录器编写强大的插件。
斐济开发环境/基础设施
GUI测试框架
我们在 tests 分支中有一些基本的 GUI 测试,但最好使用已建立的 GUI 框架,例如 Jemmy 或 Marathon。 不管怎样,这个想法是记录移动鼠标和键盘按下,可选择等待某些GUI元素(例如窗口)出现,并在发生意外情况时出错 - 这很可能意味着某些内容损坏并需要修复。
目标: 提供一种简单的方法来记录和运行 GUI 恢复测试。
语言:主要是Java
导师: Gabriel Landini
R 和 ImageJ/Fiji 之间的接口
最好有一套已实施的程序,以便IJ/Fiji可以直接从结果表等运行统计程序。
RImageJ是由Romain Francois编写的R包,它使用rJava中包含的Java/R interface在R内部启动ImageJ实例对称该发送命令。
如果有相反的方向工作,从斐济调用 R,那就太好了。由于 rJava 中包含的the Java/R interface确实允许从 Java 内部启动 R,所以这是相当可行的。
为了克服通过System.loadLibrary()加载本机库需要特殊的平台相关设置的典型问题,我们应该这样做:
// prohibit JRI to call System.exit(1);
System.setProperty("jri.ignore.ule", "yes");
if (!Rengine.jriLoaded) {
// not found on the library path
System.load("/absolute/path/to/the/library");
Rengine.jriLoaded = true;
}
Rengine re = new Rengine();
教导 Fiji Updater 接受除 fiji.sc 之外的其他网站
Fiji 更新程序始终在我们的网站上查找包含 Fiji 插件(当前版本和过去版本)的 XML 数据库的静态文件。要将新版本或新插件放在那里(上传到更新程序),您必须是斐济开发人员,对我们服务器上的特定目录具有写入权限。
在某些情况下,有些插件要么过于敏感,要么对于某个应用程序过于具体,或者尚未准备好供公众使用,但仍然有人可能希望以自动更新这些插件的方式安装 Fiji。当然,这些插件必须有一个与斐济官方更新站点不同的位置,以免普通观众自动收到这些插件。
不过,该项目并非没有复杂之处:
-
XML数据库作为文件保存在斐济本地目录中,并且始终在启动时检查时间戳是否比服务器上XML数据库的时间戳新。如果您有多个更新站点,则应以一种方式处理,其中本地 XML 数据库反映元数据的来源,并且对于上传,必须为一个特定上传站点构建临时 XML 数据库。
-
斐济官方插件之间可能存在冲突,但也可以从辅助站点获得。这必须得到解决(目前还不清楚最好的策略应该是什么:采用斐济官方版本而不是辅助站点?让用户选择?)
-
对于新网站,您也需要能够upload plugins到该网站。需要有一个非常好的方法来防止混淆,以免插件被上传到错误的站点。
-
为了确定开发人员是否可以上传新插件(因为有新版本),Fiji 更新程序会扫描完整的插件目录,以及宏、第 3 方库或 Fiji 启动器可能隐藏的其他一些位置。斐济更新程序需要学习而不是来提供这些插件以上传到辅助站点,但仅限于非斐济站点。
-
我们当前的斐济更新程序不太可能从头开始启动数据库。这必须得到验证,如果还没有代码,则必须实现它。
-
跨站点依赖关系应该通过在 XML 数据库中提供关于哪些其他站点应该具有最新依赖关系的提示来处理。
将JGit纳入斐济
斐济成功的一个重要部分是开发人员可以通过使用Git轻松协作。
Git 存在一个名为 JGit 的纯 Java 实现,它已经提供了 Git 的大部分功能。
如果能将其集成到 Fiji 中就好了,这样脚本编辑器就能给开发者带来更流畅的开发体验。
让 Fiji Updater 重启更加智能
只有当plugins/外部有更新时才需要完全重启;否则,一个简单的“更新菜单”就可以解决问题。
此外,在出现“您需要重新启动斐济”(或更新菜单)消息后,更新程序没有理由保持打开状态。
最后,如果需要重新启动,可以询问用户是否应该尝试重新启动,并且可以使用打开的图像列表(如果有未保存的图像,应将它们暂时保存到临时文件中)和结果表来调用 JNI 提供的函数,然后适当地重新执行 Fiji。
让对象检查器更有用
斐济有一个工具可以让您筛选所有打开的框架并检查相应的对象(及其字段,以递归方式)。
但是,还没有与脚本编辑器的连接(您可以在其中打开给定类的相应源)。这可能非常方便。
此外,可能存在一种模式,您可以从光标悬停在其上的对象开始打开对象的层次结构,并动态更新。如果有一种模式只显示对象的侦听器,那么这可能会更有用,以便您可以轻松确定哪些代码负责,例如处理特定“确定”按钮上的单击。
用户界面改进
添加一个元插件来运行具有参数范围的其他插件
许多插件都带有参数,并且最佳值可能并不明显。因此,如果有一个插件可以使用一系列值调用另一个插件,那就太好了。
这个想法是让元插件运行以正常方式要求用户输入的插件。但随后,元插件将分析指定了哪些参数,并询问数字参数的增量和停止标准。有了这些数据,它将循环运行插件。
结果可以呈现为结果图像的堆栈。
获取范围参数的另一种(更黑客的)可能性是在显示对话框之前拦截对话框,并通过增量和停止条目扩展数字输入字段。
由昆汀·德·罗比拉德建议。
将 ImageFlow 集成到斐济

ImageFlow 提供了构建宏的图形方式。每个操作都由一个节点表示,用户可以用线连接该节点来定义工作流程。
ImageFlow 有自己的Git repository
需要解决以下问题:
-
目前,它不是一个真正的插件,但想要启动自己的 ImageJ 实例
-
它仅针对宏语言,而我们希望针对斐济支持的所有脚本语言
-
它在 .jar 文件之外搜索 .xml 文件,这使得与 Fiji 更新程序一起发布变得很麻烦。
提供菜单项帮助
菜单项中提供的许多命令实际上都是插件,因此斐济 Wiki 上对它们进行了详细记录。插件的开头将光标更改为带问号的箭头,以及(暂时)处理菜单项的方式:不是运行相应的命令,而是在网络浏览器中打开斐济维基上的相应文档。
不过,代码需要改进,才能正确处理特殊菜单项,例如最近的文件或 Windows 菜单。
有些菜单项实际上是由 ImageJ 的核心提供的,最好在 ImageJ 网站而不是 Fiji Wiki 上打开适当的位置。或者,ImageJ 文档应在 Fiji Wiki 上的适当页面标题下复制。
还应告知用户,按 ⎋ Esc 键可以退出此模式。
最后,斐济维基需要一些爱来反映菜单项的确切标题,很可能是通过添加适当的重定向。
添加一个聪明的另存为插件
目前,File › Save As 始终将结果保存为 .tiff 文件,即使用户指定了以 .png 结尾的文件名。
Stephan Preibisch 建议:添加一个插件,从一组扩展中确定要调用相应编写器插件的插件。
为了获得额外的加分,不要对扩展/插件映射(如 HandleExtraFileTypes)进行硬编码,而是通过一个或多个文件对其进行配置。
# 各种各样的
Alpha 形状/凹壳/其他图论算法
斐济已经包含一个 Delaunay_Voronoi 插件。该项目的目的是实现更多的图算法。最有可能的是,这将涉及设计一个应用于二维或更高维图的图论通用框架。
支持 TIFF 标记字段中存储 ROI
Fiji 可以将图像保存为 TIFF 文件,把 ROI 保存为自定义 .roi 文件。提供一种将 ROI 存储在 TIFF 文件中的自定义标签内的方法,便于 ROI 和图像保存在一起。
跨平台网络摄像头支持
支持网络摄像头的图像记录可能会提供一种廉价的方式来制造视频显微镜/望远镜装置(可以使用Distortion Correction插件来克服低质量的CCD芯片和镜头)。
实现这个目标的一种方法是使用Free Java Media Framework。
独特/通用的架构接口
我收集了近15种新的直方图分割方法,最好将它们与其他可用的方法一起放在一个界面下。
注意:这俩父母或少在 Auto_Threshold 和 Auto_Local_Threshold 插件中实现。–Johannes Schindelin 14:47, 29 11月 2009 (CET)
类似虚拟显微镜的图像查看器
HSB/Lab 绘画模式
将 Micro-Manager 集成到斐济
该项目需要一些在 Linux、macOS 和 Windows 上编译 C++ 代码的知识。我们的想法是制作一个配方,其他人可以使用它来编译 Micro-Manager 的新版本,将其集成到 Fiji 项目中以平滑的用户体验。为了确保对 Micro-Manager 的支持不会被无意中破坏,您还应该添加回归测试。
目标: 提供一种简单的方法来编译并通过斐济发布微管理器。
语言: Java、C++、shell
导师: Johannes Schindelin
其他资源
ImageJ Documentation Wiki上有一个愿望清单。