
ImgLib2黑客,从左到右:Stephan Saalfeld、Christian Birkhold (Dietz)、Curtis Rueden、Tobias Pietzsch。
从 2016 年 6 月 19 日星期日到 2016 年 6 月 28 日星期二,Stephan Saalfeld 在弗吉尼亚州阿什本的 HHMI Janelia 举办了 Tobias Pietzsch、Curtis Rueden 和 Christian Birkhold (Dietz) 的 hackathon 会议,以改进核心 ImageJ2 数据模型。
时间轴
下图说明了每个人都在场的情况:
<!– The image above was rendered by MediaWiki. Original data, as converted, follows.
–>
Kyle Harrington 23 号下午过来讨论了一些问题。
讨论和进展
我们花了最初几天的时间讨论核心ImageJ2元数据丰富的图像结构的用例和要求。
我们考虑的一些所需功能:
- ImageJ 1.x样式校准
- 时空剪切
- 显示转换
- 显示颜色转换
- 显示强度转换
- 存储有关原始数据的预处理信息(例如:最小值、最大值、直方图、特征……)
- 预测
- 非线性轴变换(例如:对数)
- 其他任意变换(例如:极坐标到笛卡尔坐标)
- 一些信息字符串(元数据)
我们用作我们想法的试金石的中心用例:
- 在图像的不同维度上进行不同的插值(例如:使用 Lanczos 将 XYZ 视为连续,但使用 nearest neighbor 或1D linear 将时间视为离散。
- 将 2D 图块注册到更大的 2D 图像中,如 TrakEM2 所示。
- 随着时间的推移注册 2D 平面(例如:纠正晃动的凸轮)。
- 样本上的时间偏差:每个平面/扫描线/像素可以有一个物理时间戳,可以以某种方式考虑到这一点,尽管在实践中这样做非常罕见。
我们花了相当多的时间考虑如何创建一个统一的数据结构(SpaceTree?:-),它将多个图像分组为某种树形或图形结构,并附加transforms,以处理上述所有用例等的方式。
最终,我们得出的结论是,在真空中设计这样的数据结构太困难了,因此我们选择开始使用ImgLib2对各个用例进行编码。我们提出了一种设计,它提供:A) 元数据丰富的图像的容器,其中各个元数据元素对 Views 操作敏感; B) 根据用例将这些元数据丰富的图像“整理”为越来越有用的数据结构的方案。
元数据丰富的容器
我们发明了 MetaViews,一个类似于 Views 的类,但用于元数据元素。然后,这些元素被聚合到 MetaSpace 中,它提供了用于处理该空间的修改器和访问器。例如,您可以将物理校准附加到空间轴,或将自定义可变宽度时间戳附加到时间轴上的每个点。
除此之外,我们正在积极开发一种(暂定名为)RichImage结构,由图像像素(例如RandomAccessible)和描述它的MetaSpace组成。 SCIFIO 库将更新为生成 Dataset,即 RichImage 元素的集合,其中直接使用源数据格式中的元素进行填充。
图像丰富器
对于上述各种用例(例如,在更大的空间中注册图块),我们将有一个调用ImageInspector插件的管道,该插件检查RichImages并决定是否可以使用可用的ImageEnricher插件来改进它们。 (再次强调:这些只是工作名称。)例如,Dataset 图像集合可能由一袋具有相关仿射变换的 2D 图块组成;然后,MosaicEnricher 可以虚拟地应用这些变换,以提供更大的 2D 马赛克图像,作为 RandomAccessible,它返回每个样本的图块值列表。 FusionEnricher可以对任何返回列表的RandomAccessible进行操作,使用给定的Converter混合该列表的值。 (实际上,丰富器很可能比这些示例更通用,但希望它们在这里能够说明一些可能性。)
源代码
这些数据结构的当前工作可以在以下位置查看:
还有一个黑客马拉松的实验存储库,位于: