66 个版本

0.28.0 2023 年 10 月 20 日
0.27.0 2022 年 12 月 9 日
0.26.0 2022 年 12 月 6 日
0.23.0 2022 年 11 月 15 日
0.3.5 2017 年 12 月 27 日

#360 in 数据结构

BSD-2-Clause

60KB
1.5K SLoC

trk-io ┃ 最新版本 覆盖率 构建状态 依赖状态

trk-io 实现了一个 TrackVis (.trk) 读取器和写入器。

亮点

  • 可以读取和写入 TrackVis 文件。处理仿射变换的方式与 nibabel.streamlinesMI-Brain 相同。
  • 读取和写入的测试与 nibabel.streamlines 相当。
  • 可以选择使用 nifti-rs crate,这样就可以使用它从 NiftiHeader 创建 trk 标头,就像在 nibabel 中做的那样。
  • Reader 可以一次性读取所有流线,也可以用作生成器。
  • 在读取和写入 trk 时支持标量和属性。您可以在 trk_color.rs 中找到一些示例。
  • 一次性写入所有内容或逐条流线。
  • 遵循 nibabel.streamlines 架构(所有 3D 点都在单个 Vec![Point3D] 中)。目前,这仅对性能有用,但如果我们支持 BLAS,则可能更容易进行更改。
  • 处理字节序。
  • examples/*.rs 中编写了一些有用的工具。这是学习如何使用此库的好方法。

示例

// Read complete streamlines to memory
let tractogram = Reader::new("bundle.trk").unwrap().read_all();
for streamline in &tractogram.streamlines {
    println!("Nb points: {}", streamline.len());
    for point in streamline {
        println!("{}", point);
    }
}
// Simple read/write. Using a generator, so it will load only
// one streamline in memory.
let reader = Reader::new("full_brain.trk").unwrap();
let mut writer = Writer::new(
    "copy.trk", Some(reader.header.clone()));
for tractogram_item in reader.into_iter() {
    // tractogram_item is a TractogramItem, which is a tuple of
    // (streamline, scalars, properties).
    writer.write(tractogram_item);
}
// The new file will be completed only at the end of the scope. The
// 'n_count' field is written in the destructor because we don't
// know how many streamlines the user will write.

路线图

还有很多工作要做,但对于简单用途应该可以完美运行。特别是,未来的版本应该能够

  • 支持 TCK 读取/写入
  • 使用此库创建一些二进制工具,例如 show_affine、count_tracks、pruning、strip_info 等。
  • 支持 ops.Range,例如 streamlines[0..10]

非常感谢您的帮助。如果您在使用过程中遇到任何遗漏,请考虑提交一个问题。也欢迎提交拉取请求。

依赖关系

~3.5MB
~73K SLoC