下面是一个基于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, 0, Sx],
[F21 * dr, F22 * dc, 0, Sy],
[F31 * dr, F32 * dc, 0, Sz],
[0, 0, 0, 1]
]
)
我只测试了标准 [1, 0, 0, 0, 1, 0] 方向的几个案例。通过进一步的测试,我很乐意将 pydicom 作为 Dataset 方法添加。这也可以扩展到 3d 仿射(使用第一个和最后一个 ImagePositionPatient),如同一链接中所述。