1

我正在更改一些 3D 体积的体素大小。如何编辑pixdim字段并计算新的affine

我有一些各向异性的 MR 体积,例如,体素大小为0.5 x 0.5 x 3mm。而且我有一些代码可以将它们插入到各向同性(如0.5 x 0.5 x 0.5mm 体素大小)体积中。问题是当我需要保存文件时,我必须计算仿射以将 ijk 空间中现在更密集的体素映射到参考 xyz 空间。我怎么做?

首先,我的想法是使用旧仿射并计算新仿射。

例如,如果体积 V 具有具有体素大小的体素形状,256 x 256 x 200.5 x 0.5 x 3插入到具有体素大小的体积 U256 x 256 x 120体素中0.5 x 0.5 x 0.5

旧仿射会做[255 255 19]OA = [X Y Z],新仿射应该做[255 255 119]NA = [X Y Z],我们知道AX=B X=inverse(A)B

所以新的仿射应该是inverse([255 255 119])[X Y Z]。然而,逆矩阵只存在于方阵中。不会有这种事inverse([255 255 119])

似乎set_voxel_sizepython-nibabel matlab-nifti-toolbox 等中没有功能。那是怎么回事?

如何显式更改体素大小?

4

1 回答 1

1

我目前面临类似的问题。为了解决这个问题,我从头开始创建了一个带有 0.5 毫米各向同性体素和所需形状的 nifti 标头。您可以使用header.set_zooms()以毫米为单位设置体素大小。

import nibabel as nib
import numpy as np

hdr = nib.Nifti1Header()
hdr.set_data_shape((256, 256, 120))
hdr.set_zooms((0.5, 0.5, 0.5))  # set voxel size
hdr.set_xyzt_units(2)  # millimeters
dst_aff = hdr.get_best_affine()

src_aff = np.eye(4)
src_aff_inv = np.linalg.inv(src_aff)

transform = np.matmul(src_aff_inv, dst_aff)
于 2019-12-08T21:41:54.307 回答