使用MATLAB在3D MRI体积中创建中间切片

bea*_*yez 0 matlab interpolation image-processing multidimensional-array

我有9张MRI图像,想用这些图像制作3D体积.从那里,我想插入每个切片之间.给定卷中的两个切片,我想在两个切片之间插入一个中间帧.目标是创建一个执行此插值的18 MRI体积.

我将如何在MATLAB中实现这一目标?

ray*_*ica 6

假设您的MRI图像处于3D堆叠体积中,您可以通过使用来完成您想要的任务interp3.选择采样点时,切片的行和列将保持不变,但时间或Z方向的大小只会加倍.所以这样的事情,假设这MRI是你的音量:

[rows,cols,slices] = size(MRI);
[X,Y,Z] = meshgrid(1:cols, 1:rows, 1:slices);
[X2,Y2,Z2] = meshgrid(1:cols, 1:rows, 0.5:0.5:slices);
out = interp3(X, Y, Z, MRI, X2, Y2, Z2, 'linear', 0);
Run Code Online (Sandbox Code Playgroud)

以上将生成一个具有两倍切片的卷,保持行和列相同并使用双线性插值.额外0确保如果我们创建的值超出原始采样点,我们将这些点推断为0.

如果您的图像不是 3D体积,则需要将其放入3D矩阵中.假设他们是所谓的MRI1最多MRI9,你可以这样做:

MRI = cat(3, MRI1, MRI2, MRI3, MRI4, MRI5, MRI6, MRI7, MRI8, MRI9);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用上面的代码.完成后,您可以通过执行以下操作来获取中间切片:

final_slices = MRI(:,:,1:2:end);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用访问每个中间切片final_slices.


作为一个看到这个工作的快速示例,让我们假设我们的卷是3 x 3 x 3卷中的一堆随机数:

rng(123123);
MRI = rand(3,3,3)

MRI(:,:,1) =

    0.3002    0.8302    0.1768
    0.9946    0.7214    0.0678
    0.2901    0.4627    0.5201


MRI(:,:,2) =

    0.2323    0.8516    0.7838
    0.3251    0.5326    0.6377
    0.7220    0.4735    0.0717


MRI(:,:,3) =

    0.3202    0.1259    0.3360
    0.1004    0.9260    0.6287
    0.6922    0.3191    0.9011
Run Code Online (Sandbox Code Playgroud)

运行上面的插值代码,我们得到:

out(:,:,1) =

     0     0     0
     0     0     0
     0     0     0


out(:,:,2) =

    0.3002    0.8302    0.1768
    0.9946    0.7214    0.0678
    0.2901    0.4627    0.5201


out(:,:,3) =

    0.2662    0.8409    0.4803
    0.6598    0.6270    0.3527
    0.5060    0.4681    0.2959


out(:,:,4) =

    0.2323    0.8516    0.7838
    0.3251    0.5326    0.6377
    0.7220    0.4735    0.0717


out(:,:,5) =

    0.2763    0.4887    0.5599
    0.2127    0.7293    0.6332
    0.7071    0.3963    0.4864


out(:,:,6) =

    0.3202    0.1259    0.3360
    0.1004    0.9260    0.6287
    0.6922    0.3191    0.9011
Run Code Online (Sandbox Code Playgroud)

如您所见,代码肯定会正确创建中间切片.您会看到每个偶数位置都是原始MRI图像之一,而奇数位置是插值结果.第一个切片并不意味着什么,因为我们试图从已知体积外推断.您可能希望在此点之后专注于第三个切片及其奇数位置,直到新卷结束.

  • 是啊**什么错误**?如果你按照我在上面的回答中所做的那样,你应该能够让它运转起来.我甚至展示了它的工作实例.在你真正告诉我什么是错的以及错误是什么之前,我们的对话就在这里停止. (2认同)