使用monai.visualize.utils.matshow3d函数展示3D医学图像

时间:2024-01-22 15:32:33


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()

使用monai.visualize.utils.matshow3d函数展示3D医学图像_3d

再比如我们显示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()

使用monai.visualize.utils.matshow3d函数展示3D医学图像_数据_02

接下来,我们再以真实的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)

使用monai.visualize.utils.matshow3d函数展示3D医学图像_数据_03

参数解析

  • 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,其余代码不变,结果如下

使用monai.visualize.utils.matshow3d函数展示3D医学图像_3d_04

因此,要是你的图像显示方向不对,通过改变data的方向和frame_dim参数可以解决。

文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连

使用monai.visualize.utils.matshow3d函数展示3D医学图像_3D_05