【问题标题】:Write a struct into a DICOM header将结构写入 DICOM 标头
【发布时间】:2016-12-01 19:15:47
【问题描述】:

我创建了一个私有 DICOM 标记,我想知道是否可以使用该标记将结构存储在使用 dicomwrite(或类似方法)的 DICOM 文件中,而不是在每个结构的 DICOM 标头内创建一个字段字段。

(类似于保存患者姓名,但我不会使用 char 数据,而是使用 double)

这是一个例子:

headerdicom = dicominfo('Test.dcm');
a.a = 1; a.b = 2; a.c = 3;
headerdicom.Private_0011_10xx_Creator = a;
img = dicomread('Test.dcm');
dicomwrite(img, 'test_modif.dcm', 'ObjectType', 'MR Image Storage', 'WritePrivate', true, headerdicom)

Undefined function 'fieldnames' for input arguments of type 'double'.

提前谢谢大家,

【问题讨论】:

  • 您可以在其中存储任何类型的字节。
  • 当我尝试使用新标头编写 DICOM 文件时,我收到以下错误消息:“未定义函数 'fieldnames' 用于类型为 'char' 的输入参数。”
  • 您必须显示特定问题的代码。
  • 该错误可能意味着您在应该传递结构的地方传递了一个字符串,因此它试图从字符串中访问“字段名”并且失败了。
  • 刚刚用一个例子更新了问题。

标签: matlab struct dicom


【解决方案1】:

根据“结构”的含义,以下是您的选择。由于您想使用私有标签,这意味着没有应用程序但您的应用程序能够解释它,您可以选择技术上最合适的解决方案。基本上你的问题是“我应该使用我选择的 DICOM 工具包将哪个值表示分配给我的私有属性?”:

  1. 序列: 有一个 DICOM 值表示“序列”(VR=SQ),它允许您存储不同类型的属性列表。这个 VR 最接近结构。一个序列可以包含任意数量的项目,每个项目都以相同的顺序具有相同的属性。每个属性都可以有自己的 VR,所以如果你的 struct 包含不同的数据类型(如字符串、整数、浮点数),这是我的建议

  2. 多值属性: DICOM 支持“价值多重性”的概念。这意味着单个属性可以包含多个由反斜杠分隔的值。由于 VR 是属性的属性,因此所有值必须具有相同的类型。如果我理解正确,您有一个浮点数列表,可以将其编码为一个字段中的双精度数组,其中 VR=FD (=Floating Point Double): 0.001\0.003\1.234... 大多数工具包都支持对属性的索引访问。

  3. “Blob”: 您可以使用 VR=OB(其他字节)的属性,该属性也用于编码像素数据。它最多可以包含 4 GB 的二进制数据。属性的长度告诉您该属性的值包含多少字节。如果您只想将内存从/复制到结构,这将是要走的路,但显然它是类型安全和编码正确性方面最弱的方法。您将失去确保这些属性的 DICOM 工具包的内置方法。

要添加私有属性,你必须

  • 为属性保留一个范围,指定奇数组编号和元素编号的前缀(2 个十六进制数字)。 (例如,组 = 0x0011,元素 = 0x10xx)保留从 (0x0011, 0x10xx) - (0x0011, 0x10ff) 的范围。这是通过指定包含制造商名称的 Private Creator DICOM 标记来完成的。所以我怀疑不是

    headerdicom.Private_0011_10xx_Creator = a;

它应该是例如

headerdicom.Private_0011_10xx_Creator = "Gabs";
  • 在私有字典中注册您的私有标签,大多数时候通过指定私有创建者、组、元素和 VR(上述选项之一)

不确定如何在 matlab 中完成。

【讨论】:

  • 谢谢。我刚刚用一个例子更新了这个问题。能不能说的更具体一点?
  • 据我了解,为了使用您提供的这些选项之一,我必须更改 DICOM 字典。我不想那样做。
  • 我认为我在 DICOM 提供的选项方面非常具体。我不知道matlab的DICOM组件的API提供一个例子。添加私有标签时,不可避免扩展DICOM字典。对我来说似乎有问题的是您将 Private Creator 设置为您要编写的向量。 Private Creator 必须指定供应商或产品名称,以确定如何从 DICOM 字典中获取 VR
  • 是的,就我解决问题的选项而言,您非常精确,但我不是 DICOM 专家,所以我不太清楚我必须执行的任何步骤他们……
  • 关于matlab实现,我找到了这个链接:de.mathworks.com/matlabcentral/newsreader/view_thread/317779我想,就是这样完成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2016-01-26
相关资源
最近更新 更多