monai.visualize.utils.matshow3d
函数是 MONAI 包中用于可视化 3D 图像数据的一个实用工具函数。它可以在平面中显示一个或多个3D图像,并提供一些参数来控制显示的方式和外观。
先导入需要的包
import numpy as np
import matplotlib.pyplot as plt
from monai.visualize import matshow3d
例如我们显示1个大小为10x10x10的图像
# create a figure of a 3D volume
volume = np.random.rand(10, 10, 10)
fig = plt.figure()
matshow3d(volume, fig=fig, title="3D Volume")
plt.show()
再比如我们显示2个大小为10x10x10的图像
# create a figure of a list of channel-first 3D volumes
volumes = [np.random.rand(1, 10, 10, 10), np.random.rand(1, 10, 10, 10)]
fig = plt.figure()
matshow3d(volumes, fig=fig, title="List of Volumes")
plt.show()
接下来,我们再以真实的CT腹部图像案例,来学习一些更高阶的用法
filename = '/Users/Downloads/WORD-V0.1.0/imagesTr/word_0002.nii.gz'
data = LoadImage(image_only=True, ensure_channel_first=True, simple_keys=True)(filename)
data1 = monai.transforms.Orientation("IPL")(data)
# (Left, Right), (Posterior, Anterior), (Inferior, Superior).
fig = monai.visualize.matshow3d(volume=data1,
title='abdomen CT',
figsize=(20,20),
frames_per_row=6,
frame_dim=-3,
channel_dim=0,
every_n=5,
vmin=-300, vmax=600,
cmap='gray',
fill_value=255)
参数解析
- volume: 要显示的三维体积数据。数据的形状可以是 BCHWD、CHWD 或 HWD。如果是高维数组,它们将被重塑为 (-1, H, W, [C]) 的形状,其中 C 取决于 channel_dim 参数。也可以传入一个 channel-first (C, H[, W, D]) 数组的列表,此时它们将被显示为一个填充和堆叠的体积。
- title:图像的标题
- figsize: 图像尺寸,小了调大,大了调小,试试看
- frames_per_row:每行显示的帧数。如果为 None,则使用 sqrt(firstdim)
- frame_dim:按哪个维度来展开数据,可选(-1,-2,-3),默认为-3.
- channel_dim:指定哪一维为通道维度。注意,它只能支持 3D 输入图像。默认值为 None
- vmin/vmax:要显示的最小值/最大值,使得显示的值在[vmin, vmax]之间。类似于窗宽
- every_n: 以每 n 个帧为间隔进行子采样,只显示每第 n 个帧。
- cmap:控制显示的颜色,医学图像一般为灰度图(gray)
- fill_value: 用于网格空白部分的值。如这里最后一行只有一幅图像,其余空白填充为255.
注意
显示最需要注意的是frame_dim
参数,它的值取决于你图像的方向,这里我把data的方向从原本的RAS
转换为IPL
后,它的shape是会发生改变的。shape改变了frame_dim
也要跟着变才能按照你想要的方向进行展示。
假设我现在data按RAS
方向,frame_dim改为-1
,其余代码不变,结果如下
因此,要是你的图像显示方向不对,通过改变data的方向和frame_dim
参数可以解决。
文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连