Серия ITK/SimpleITK DICOM Загружены в неправильном порядке / неверный интервал срезов

Проблема возникает с рядом наборов данных, но мы особенно заметили это с саркомой мягких тканей в дикомах в

STS_004/1.3.6.1.4.1.14519.5.2.1.5168.1900.124239320067253523699285035604/1.3.6.1.4.1.14519.5.2.1.5168.1900.952127023780097934747932279670

Интервал читается как 30 вместо 2,9, и трехмерное изображение имеет кусочки мозга между двумя кусочками легких

2 ответа

В основном, если вы читаете файлы с использованием SimpleITK.ReadImage или VTK, инструмент загружает файлы в том же порядке, в котором находится ваш список (обычно в алфавитном порядке). Отображение между срезами и файлами не в алфавитном порядке, а в случайном порядке. Это приводит к неправильному вычислению интервала срезов (тега, который отсутствует в этих данных), поскольку это различие в положении между файлами 0 и 1. Это также приводит к тому, что срезы мозга появляются между двумя срезами легких и другими странными артефактами.

Решение заключается в предварительной сортировке файлов с использованием GetGDCMSeriesFileNames функция.

# noinspection PyPep8Naming
import SimpleITK as sitk

def safe_sitk_read(img_list, *args, **kwargs):
    dir_name = os.path.dirname(img_list[0]) 
    s_img_list = sitk.ImageSeriesReader().GetGDCMSeriesFileNames(dir_name)
    return sitk.ReadImage(s_img_list, *args, **kwargs)

Итак, вот что я попробовал на моей стороне:

$ gdcm2vtk --lower-left --ipp-sort STS_004/1.3.6.1.4.1.14519.5.2.1.5168.1900.124239320067253523699285035604/1.3.6.1.4.1.14519.5.2.1.5168.1900.952127023780097934747932279670 /tmp/kmader.mha

И затем я проверяю выходной файл с:

$ head -13 /tmp/kmader.mha 
ObjectType = Image
NDims = 3
BinaryData = True
BinaryDataByteOrderMSB = False
CompressedData = False
TransformMatrix = 1 0 0 0 1 0 0 0 1
Offset = -250 -250 -5
CenterOfRotation = 0 0 0
ElementSpacing = 0.976562 0.976562 3.3
DimSize = 512 512 311
AnatomicalOrientation = ???
ElementType = MET_SHORT
ElementDataFile = LOCAL

Действительно, вы правы, GDCM вычисляет Z-Spacing как 3,3, тогда как в этом случае он должен быть на самом деле 3,27. Пожалуйста, сообщите об ошибке вверх по течению.


Исправлено в текущем репозитории git:

Другие вопросы по тегам