Как совместить файлы NIfTI с оригинальными файлами DICOM?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как совместить файлы NIfTI с оригинальными файлами DICOM?

Сообщение Anonymous »

Я столкнулся с проблемой при попытке совместить файлы NIfTI (результаты сегментации из TotalSegmentator) с исходными файлами DICOM в Jupyter Notebook. Несмотря на мои усилия по созданию подходящей аффинной матрицы для данных DICOM, оси не совпадают должным образом.
Вот рабочий процесс, которому я следовал:
Я отсортировал файлы DICOM по номеру экземпляра:

Код: Выделить всё

dicom_files = sorted(
[os.path.join(dcm_folder, f) for f in os.listdir(dcm_folder) if f.endswith('.dcm')],
key=lambda x: pydicom.dcmread(x).InstanceNumber
)
Используя метаданные DICOM, я построил аффинную матрицу:

Код: Выделить всё

ds1 = pydicom.dcmread(dicom_files[0])
ds2 = pydicom.dcmread(dicom_files[1])

a = np.array(ds1.ImageOrientationPatient[:3])
b = np.array(ds1.ImageOrientationPatient[3:])
slice_diff = (np.array(ds1.ImagePositionPatient) - np.array(ds2.ImagePositionPatient)) / (
ds1.InstanceNumber - ds2.InstanceNumber
)
c = slice_diff / np.sum(slice_diff**2) ** 0.5

matrix = np.zeros((4, 4))
matrix[3, 3] = 1
matrix[:3, 0] = b
matrix[:3, 1] = a
matrix[:3, 2] = c
affine_matrix = matrix
Я рассчитал преобразование между ориентациями NIfTI и DICOM, используя nib.orientations.ornt_transform

Код: Выделить всё

transform_ornt = nib.orientations.ornt_transform(start_ornt, end_ornt)
Я применил вычисленное преобразование к данным NIfTI:

Код: Выделить всё

reoriented_nifti = nib.orientations.apply_orientation(nii_data, transform_ornt)
Несмотря на эти действия, выравнивание файлов NIfTI и DICOM по-прежнему остается неправильным. Кажется, оси не выровнены должным образом.
Что я пробовал:
  • Я протестировал несколько случаев с разной ориентацией и обнаружил, что при определенных условиях оси могут поворачиваться во всех трех направлениях.
  • При просмотре файлов в 3D Slicer или ITK-Snap выравнивание выглядит почти правильным, но имеет небольшие смещения.
  • Я проверил Матрица преобразования NIfTI в ITK-Snap (с помощью инспектора слоев изображения -> Информация -> Переориентация -> Воксельная матрица в мировую) и обнаружила, что аффинная матрица NIfTI выглядит правильно.
  • Однако в файлах DICOM некоторые оси иногда кажутся перевернутыми.
Мои вопросы:
  • Есть ли проблема с тем, как я построил аффинную матрицу для файлов DICOM?
  • Должен ли я обрабатывать ориентацию файлов DICOM по-другому из-за их нефиксированной ориентации?
  • Почему файл NIfTI отображается правильно в 3D Slicer/ITK-Snap, но не при визуализации в рабочем процессе Jupyter Notebook?
  • Существуют ли какие-либо известные подводные камни при использовании nib.orientations.ornt_transform или apply_orientation, которые я, возможно, пропустил?
  • Как лучше всего обеспечить идеальное выравнивание файлов NIfTI и DICOM, учитывая частые перевороты осей в файлах DICOM?
Будем очень признательны за любые идеи, предложения или альтернативные рабочие процессы для решения этой проблемы согласования. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... icom-files
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»