从三维MRI数据集探索切片

这个例子展示了如何通过三维MRI数据集提取切片来探索大量数据imtransformtformarray功能。

第1步:加载和查看水平MRI

此示例使用MATLAB®附带的MRI数据集,并且在帮助示例中使用剪辑Immovie..装载mri.mat将两个变量添加到Workspace:D.(128-by-128-by-27,类uint8)和灰度colormap,地图(89 -, - 3类双)。

D.包括27个128 × 128的水平切片,这些切片来自于对人类头盖骨的MRI数据扫描。值D.范围从0到88,因此需要颜色图来生成具有有用的可视范围的图形。的维数D.使它兼容剪辑.前两个维度是空间的。第三个维度是颜色维度,大小为1,因为它索引到颜色映射中。(大小(D, 3)对于RGB图像序列将是3。)第四维度是时间(与任何图像序列一样),但在这种特定情况下,它也是空间的。所以有三个空间尺寸D.我们可以使用imtransformtformarray将水平切片转换为矢状切片(显示头部侧面的视图)或冠状(正面)切片(显示头部前面或后面的视图)。

空间维度D.订购如下:

  • 尺寸1:头的前到后(吻侧/尾前/后)

  • 尺寸2:头部从左到右

  • 尺寸4:头部从下到上(低于上)。

一个重要的因素是,三个维度上的采样间隔是不一样的:垂直维度(4)上的采样间隔是水平维度的2.5倍。

加载MRI数据集,以蒙太奇的方式查看27个水平切片。

加载核磁共振成像;蒙太奇(D,地图)标题('水平切片');

步骤2:使用IMTRANSFORM从水平切片中提取矢状切片

我们可以通过拍摄一个子集来构造来自MRI数据的中间矢状切片D.并将其转换为不同的采样间隔和维度的空间方向D.

下面的语句提取正中矢状切片所需的所有数据。

M1 = D(:,64,::);尺寸(m1)
ans =1×4.128 1 1 27

然而我们不能M1因为它是128乘1乘1乘27。重塑(要么)可以转换M1变成一幅128 × 27的图像,可以用imshow

M2 = REPAPE(M1,[128 27]);尺寸(m2)
ans =1×2128 27.
人物,imshow (M2,地图);标题('矢状 - 原始数据');

的维度平方米订购如下:

  • 尺寸1:头的前到后(吻侧到尾侧)

  • 尺寸2:头部从下到上(低于上)。

我们可以通过变换得到一个更令人满意的视图平方米改变其方向并沿垂直(上-下)维度增加2.5倍的采样——使采样间隔在所有三个空间维度上相等。我们可以从转置开始一步一步地做这个,但是下面的仿射变换使单步变换和更经济地使用内存。

t0 = maketform('仿射',[0 -2.5;1 0;0 0]);

矩阵的上部2-2块传递给maketform,[0 -2.5; 1 0],结合了旋转和缩放。改造后,我们有:

  • 尺寸1:头的顶部到底部(上部到下部)。

  • 尺寸2:头的前到后(吻侧到尾侧)

调用

imtransform(m2,t0,'立方')

可以申请T.平方米并在沿上到下方向插入时提供良好的分辨率。然而,由于沿(输出)维2不发生重采样,因此不需要在前后方向进行三次插值。因此我们在这个维度中指定了最近邻重采样,效率更高,结果相同。

R2 = makeresampler ({“立方”“最近的”},“填满”);M3 = Imtransform(M2,T0,R2);图,imshow(m3,地图);标题('sagittal  -  imtransform'

步骤3:使用TFORMARRAY从水平切片中提取矢状切片

在此步骤中,我们获得与步骤2相同的结果,但使用tformarray在一次操作中从三个空间尺寸转到两个。步骤2以具有三个空间尺寸的数组开始,并以具有两个空间尺寸的阵列结束,但中间二维图像(M1平方米为…铺平道路imtransform这是创造的M3.如果我们使用,这些中间图像是不必要的tformarray代替imtransformimtransform2-D为2-D转换非常方便,但tformarray金宝app支持N- d到M- d变换,其中M不需要等于N。

通过它TDIMS_A参数,tformarray允许我们为输入阵列定义置换。自从我们想创建一个图像:

  • 尺寸1:上比下(原尺寸4,倒过来)

  • 尺寸2:尾部尾部(原始维度1)

通过我们指定的原始维度2提取出一个矢状面tdims_a=[4 1 2]。我们创建一个tform通过一个二维仿射变换开始合成T1.这将(新的)维度1按-2.5的倍数缩放,并增加68.5的移位,以保持数组坐标为正。复合的第二部分是自定义转换T2.提取出第64个矢状面用一个非常简单的inverse_fcn.

t1 = maketform('仿射'(-2.5 0;0 1;68.5 0]);inverseFcn = @ (X, t) [X repmat (t.tdata,[大小(X, 1) 1]));T2 = maketform ('风俗'inverseFcn 3 2 [], 64);Tc = maketform (“复合”,t1,t2);

注意T2.TC.将3-D输入取以为2-D输入。

我们使用与之前相同的重新采样方法,但包含了第三维度。

R3 = makeresampler ({“立方”“最近的”“最近的”},“填满”);

tformarray改变三个空间尺寸D.在一步中以2-D输出。我们的输出图像为66×128,原始27平面在垂直(较低)方向上膨胀至66。

M4 = Tformarray(D,Tc,R3,[4 11],[11],[66 128],[],0);

结果与先前的输出相同imtransform

图,imshow(m4,地图);标题(“矢状TFORMARRAY”);

第4步:创建和显示矢状切片

我们创建一个4-D阵列(第三维度是颜色维度),可以用于生成从左到右的图像序列,从而开始30个平面,跳过每个其他平面,并且总共有35个帧。转换的阵列具有:

  • 尺寸1:顶部到底部(优于劣等)

  • 尺寸2:前后(朝向尾部)

  • 维度4:左右。

与前面的步骤一样,我们使用Tdims_a = [4 1 2],再次翻转和重新安装/重新采样垂直尺寸。我们的仿射变换与上面的T1相同,除了我们将第三维度添加了0.5和(4,3)元的-14的(3,3)元元素,选择地图30,32,... 981,2,......,35.这为我们的35框架进行了中间矢状切片。

T3 = maketform ('仿射',[ -  2.5 0 0;0 1 0;0 0 0.5;68.5 0 -14]);

在我们的电话tformarraytsize_b = [66 128 35]现在包含了从左到右的第4维度的35帧(这是第三个变换维度)。再采样器保持不变。

S = tformarray (D、T3、R3, [4 1 2], [1 2 4], [66 128 35], [], 0);

将矢状切片视为蒙太奇(略微填充阵列以分隔蒙太奇的元素)。

S2 = PadArray(s,[6 0 0 0],0,'两个都');图中,蒙太奇(S2,地图)标题('矢状切片');

第5步:创建和显示冠状切片

构造冠状切片几乎与构建矢状切片相同。我们改变TDIMS_A(4一2)(4 2 1).我们创建了一系列45帧,从返回到前面启动8个飞行,跳过每一帧。输出阵列的尺寸如下所述:

  • 尺寸1:顶部到底部(优于劣等)

  • 维度2:左右

  • 尺寸4:前后(尾部到喙侧)。

t4 = maketform('仿射',[ -  2.5 0 0;0 1 0;0 0-0.5;68.5 0 61]);

在我们的电话tformarrayTSIZE_B=[66 128 48]分别表示垂直尺寸、侧面尺寸和前后尺寸。再采样器保持不变。

C = TformArray(D,T4,R3,[4 2 1],[112 4],[66 128 45],[],0);

请注意,步骤3,4和5中的所有阵列排列和翻转被处理为部分tformarray操作。

将冠状切片视为蒙太奇(略微填充阵列以分离蒙太奇的元素)。

C = padarray(C,[6 0 0 0],0,)'两个都');图中,蒙太奇(C2,地图)标题(“冠状切片”);