ITK / SimpleITK DICOM系列加载错误的顺序/切片间距不正确

时间:2016-12-08 10:41:09

标签: python dicom imaging itk

许多数据集都会出现问题,但我们特别注意到

中的Soft-tissue-Sarcoma
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,3D图像在两个肺切片之间有脑切片

2 个答案:

答案 0 :(得分:1)

基本上,如果您使用SimpleITK.ReadImage或VTK读取dicoms,该工具将按照列表所在的顺序(通常按字母顺序)加载文件。切片和文件之间的映射不是按字母顺序排列,而是以随机顺序排列。这会导致切片间距(这些数据中缺少的标签)被错误地计算,因为它是文件0和1之间的位置差异。它还会导致脑切片在两个肺切片和其他奇怪的伪像之间出现。 / p>

解决方案是使用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)

答案 1 :(得分:0)

所以这就是我在我身边试过的:

$ 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存储库中修复: