微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从python中的DICOM文件获取仿射信息?

如何解决如何从python中的DICOM文件获取仿射信息?

我有一个带有DICOM文件文件夹(例如CT扫描),我需要提取体积的仿射信息,因为我将生成一个遮罩,以后需要它来对齐体积和遮罩。

但是,我现在的解决方案根本不是最优的。我使用dicom2nifti软件包首先从包含DICOM文件文件夹中创建一个nifti文件,然后使用nibabel打开创建的nifti文件。然后我得到仿射信息 nii.affine(其中nii是已加载的nifti文件python对象)。
这就是为什么创建nifti文件要花很多时间的原因。

如何使用python获取仿射矩阵?

解决方法

下面是一个基于https://nipy.org/nibabel/dicom/dicom_orientation.html#dicom-affine-formula的二维单切片仿射矩阵,使用pydicom,并将pydicom数据集ds传递给该函数。

import numpy as np 

def affine2d(ds):
    F11,F21,F31 = ds.ImageOrientationPatient[3:]
    F12,F22,F32 = ds.ImageOrientationPatient[:3]

    dr,dc = ds.PixelSpacing
    Sx,Sy,Sz = ds.ImagePositionPatient

    return np.array(
        [
            [F11 * dr,F12 * dc,Sx],[F21 * dr,F22 * dc,Sy],[F31 * dr,F32 * dc,Sz],[0,1]
        ]
    )

我仅针对标准[1,0,0,0,1,0]方向测试了几种情况。经过进一步的测试,我很乐意作为数据集方法添加到pydicom中。如同一链接所述,它也可以扩展到3d仿射(使用第一个和最后一个ImagePositionPatient)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。