如何向 MRI 图像添加切片? (插值)

问题描述 投票:0回答:1

我有一张大脑 MRI 图像,由 25 个切片组成,采用 NIFTI 格式(因此一个文件包含 3D 数据)。我需要它有 30 个切片才能使用特定的医疗工具 - 如何使用插值来添加中间切片(甚至只是末尾的切片)?

我已经看到提到的Matlab函数“interp3”,并且我尝试了以下代码:

[rows,cols,slices] = size('subject.nii')
[x1,y1,z1] = meshgrid(1:cols, 1:rows, 1:slices)
[x2,y2,z2] = meshgrid(1:cols, 1:rows, 0.5:0.5:slices)
out = interp3(x1, y1, z1, 'subject.nii', x2, y2, z2, 'linear', 0)

但是,它返回以下错误:

使用 griddedInterpolant 时出错 样本值必须是 double 或 single 类型。

interp3 中的错误(第 132 行) F = griddedInterpolant({X, Y, Z}, V, 方法,extrap);

我该如何解决这个问题? 或者我应该使用不同的功能?我也在这个论坛上看到了“imresize”,但我不知道如何使用它......

matlab interpolation nifti mri
1个回答
0
投票

添加切片的方法有多种。插值绝对不是最简单的。

首先,我非常喜欢的一个用于读写 NIfTI 文件的工具是 Jimmi Shen 的NIfTI 和分析图像工具。与内置的 matlab 函数相比,它可能看起来有点过时,但我认为它可以让您对标题和像素数据有更多的控制。

如果您使用该工具箱并执行

nii = load_untouch_nii ( '/tmp/MNI152_T1_2mm.nii.gz' ); 

然后你将拥有一个结构体

nii
,其中包含标题字段
hdr
和图像字段(像素)
img
。此示例图像的大小为 91x109x91,您可以使用
interp
将其采样到(例如)100x150x100 点:

[ gx, gy, gz ] = ndgrid ( 1:150, 1:100, 1:100 );                                        
img2 = interp3 ( nii.img, gx, gy, gz, 'nearest' );  

你可以看一下这两张图片:

figure ( 1 ); imagesc ( nii.img ( :, :, 1 ) ); axis equal       
figure ( 2 ); imagesc ( rot90 ( img2 ( :, :, 1 ) ) ); axis equal

您可以看到图像本身没有改变 - 您只是在两侧添加了空白区域。 (您可以通过扩展矩阵来完成此操作!)

还可以重新采样图像,以便新图像填充与旧图像相同比例的空间(在您的示例中仅在z方向,但xy也可以工作):

[ gx, gy, gz ] = ndgrid ( linspace ( 1, 109, 150 ), linspace ( 1, 91, 100 ), linspace ( 1, 91, 100 ) );
img3 = interp3 ( double ( nii.img ), gx, gy, gz, 'linear' );
figure ( 3 ); imagesc ( rot90 ( img3 ( :, :, 1 ) ) ); axis equal

img3
可能不是一个好主意的原因是您已经更改了图像的世界大小:原始字段
nii.hdr
有一个字段
pixdim
,它给出了每个点的间距(在本例中)它是 2x2x2 毫米立方)。但现在你将同一个世界空间压缩成更多的点,它们的间距就减小了;您现在需要更改重新采样文件的标头以反映这一点。

长话短说,

img2
确实添加了切片,
img3
已分布在更多切片上。

© www.soinside.com 2019 - 2024. All rights reserved.