这个例子展示了如何通过三维MRI数据集提取切片来探索大量数据imtransform
和tformarray
功能。
此示例使用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.
我们可以使用imtransform
或tformarray
将水平切片转换为矢状切片(显示头部侧面的视图)或冠状(正面)切片(显示头部前面或后面的视图)。
空间维度D.
订购如下:
尺寸1:头的前到后(吻侧/尾前/后)
尺寸2:头部从左到右
尺寸4:头部从下到上(低于上)。
一个重要的因素是,三个维度上的采样间隔是不一样的:垂直维度(4)上的采样间隔是水平维度的2.5倍。
加载MRI数据集,以蒙太奇的方式查看27个水平切片。
加载核磁共振成像;蒙太奇(D,地图)标题('水平切片');
我们可以通过拍摄一个子集来构造来自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')
在此步骤中,我们获得与步骤2相同的结果,但使用tformarray
在一次操作中从三个空间尺寸转到两个。步骤2以具有三个空间尺寸的数组开始,并以具有两个空间尺寸的阵列结束,但中间二维图像(M1
和平方米
为…铺平道路imtransform
这是创造的M3
.如果我们使用,这些中间图像是不必要的tformarray
代替imtransform
.imtransform
2-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-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]);
在我们的电话tformarray
那tsize_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,地图)标题('矢状切片');
构造冠状切片几乎与构建矢状切片相同。我们改变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]);
在我们的电话tformarray
那TSIZE_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,地图)标题(“冠状切片”);