主要内容

从三维MRI数据集探索切片

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

第一步:负荷和查看水平MRI

这个例子使用了MATLAB®附带的MRI数据集,这是在帮助示例中使用的蒙太奇immovie.加载mri.mat将两个变量添加到工作区:D(128 -的- 128 - 1 - 27日上课uint8)和灰度彩色地图,地图(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,地图)标题(水平切片的

图中包含一个轴对象。标题为“水平切片”的轴对象包含一个类型为image的对象。

步骤2:从水平切片中提取矢状切片imtransform

我们可以从MRI数据中构建矢状中部切片,通过取D并将其转换为不同的采样间隔和维度的空间方向D

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

M1 = D (64::,:);大小(M1)
ans =1×4128 1 1 27

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

M2 =重塑(M1,[128 27]);大小(平方米)
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,地图)标题(“矢状imtransform”

图中包含一个轴对象。标题为矢状转换的轴对象包含一个image类型的对象。

步骤3:从水平切片中提取矢状切片tformarray

在这个步骤中,我们得到了与步骤2相同的结果,但是使用tformarray从三维空间到二维空间只需一次操作。步骤2确实从一个具有三维空间维度的数组开始,以一个具有二维空间维度的数组结束,但是中间的二维图像(M1平方米为…铺平道路imtransform创建M3.如果我们使用,这些中间图像是不必要的tformarray而不是imtransformimtransform对于2-D到2-D的变换是非常方便的,但是tformarray万博1manbetx支持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);

请注意,T2Tc将三维输入转换为二维输入。

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

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

tformarray变换的三维空间维度D只需一步就能实现二维输出。我们的输出图像是66乘128,原始的27个平面在垂直(上下)方向上扩展到66。

M4 = tformarray (D, Tc, R3, [4 1 2], [1 - 2], [66 - 128], [], 0);

结果与前面的输出相同imtransform

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

图中包含一个轴对象。标题为矢状- TFORMARRAY的轴对象包含一个类型为image的对象。

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

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

  • 尺寸1:上至下(上至下)

  • 尺寸2:前后(吻侧至尾侧)

  • 尺寸4:从左到右。

与前面的步骤一样,我们使用Tdims_a = [4 1 2],再次翻转和缩放/重采样垂直尺寸。我们的仿射变换与上面的T1相同,除了我们添加了一个第三维,其中(3,3)元素为0.5,(4,3)元素为-14,选择映射30,32,…98到1 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,地图)标题(“矢状切片”

图中包含一个轴对象。标题为矢状切片的轴对象包含一个类型为image的对象。

步骤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], [1 2 4], [45 66 128], [], 0);

注意,步骤3、4和5中的所有数组排列和翻转都是作为tformarray操作。

将冠状切片视为蒙太奇(稍微填充数组以分离蒙太奇的元素)。

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

图中包含一个轴对象。标题为Coronal Slices的axis对象包含一个image类型的对象。