#欢迎!
斐济正计划申请参加 Google Summer of Code 2009 计划。由于指导组织尚未被接受,因此不能保证斐济规划会被要求参加。此页面旨在帮助斐济的学生项目。(更新:斐济has been accepted作为指导组织。参见Fiji GSoC organization page。)
此页面包含从斐济用户和开发人员社区精选的项目想法。您可以通过阅读一些项目描述以及产生它们的邮件列表线程来开始。还可以加入开发人员邮件列表,或在 IRC 上找到我们。详细信息请参见Help。
不喜欢您在这里看到的项目?只需在开发者邮件列表中向我们提出您的想法即可!
#一般要求
所有项目都有以下基本要求:
- 没有说明,项目将需要使用Java进行编程。
- 所有材料必须根据第 GNU General Public License (GPL) 第 2 版发布。
- 个别学生应保留其作品的版权。
- 项目必须在 Git 中跟踪和管理,并在 1 上发布(我们将为您提供一个账户)。
- 您每周的项目状态报告应发送给项目导师。每份状态报告应发送该周的工作、阻止该周完成的任何问题以及您下周的目标。这将帮助您将项目概述为可管理的部分,也将帮助项目的导师更好地支持的努力。
我们鼓励感兴趣的学生阅读第Advice for GSoC Students Page,因为它提供了很好的建议,可以帮助您选择项目并制定提案。
如果你的建议被斐济发展社区接受,你将需要在暑假全职投入该建议。如果你想休假一周,这很酷,但请记住,谷歌在暑假招聘你来帮助我们改善济斐。这应该是你的重点。不要指望你每周只能为你的项目10个小时,工作然后在结束时领取。
如果您最初的项目没有成功或太有挑战性,您应该与您的导师一起帮助重新定义它。我们真的希望看到今年夏天每个项目都取得成功,因为用户社区对这些项目非常感兴趣。
学生可以在Google Summer of Code website处申请该计划。请考虑查看我们的SoC2009Template并回答其中的问题,作为您申请的一部分。
项目想法
通用图像处理框架
ImageJ 有一个图像的抽象,称为 ImageProcessor,它按数据类型专门化,如 ByteProcessor、ShortProcessor、ColorProcessor…但它只是包装二维图像。对于 3 维图像,您需要使用 ImageStack 类的实例,如果您需要更多维度,则需要 HyperStack。
对于图像像数据容器这样简单的东西来说,这有点复杂。
因此,要求需要某种数据结构,最好具有高性能且易于访问数据和元数据的方法。
我们的想法是拥有
- 数据类型的抽象:提供用于执行计算的方法的类,专门针对所有数据类型(字节、短整型、整数、浮点、双精度、RGB、复浮点和复双精度),
- “光标”的抽象:指向图像中某个位置的类,
- 一系列适用于游标的迭代器,
- 根据迭代器实现的插值、裁剪和仿射/非线性变换,
- 各种很酷的东西现在变得很容易。
仔细实现这些想法应该会产生一个框架,在该框架中,您不需要为每种数据类型实现相同的算法,代码仍然可读,并且执行速度就像每个数据类型实现一次算法一样快。
该框架还应该允许实现一个用于巨大图像数据的高效容器,该容器仅将图像的一小部分保留在内存中。
最小目标是一组“数据类型”、“光标”和“迭代器”实现,它们包装 ImageJ 中的可用图像类型。
注意:这个项目的想法已经非常详细(因此学生不需要提出自己的想法,或研究现有代码),但实施需要一些决心(该项目并不简单)。为了证明该项目能够顺利进行,除了此处所写的内容之外,学生还必须在项目申请中添加一些内容,以证明完成该项目的能力。
目标: 设计并实现一个高效的图像框架。
语言: Java。
导师: 约翰内斯·辛德林 (johannes.schindelin@gmx.de)
将 Micro-Manager 集成到斐济
该项目需要一些在 Linux、MacOSX 和 Windows 上编译 C++ 代码的知识。我们的想法是制作一个配方,其他人可以使用它来编译 Micro-Manager 的新版本,并将其集成到 Fiji 项目中以获得流畅的用户体验。为了确保对 Micro-Manager 的支持不会被无意中破坏,您还应该添加回归测试。
目标: 提供一种简单的方法来编译并通过 Fiji 发布 Micro-Manager。
语言: Java
导师: 约翰内斯·辛德林 (johannes.schindelin@gmx.de)
添加更多回归测试
每当发布 Fiji 时,或者在发生重大变化之后,我们都希望能够相当安全地确保我们不会破坏以前可以正常工作的东西。我们已经有一些 tests,但还不够。
该项目涉及列出斐济已经提供的所有功能,并且最好对所有这些功能进行基本测试。
这个想法是扩展tests/record.py中的简单Python脚本,以便更容易地记录预期出现的内容,并提供伪造的用户输入。
目标: 提供可以在无头模式下运行的测试,确保某些功能不会被破坏。
语言: Java、Clojure、Javascript、Jython、JRuby 或 ImageJ 的宏语言
导师: 约翰内斯·辛德林 (johannes.schindelin@gmx.de)
将单词扩展添加到脚本解释器中
Fiji 提供 5 种不同语言的脚本,全部在 JVM 上运行:Javascript、Jython、JRuby、Clojure、Beanshell 和 ImageJ 宏语言。通过反射API和每个脚本引擎提供的众多语言钩子,可以完成方法名称或成员变量名称以及类名称。
目标: 为脚本解释器提供单词扩展功能(请参阅Scripting Help)。
语言: Java 与脚本语言的组合,按优先顺序排列:Javascript、Jython、JRuby、Clojure 和 Beanshell。如果你能做到这一切,我们将为你竖立一座纪念碑。
导师: Albert Cardona (acardona@ini.phys.ethz.ch)
添加一个简单但功能最小的插件和脚本编辑器
ImageJ 目前提供非常有限的基于 java.awt.TextArea 的内置文本编辑器,用于编写、编译和运行 java 插件、ImageJ 宏以及最近的 javascript 脚本。文本编辑器缺乏语法突出显示,不使用正确的字体进行编码,并且缺乏最小的调试功能(例如解析堆栈跟踪以突出显示无法编译的行)。
该项目应该以可以扩展以允许调试(单步、断点、堆栈跟踪)的方式完成。
学生必须研究是否存在已经实现大量功能的现有开源组件,以避免重新发明轮子。
目标: 构建一个最小的文本编辑器,具有良好的编码字体、java 和 javascript 的语法突出显示(以及可选的 jruby、clojure 和 beanshell),以及编译 java 代码和解析堆栈跟踪以突出显示无法编译的行的能力。在jvi中构建是一个很大的好处,但必须启用非模态编辑功能以及隐式最小emacs键绑定(就像在任何默认的MacOSX文本区域中:⌃ Ctrl + E,⌃ Ctrl + A,⌃ Ctrl + W等)
语言: Java 或您选择的 JVM 脚本语言(最好是 Javascript、Jython、JRuby 或 Clojure)。
导师: Albert Cardona (acardona@ini.phys.ethz.ch)
增强 Fiji 的插件管理器
除了内置命令之外,ImageJ 还提供了通过实现 PlugIn、PlugInFilter 和 PlugInFrame 接口来添加用户开发的插件的方法。 Fiji 以 ImageJ 为核心,并围绕其封装了大量插件(请参阅list of extensions)。理想的应用程序菜单不能包含数百个插件:任何特定用户都没有使用其中一半以上的插件,并且它们的存在会妨碍添加其他用户所需的插件。
该项目的核心思想是生成一个插件管理器,受到JEdit优秀插件管理器的启发,用于启用/禁用插件。
缺乏插件管理系统极大地阻碍了优秀插件的广泛分发以及有需要的用户找到它们的能力。注册能力还将确保与特定 ImageJ 版本的正确兼容性,以及跟踪插件版本的能力。
目前,有一个基本的 the JRuby Interpreter,这应该是该项目的良好起点。该插件当前使用的插件列表可以在here中找到。
目标: 将斐济的更新插件转换为合适的插件管理器。
GUI 应该有两个主要组件:带有插件的树和用于阅读文档的文本窗格。
- 树必须镜像用户的插件菜单并提供启用/禁用插件的方法,即从菜单中添加/删除它们。并指示插件是否有任何更新或新可用的插件。
- 文本窗格将提供插件的文档,因此兼作内置插件文档 GUI。必须直接从此 wiki 站点获取文档(使用 HTMLEditorKit 显示在 javax.swing.JEditorPane 中)。
插件管理器将查询基于 fiji.sc 的特定服务器以获取更新的和新可用的插件。
语言: Java 或您选择的 JVM 脚本语言(最好是 Javascript、Jython、JRuby 或 Clojure)。
导师: Albert Cardona (acardona@ini.phys.ethz.ch), Johannes Schindelin (johannes.schindelin@gmx.de)
为斐济提供集群支持
Fiji 在台式机上运行良好,但对于某些任务,最好使用集群。
为此,斐济已经支持“无头”模式,即无需运行图形用户界面即可进行操作。但这还不够:
- 必须有一种简单的方法来定义应该对哪组图像或哪组子图像执行什么操作。
- 集群有各种风格,有很多不同的调度程序。需要一个带有适用于最常见调度程序的适配器的通用后端。
- 用户应该有一个漂亮的用户界面来查看进度和最终结果。
- 为了方便起见,斐济应提供确保安装当前斐济的选项。
目标: 添加一个组件来安排流程。
语言: Java。
导师: Pavel Tomancak、Johannes Schindelin (johannes.schindelin@gmx.de)
添加 JMathLib(MATLAB 克隆)支持
有相当多的算法可用作概念验证 MATLAB 脚本。虽然它是wrong to think of pixels as little squares,而且实际上所有执行图像处理的MATLAB脚本都存在这个缺点,但如果能够运行这些脚本而不必为此目的购买MATLAB许可证,那就太好了。
令人高兴的是,有一个用 Java 编写的 MATLAB 克隆:JMathLib。虽然它显然不是速度恶魔,但将 JMathLib 作为新的脚本语言添加到 ImageJ 并将其集成到 Fiji 中应该很有用,以便 MATLAB 脚本也可以像所有其他 ImageJ 脚本一样执行。
该项目将包括
- 获取尽可能多的用于图像处理的 .m 脚本,
- 将 JMathLib 作为脚本语言集成到斐济(使用 Jython、JRuby、Clojure、Javascript 和 BeanShell 共享的基础设施) - 我建议查看 plugin updater 的示例,
- 调整(或覆盖)JMathLib 的图像工具箱,使其与 ImageJ 无缝集成,
- 测试(并修复不起作用的部分)尽可能多的 .m 脚本。
目标: 将 JMathLib 集成为一种新的脚本语言。
语言: Java。
导师: 约翰内斯·辛德林 (johannes.schindelin@gmx.de)其他资源
- SoC2009Application
#其他链接
- ImageJ’s homepage
- Fiji’s developer mailing list
- #fiji-devel channel 在 irc.freenode.net 上