#dicom #nushell #nu #read

bin+lib nu_plugin_dcm

nushell 解析 Dicom 文件的插件

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

MIT 和可能 CC-PDDC

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 可以找到该列。

您还可以像以下示例中一样使用 eachpar-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