Я столкнулся с проблемой при попытке совместить файлы 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, я построил аффинную матрицу:
Несмотря на эти действия, выравнивание файлов 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?
Я столкнулся с проблемой при попытке совместить файлы NIfTI (результаты сегментации из TotalSegmentator) с исходными файлами DICOM в Jupyter Notebook. Несмотря на мои усилия по созданию подходящей аффинной матрицы для данных DICOM, оси не совпадают должным образом. Вот рабочий процесс, которому я следовал: [b]Я отсортировал файлы DICOM по номеру экземпляра:[/b] [code]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 ) [/code] [b]Используя метаданные DICOM, я построил аффинную матрицу:[/b] [code]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 [/code] [b]Я рассчитал преобразование между ориентациями NIfTI и DICOM, используя nib.orientations.ornt_transform[/b] [code]transform_ornt = nib.orientations.ornt_transform(start_ornt, end_ornt) [/code] [b]Я применил вычисленное преобразование к данным NIfTI:[/b] [code]reoriented_nifti = nib.orientations.apply_orientation(nii_data, transform_ornt) [/code] Несмотря на эти действия, выравнивание файлов NIfTI и DICOM по-прежнему остается неправильным. Кажется, оси не выровнены должным образом. [b]Что я пробовал:[/b] [list] [*] Я протестировал несколько случаев с разной ориентацией и обнаружил, что при определенных условиях оси могут поворачиваться во всех трех направлениях. [*]При просмотре файлов в 3D Slicer или ITK-Snap выравнивание выглядит почти правильным, но имеет небольшие смещения. [*]Я проверил Матрица преобразования NIfTI в ITK-Snap (с помощью инспектора слоев изображения -> Информация -> Переориентация -> Воксельная матрица в мировую) и обнаружила, что аффинная матрица NIfTI выглядит правильно. [*] Однако в файлах DICOM некоторые оси иногда кажутся перевернутыми. [/list] [b]Мои вопросы:[/b] [list] [*]Есть ли проблема с тем, как я построил аффинную матрицу для файлов DICOM? [*]Должен ли я обрабатывать ориентацию файлов DICOM по-другому из-за их нефиксированной ориентации? [*]Почему файл NIfTI отображается правильно в 3D Slicer/ITK-Snap, но не при визуализации в рабочем процессе Jupyter Notebook? [*]Существуют ли какие-либо известные подводные камни при использовании nib.orientations.ornt_transform или apply_orientation, которые я, возможно, пропустил? [*]Как лучше всего обеспечить идеальное выравнивание файлов NIfTI и DICOM, учитывая частые перевороты осей в файлах DICOM? [/list]
Я столкнулся с проблемой при попытке совместить файлы NIfTI (результаты сегментации из TotalSegmentator) с исходными файлами DICOM в Jupyter Notebook. Несмотря на мои усилия по созданию подходящей аффинной матрицы для данных DICOM, оси не совпадают...
Я столкнулся с проблемой при попытке совместить файлы NIfTI (результаты сегментации из TotalSegmentator) с исходными файлами DICOM в Jupyter Notebook. Несмотря на мои усилия по созданию подходящей аффинной матрицы для данных DICOM, оси не совпадают...
Я конвертирую файл NIfTI с несколькими сегментами (например, печень и селезенка) в файл SEG DICOM с помощью инструмента itkimage2segimage из dcmqi.
Например:
Входные данные NIfTI: 203 среза с 2 метками (Печень, Селезенка).
Выходной сегмент...
Я конвертирую файл NIfTI с несколькими сегментами (например, печень и селезенка) в файл SEG DICOM с помощью инструмента itkimage2segimage из dcmqi.
Например:
Входные данные NIfTI: 203 среза с 2 метками (Печень, Селезенка).
Выходной сегмент...
Описание:
Я работаю над выравниванием изображения NIfTI по пиксельной системе координат DICOM. Я следил за блогом «Попиксельное выравнивание DICOM по NIFTI», чтобы реализовать преобразование. Однако после переориентации данных NIfTI форма...