Fo-dicom:如何添加 "empty, if unknown" 整数字符串类型 2 属性
Fo-dicom: How to add "empty, if unknown" integer string type 2 attribute
有一个类型为 2 的标签(“必需,如果未知则为空”),其值表示形式 Integer String
我想将其留空。我试过像这样创建属性:
var attribute = new DicomIntegerString(DicomTag.SeriesNumber, string.Empty);
文件存储有效。当我再次读取文件时,以下调用的结果 returns null
:
var result = dicomDataset.GetString(DicomTag.SeriesNumber); // <-- this is null
如何将元素正确设置为“零长度”或“如果未知则为空”?
谢谢。
正如评论中已经提到的,在数据集中设置空字符串的代码是正确的:
dataset.AddOrUpdate(new DicomIntegerString(DicomTag.SeriesNumber, string.Empty));
请注意,您还可以写一个 null
值:
dataset.AddOrUpdate(new DicomIntegerString(DicomTag.SeriesNumber, (string)null));
写出数据集将为 SeriesNumber
创建一个空标签,两种情况下的方式完全相同,因为这两种情况在 DICOM 中是等效的。
读回标签的代码也是正确的,它 returns null
的事实是由于这种等价性,这在解释空字符串标签时产生了歧义在 DICOM 中。由于 DICOM 字符串标签中的值数量仅由字符串本身(及其包含的反斜杠数量)定义,因此没有值的标签(通常由 null
值表示)之间没有区别),以及一个带有空字符串的标签(将由 ""
值表示)。为了与其他标签保持一致,return null
对于带有 VM 0 的标签是有意义的 - 对于 non-string VR,这里没有歧义,因为定义了值的长度。对于字符串值,return 一个空字符串也可能有意义 - 两种方法都有利有弊,所以最终它是库创建者的设计决定。
在 fo-dicom
中,最好同时处理这两种情况(例如使用 string.IsNullOrEmpty
之类的东西)。如果你从文件数据集中读取值,你总是得到 null
,但如果你将空字符串写入数据集中的标签(如上所示的第一个版本)并读回,你将得到相同的空字符串字符串返回。
顺便说一句:在 pydicom
(常见的 Python DICOM 库)中有一个关于相同设计决策的 discussion,最后添加了一个配置条目定义行为(例如 return None
或此类值的空字符串)。
有一个类型为 2 的标签(“必需,如果未知则为空”),其值表示形式 Integer String
我想将其留空。我试过像这样创建属性:
var attribute = new DicomIntegerString(DicomTag.SeriesNumber, string.Empty);
文件存储有效。当我再次读取文件时,以下调用的结果 returns null
:
var result = dicomDataset.GetString(DicomTag.SeriesNumber); // <-- this is null
如何将元素正确设置为“零长度”或“如果未知则为空”?
谢谢。
正如评论中已经提到的,在数据集中设置空字符串的代码是正确的:
dataset.AddOrUpdate(new DicomIntegerString(DicomTag.SeriesNumber, string.Empty));
请注意,您还可以写一个 null
值:
dataset.AddOrUpdate(new DicomIntegerString(DicomTag.SeriesNumber, (string)null));
写出数据集将为 SeriesNumber
创建一个空标签,两种情况下的方式完全相同,因为这两种情况在 DICOM 中是等效的。
读回标签的代码也是正确的,它 returns null
的事实是由于这种等价性,这在解释空字符串标签时产生了歧义在 DICOM 中。由于 DICOM 字符串标签中的值数量仅由字符串本身(及其包含的反斜杠数量)定义,因此没有值的标签(通常由 null
值表示)之间没有区别),以及一个带有空字符串的标签(将由 ""
值表示)。为了与其他标签保持一致,return null
对于带有 VM 0 的标签是有意义的 - 对于 non-string VR,这里没有歧义,因为定义了值的长度。对于字符串值,return 一个空字符串也可能有意义 - 两种方法都有利有弊,所以最终它是库创建者的设计决定。
在 fo-dicom
中,最好同时处理这两种情况(例如使用 string.IsNullOrEmpty
之类的东西)。如果你从文件数据集中读取值,你总是得到 null
,但如果你将空字符串写入数据集中的标签(如上所示的第一个版本)并读回,你将得到相同的空字符串字符串返回。
顺便说一句:在 pydicom
(常见的 Python DICOM 库)中有一个关于相同设计决策的 discussion,最后添加了一个配置条目定义行为(例如 return None
或此类值的空字符串)。