Карта (float для Resampling DICOM изображений, выдающих многозначную ошибку

Я получаю "можно только объединить список (не"MultiValue") в список", выделяя карту (часть с плавающей запятой, при запуске ниже передискретизации, этот код очень часто используется при сегментации изображений, таких как легкие и т. Д., Я думаю, возможно, это проблема с Python 3 и работал для более ранних версий, любая помощь высоко ценится:

    id = 0
    imgs_to_process = 
    np.load(output_path+'fullimages_{}.npy'.format(id))
    def resample(image, scan, new_spacing=[1,1,1]):
# Determine current pixel spacing
spacing = map(float, ([scan[0].SliceThickness] + scan[0].PixelSpacing))
spacing = np.array(list(spacing))

resize_factor = spacing / new_spacing
new_real_shape = image.shape * resize_factor
new_shape = np.round(new_real_shape)
real_resize_factor = new_shape / image.shape
new_spacing = spacing / real_resize_factor

image = scipy.ndimage.interpolation.zoom(image, real_resize_factor)

return image, new_spacing

 print ("Shape before resampling\t", imgs_to_process.shape)
imgs_after_resamp, spacing = resample(imgs_to_process, patient, [1,1,1])
print ("Shape after resampling\t", imgs_after_resamp.shape)

3 ответа

+ Изменить

spacing = map(float, ([scan[0].SliceThickness] + scan[0].PixelSpacing))

к

spacing = map(float, ([scan[0].SliceThickness] + list(scan[0].PixelSpacing)))

В основном, scan[0].PixelSpacing является MultiValue и должен быть преобразован в список перед объединением в другой список.

Это исправление:

def resample(image, scan, new_spacing=[1,1,1]):
    spacing = np.array([float(scan[0].SliceThickness)] + [float(x) for x in scan[0].PixelSpacing], dtype=np.float32)
    resize_factor = spacing / new_spacing
    new_real_shape = image.shape * resize_factor
    new_shape = np.round(new_real_shape)
    real_resize_factor = new_shape / image.shape
    new_spacing = spacing / real_resize_factor
    image = scipy.ndimage.interpolation.zoom(image, real_resize_factor, mode='nearest')
    return image, new_spacing

pix_resampled, spacing = resample(first_patient_pixels, first_patient, [1,1,1])
print("Shape before resampling\t", first_patient_pixels.shape)
print("Shape after resampling\t", pix_resampled.shape)

в основном, делая scan [0].SliceThickness, а также scan [0].PixelSpacing:

"список" значений "с плавающей запятой".

Это решение:

      def resample(image, scan, new_spacing=[1,1,1]):
    # Determine current pixel spacing
    spacing = [scan[0].SliceThickness]
    spacing.extend(scan[0].PixelSpacing)
    spacing = np.array(spacing, dtype=np.float32)
    
    resize_factor = spacing / new_spacing
    new_real_shape = image.shape * resize_factor
    new_shape = np.round(new_real_shape)
    real_resize_factor = new_shape / image.shape
    new_spacing = spacing / real_resize_factor
    
    image = scipy.ndimage.interpolation.zoom(image, real_resize_factor)
    
    return image, new_spacing
Другие вопросы по тегам