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 数据结构
60KB
1.5K SLoC
trk-io ┃
trk-io
实现了一个 TrackVis
(.trk) 读取器和写入器。
亮点
- 可以读取和写入
TrackVis
文件。处理仿射变换的方式与nibabel.streamlines
和MI-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