【问题标题】:Is there a way to add MultiValues and lists in pydicom有没有办法在 pydicom 中添加多值和列表
【发布时间】:2020-05-10 11:10:52
【问题描述】:

我正在尝试将MultiValue 添加到列表中。但我收到一个错误,指出我不能。我还尝试了.append.extend 将多值添加到列表中,但得到了无法将 NaN 值添加到列表的错误。另外,我无法理解 MultiValue 到底是什么。

我要运行的代码是:

original_z_spacing = np.abs(patient_data[0].ImagePositionPatient[2]
                            - patient_data[1].ImagePositionPatient[2])
# obtain rescaled HU array
hu_array = get_hounsfield_unit_array(patient_data)

original_spacings = np.array(patient_data[0].PixelSpacing + [original_z_spacing], dtype='float32')  # the error occurs here 

患者数据是一个包含 1595 个文件夹的文件夹,其中包含 dicom 文件。我在 Python 3.7 和 pydicom 版本 1.4.2 上运行此代码。我得到的错误是:

TypeError: unsupported operand type(s) for +: 'MultiValue' and 'list'

【问题讨论】:

  • 您似乎正在尝试将自定义对象添加到列表中。如果您尝试将自定义对象添加到 python 内置函数,这件事将不会继续,因为它们是不同的类型
  • 能否请您在代码中提供一个发生此错误的位置?

标签: python dicom pydicom


【解决方案1】:

这里有两个问题:MultiValue 确实不能添加到列表中,但你可以将其转换为list。在这种情况下,仅此一项是行不通的,因为PixelSpacing 具有 VR “DS”,例如被写为字符串值,因此您必须先将其转换为浮点数。

这应该可行:

pixel_spacing = patient_data[0].PixelSpacing
original_spacings = np.array([float(pixel_spacing[0]), float(pixel_spacing[1]), original_z_spacing], dtype='float32')

MultiValuepydicom 中用于表示多值标签的值的类。它主要表现得像一个列表(它源自MutableSequence),如果需要,可以转换为一个列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 2020-04-27
    • 2022-11-27
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多