9 个版本
0.1.8 | 2022 年 9 月 8 日 |
---|---|
0.1.7 | 2022 年 6 月 8 日 |
0.1.6 | 2022 年 5 月 7 日 |
0.1.5 | 2022 年 4 月 4 日 |
0.1.1 | 2021 年 7 月 26 日 |
#17 在 #nu 中
23KB
411 行
nu_plugin_dcm
请注意,此插件与 nu>=0.60 兼容。如果您想使用 nu<=0.44,请使用此插件的 0.1.3 版本。
nushell 插件,用于解析 Dicom 对象。
此插件处于开发初期。它是可用的,但它可能无法处理所有 Dicom 对象。一个显著的限制是,所有 Dicom 对象都应具有前导。
我仍在尝试找出使用此插件最有用的方法。请随意尝试,在 讨论 中发送反馈或在 问题 中报告问题。
用法
dcm
插件从单个值或特定列读取输入
dcm
:期望一个字符串/文件名或二进制 Dicom 数据dcm $column_name
:从$column
读取字符串/文件名或二进制 Dicom 数据。这与get $column | dcm
相同。
错误处理
dcm
插件以两种模式工作
- 默认情况下,当错误报告为错误行时,
- 当使用
--error
选项并在自定义列中时。这将报告指定列中的所有错误。空列值表示没有错误。
已知限制
- 没有前导和 DCIM 标头的 Dicom 对象将无法加载。
- PixelData 总是被跳过。目前我将其视为加快 Dicom 解析速度的功能。
示例
以表格形式输出 Dicom 文件
echo file.dcm | dcm # uses filename/string to specify which file to open
open file.dcm | dcm # pass binary data to `dcm`
ls file.dcm | dcm name # use `name` column as the filename
echo file.dcm | wrap foo | dcm foo # use `foo` column as the filename
open file.dcm | wrap foo | dcm foo # use `foo` column as binary data
将 Dicom 文件转储为 JSON/YAML 文档
open file.dcm | dcm | to json --indent 2
open file.dcm | dcm | to yaml
将当前目录中的所有 Dicom 文件转储为 JSON/YAML 文档
ls *.dcm | dcm name | to json --indent 2
ls *.dcm | dcm name | to yaml
在当前目录及其子目录中查找所有文件,解析它们并按 Modality 分组
ls **/* |
where type == file |
dcm name -e error |
where error == "" |
group-by Modality
对于当前目录中的每个文件,显示文件名、文件大小、SOP 实例 UID、Modality 和 Pixel Spacing,并按 SOP 实例 UID 排序
PixelSpacing 是一个包含 2 个值的数组。
要展平数组,请使用 .0
和 .1
索引。
let files = (ls | where type == file)
echo $files |
select name size |
merge {
echo $files |
dcm name -e error |
default "" SOPInstanceUID |
select SOPInstanceUID Modality PixelSpacing.0 PixelSpacing.1 error
} |
sort-by size
请注意,当文件无法解析时,它不会有 SOPInstanceUID
列。默认命令确保 select
可以找到该列。
您还可以像以下示例中一样使用 each
和 par-each
。
对于所有子目录中的每个文件,显示文件名、文件大小、文件的 SHA256 哈希、SOP 实例 UID 和任何 Dicom 解析错误。
使用 par-each
来并行处理文件
ls **/* |
par-each { |it| {
name: $it.name,
size: $it.size,
sha256: (open $it.name | hash sha256),
dcm: ($it.name | dcm -e error)
} } |
select name size sha256 dcm.Modality dcm.SOPInstanceUID dcm.error |
sort-by name
安装
使用 cargo 构建 和 安装
cargo install nu_plugin_dcm
然后在 nu 中注册
register --encoding=json <PATH-TO-nu_plugin_dcm>/nu_plugin_dcm
请注意,您 必须 使用 json
编码。目前不支持 capnp
。
依赖关系
~22–38MB
~541K SLoC