Есть ли способ добавить MultiValues ​​​​и списки в pydicom

Я пытаюсь добавить 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'

person tata    schedule 10.05.2020    source источник
comment
Похоже, вы пытаетесь добавить пользовательский объект в список. Эта вещь не будет продолжаться, если вы попытаетесь добавить пользовательские объекты во встроенные модули Python, поскольку они разных типов.   -  person Nicolas Iceberg    schedule 10.05.2020
comment
Не могли бы вы указать место в коде, где произошла эта ошибка?   -  person Nicolas Iceberg    schedule 10.05.2020


Ответы (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')

MultiValue — это класс, используемый в pydicom для представления значения многозначного тега. В основном он ведет себя как список (он получен из MutableSequence) и при необходимости может быть преобразован в список.

person MrBean Bremen    schedule 10.05.2020