matlab使用教程(87)—可视化标量三维体数据的方法

1.什么是标量三维体数据?

        典型的标量三维体数据由一个三维数据数组和三个维度相同的坐标数组组成。坐标数组指定每个数据点的 xy 和 z 坐标。

        坐标的单位取决于数据的类型。例如,流数据的坐标单位可能是英寸,数据单位是 psi。

        许多 MATLAB® 函数对于可视化标量数据很有用:

  • 切片平面通过将数据值映射到颜色,为了解数据值在三维体内的分布提供了一种途径。您可以按任意角度创建切片平面,也可以使用非平面切片。(有关如何使用切片平面的说明,请参阅 slice三维体切片示例以及用来显示环境的切片平面。)您可以指定用来为等值面着色的数据,以便通过颜色和曲面形状显示不同的信息(请参阅 isocolors)。

  • 等高线切片是在三维体内的特定坐标处绘制的等高线图。等高线图让您能够看到给定平面内哪些位置的数据值是相等的。有关示例,请参阅 contourslice

  • 等值面是通过使用等值点作为 patch 图形对象的顶点而构成的曲面。

2.显示 MRI 数据的方法

  • 更改数据格式
  • 显示 MRI 数据的图像
  • 显示二维等高线切片
  • 显示三维等高线切片
  • 将等值面应用于 MRI 数据
  • 添加等值顶以显示切割曲面
  • 定义视图
  • 添加光照

        标量数据的示例包括磁共振成像 (MRI) 数据。这种数据通常包含在一个三维体(例如人体)内采集的多个切片平面。MATLAB 包括一个 MRI 数据集,其中包含人类头部的 27 个图像切片。本示例说明适用于 MRI 数据的以下可视化方法:

2.1更改数据格式

        MRI 数据 D 以 128×128×1×27 数组的形式存储。第三个数组维度通常用于表示图像的颜色数据。但是,由于这些是索引图像(颜色图 map 也会加载),因此第三个维度没有信息,可以使用 squeeze 命令删除。结果就是一个 128×128×27 数组。

        第一步是加载数据并将数据数组从四维转换为三维。

load mri
D = squeeze(D);

2.2显示 MRI 数据的图像

        要显示其中一个 MRI 图像,请使用 image 命令:

  • 创建一个新的 figure 函数,它使用与数据一起加载的 MRI 颜色图:

  • 对数据数组进行索引,以获得第八个图像的数据。

  • 调整 axis 缩放。

figure
colormap(map)
image_num = 8;
image(D(:,:,image_num))
axis image

        保存 x 和 y 坐标轴范围,在本示例的下一部分使用:

x = xlim;
y = ylim;

2.3显示二维等高线切片

        将 MRI 数据可视化为三维体数据,因为它是从三维对象中逐步采集的切片集合。使用 contourslice 显示三维体切片的等高线图。创建与本示例第一部分中的图像具有相同方向和大小的等高线图:

  • 调整 y 轴方向 (axis)。

  • 设置范围(xlimylim)。

  • 设置数据纵横比 (daspect)。

        为了提高细节的可见性,此等高线图使用 jet 颜色图。brighten 函数可降低颜色值的亮度。

cm = brighten(jet(length(map)),-.5);
figure
colormap(cm)
contourslice(D,[],[],image_num)
axis ij
xlim(x)
ylim(y)
daspect([1,1,1])

2.4 显示三维等高线切片

        与作为二维对象的图像不同,等高线切片是可以从任何方向显示的三维对象。例如,您可以在三维视图中显示四个等高线切片。

figure
colormap(cm)
contourslice(D,[],[],[1,12,19,27],8);
view(3);
axis tight

2.5将等值面应用于 MRI 数据

        您可以使用等值面显示三维体的整体结构。如果与等值顶结合使用,这种方法可以揭示等值面内部数据的相关信息。

        首先,使用 smooth3 对数据进行平滑处理,然后使用 isosurface 计算等值数据。使用 patch 将这些数据显示在图窗中(对等值顶使用原始灰度颜色图)。

figure
colormap(map)
Ds = smooth3(D);
hiso = patch(isosurface(Ds,5),...
   'FaceColor',[1,.75,.65],...
   'EdgeColor','none');
   isonormals(Ds,hiso)

isonormals 函数使用从平滑数据获得的顶点法线来渲染等值面,从而提高等值面的质量。等值面使用一种颜色来表示其等值。

2.6添加等值顶以显示切割曲面

        使用 isocaps 计算另一个补片的数据,该补片与等值面以相同的等值 (5) 显示。使用未平滑处理的数据 (D) 显示内部细节。您可以将此看作是切掉顶部的头部切割图。位置较低的等值顶在最终视图中不可见。

hcap = patch(isocaps(D,5),...
   'FaceColor','interp',...
   'EdgeColor','none');

2.7定义视图

        定义视图并设置纵横比(viewaxisdaspect)。

view(35,30) 
axis tight 
daspect([1,1,.4])

2.8添加光照

        添加光照并根据三维体数据的梯度重新计算曲面法线,从而产生更平滑的光照(camlightlightingisonormals)。增大等值顶的 AmbientStrength 属性,以增强颜色亮度而不影响等值面。设置等值面的 SpecularColorReflectance,使镜面反射光的颜色更接近等值面的颜色,然后设置 SpecularExponent 以减小镜面反射区的大小。

lightangle(45,30);
lighting gouraud
hcap.AmbientStrength = 0.6;
hiso.SpecularColorReflectance = 0;
hiso.SpecularExponent = 50;

        将等值顶与等值面相结合,以可视方式呈现 MRI 数据。

        等值顶使用插补面着色,也就是说由图窗的颜色图决定补片的颜色。此示例使用数据附带的颜色图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

配电网和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值