Совместите две серии Dicom - PullRequest
       59

Совместите две серии Dicom

0 голосов
/ 25 января 2019

Я совершенно новичок в мире компьютерной томографии.Так что заранее спасибо, у меня есть две серии DICOM того же пациента.Для обеих серий информация первого среза равна

Series 1 
'ImagePositionPatient',
['-205.0966796875', '-384.0966796875', '-1496.5']
'Pixelspacing',['0.806640625', '0.806640625']
slice Thickness' 2mm
Image Orientation (Patient)['1', '0', '0', '0', '1', '0']

Series 2
'ImagePositionPatient', 
['-171.650390625', '-356.650390625', '-1099.7']
'Pixelspacing', ['0.69921875', '0.69921875']
'slice Thickness', 2mm
Image Orientation (Patient)['1', '0', '0', '0', '1', '0']
In both series slices are of  512*512 in size

.Я хочу перекрывать Серию 2 на Серию 1.

Но чтобы перекрываться, они должны иметь одинаковые координаты в соответствии с моим пониманием.Также есть разница между пиксельным интервалом и количеством файлов.Поэтому мой вопрос:

  • Как перекрывать две серии?

  • Как сопоставить индексы.Поскольку обе серии имеют разное количество ломтиков.Например, в серии 1 индекс среза равен 220 или значение Z равно -976. Как получить значение Z или индекс в серии 2 для этого конкретного среза серии 1?

Я использую пакет pydicom Python.Любой пример кода или идея для решения этой проблемы было бы здорово :)

Редактировать: sitk.resample код, который я использую

def resample_image(self,itk_image, ref_imge, is_label=False):
        original_spacing = itk_image.GetSpacing()
        original_size = itk_image.GetSize()
        out_spacing = ref_imge.GetSpacing()
        out_size = ref_imge.GetSize()
        resample = sitk.ResampleImageFilter()
        resample.SetOutputSpacing(out_spacing)
        resample.SetSize(out_size)
        resample.SetOutputDirection(itk_image.GetDirection())
        resample.SetOutputOrigin(ref_imge.GetOrigin()) 
        resample.SetTransform(sitk.Transform())
        resample.SetDefaultPixelValue(itk_image.GetPixelIDValue())

        if is_label:
            resample.SetInterpolator(sitk.sitkNearestNeighbor)
        else:
            resample.SetInterpolator(sitk.sitkLinear)#sitkBSpline)

        return resample.Execute(itk_image)

1 Ответ

0 голосов
/ 25 января 2019

Звучит так, как будто вы хотите повторно сэмплировать одно изображение на другое, чтобы они имели одинаковые размеры и размеры в пикселях. Если это так, вы можете использовать ResampleImageFilter или функцию Resample. Вот их страница документации.

Фильтр: https://itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1ResampleImageFilter.html

Функция: https://itk.org/SimpleITKDoxygen/html/namespaceitk_1_1simple.html#ab02a58cf3633d810fac5821749b49a74

Основная идея состоит в том, чтобы настроить систему координат изображения для одного изображения, а затем указать Resample для выборки другого изображения с использованием этой системы.

...