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

news2024/9/28 1:22:53

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, 我们下篇博客见~

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

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1363997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,入门教程(10)——常量、变量与命名规则的基础知识

上一篇: C#,入门教程(09)——运算符的基础知识https://blog.csdn.net/beijinghorn/article/details/123908269 C#用于保存计算数据的元素,称为“变量”。 其中一般不改变初值的变量,称为常变量,简称“常量”。 无论…

阿里云服务器地域怎么选择?2024地域选择方法

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

FineBI实战项目一(3):Kettle实现ETL到数据仓库

目前,finebi_shop_bi 中是没有任何数据的,是一个空的数据库。而后续我们的所有数据分析都将在该数据库中进行。我们第一件事情就是要将 「finebi_shop」数据库中的所有表抽取到「finebi_shop_bi」数据库中。要抽取并装载数据到「finebi_shop_bi」中&…

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常…

查看网络信息的原初 ifconfig

文章目录 查看网络信息的原初 ifconfig默认无参数使用-s显示短列表配置IP地址修改MTU启动关闭网卡更多信息 查看网络信息的原初 ifconfig Linux ifconfig命令用于显示或设置网络设备,在调试或调优的时间经常使用。 官方定义为: ifconfig - configure a…

19道ElasticSearch面试题(很全)

1. elasticsearch的一些调优手段 1、设计阶段调优 (1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引; (2)使用别名进行索引管理; (3&…

linux中最常用的网络命令

文章目录 linux中最常用的网络命令查看网络信息的原初 ifconfig默认无参数使用-s显示短列表配置IP地址修改MTU启动关闭网卡 网络中不中,先看ping行不行语法不加任何参数发送指定数目设定发送时间间隔组合使用 Linux ip命令显示网络设备设置IP地址启动关闭网卡统计方…

如何使用 CMake 生成一个静态库

文章目录 tutorial_3/CMakeLists.txttutorial_3/src/CMakeLists.txtcmake_tutorial/tutorial_3/src/hello.cpptutorial_3/src/hello.h根目录的 CMakeLists.txtsrc 目录的 CMakeLists.txthello.cpp 和 hello.h构建过程总结 tutorial_3/CMakeLists.txt cmake_minimum_required(V…

【AI视野·今日Robot 机器人论文速览 第六十七期】Mon, 1 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 1 Jan 2024 Totally 16 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers MURP: Multi-Agent Ultra-Wideband Relative Pose Estimation with Constrained Communications in 3D Environments Authors A…

leetcode算法题之递归--综合练习(一)

此专题对我们之前所学的关于递归的内容进行一个整合,大家可以自行练习,提升自己的编码能力。 本章目录 1.找出所有子集的异或总和在求和2.全排列II3.电话号码的字母组合4.括号生成5.组合6.目标和7.组合总和8.字母大小写全排列9.优美的排列 1.找出所有子…

【信息论与编码】习题-判断题-第二部分

目录 判断题 第二部分24. 信道矩阵 代表的信道的信道容量C125. 信源熵具有严格的下凸性。26. 率失真函数对允许的平均失真度具有上凸性。27. 信道编码定理是一个理想编码的存在性定理,即:信道无失真传递信息的条件是信息率小于信道容量 。28. 信道的输出…

在Ubuntu22.04上安装WordPress

WordPress是当今最简单、最强大的博客和网站建设工具。据统计全球大约有40% 以上网站是使用WordPress,这是个巨大的数字也侧面证明了WordPress的强大和普遍性。因此,如果你正在寻找一款高效、实用、可靠的CMS工具来构建网站,那么WordPress无疑…

【强化学习的数学原理-赵世钰】课程笔记(六)随机近似与随机梯度下降

目录 一.内容概述 二.激励性实例(Motivating examples) 三.Robbins-Monro 算法(RM 算法): 1.算法描述 2.说明性实例(llustrative examples) 3.收敛性分析(Convergence analysi…

MySQL数据库主从复制和读写分离

目录 一、MySQL主从复制和读写分离理论 (一)读写分离 1.什么是读写分离 2.为什么要读写分离 3.什么时候要读写分离 4.读写分离原理 5.常见MySQL 读写分离 (1)基于程序代码内部实现 (2)基于中间代理…

大学物理实验绪论——测量与误差

测量 测量的定义 以确定被测量对象量值为目的的操作称作测量。 测量的过程就是把被测物理量与选作计量单位的同类物理量进行比较的过程。 测量值的组成 物理量的测量值由数值和单位两部分组成。 测量的分类 测量分直接测量与间接测量。 等精度测量:对某一物理量多…

基于Java SSM框架实现实现机房预约系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现机房预约系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&#…

YOLOv8融合改进 更换检测头为Detect_DyHead同时添加C2f-EMSC和C2f-EMSCP模块

一、Detect_DyHead检测头和C2f-EMSC,C2f-EMSCP模块 详细介绍和代码在往期的博客里: Detect_DyHead: (YOLOv8改进检测头Detect为Detect_Dyhead-CSDN博客) C2f-EMSC和C2f-EMSCP: (YOLOv8改进…

【SpringCloud Alibaba】Nacos服务管理与Feign负载均衡

目录 一、微服务搭建 1.1 服务提供者与服务消费者 1.2 依赖关系 二、服务注册与负载均衡使用 2.1 Nacos 实现服务的注册与发现 2.2 Loadbalancer负载均衡、Feign声明式服务调用 2.3 示例综合实现 2.3.1 服务注册与发现测试 2.3.2 负载均衡测试 一、微服务搭建 1.1 服…

Gen-AI 的知识图和分析(无需图数据库)

如今,图表比以往任何时候都更加相关和有用。由于目前正在发生的人工智能革命,工程师们正在考虑围绕 Gen-AI 的机会,利用具有动态提示、数据基础和屏蔽功能的开放 Gen-AI 解决方案,这进一步促使他们思考知识图谱等有效的解决方案。…

【动态规划】【滑动窗口】C++算法:100154 执行操作后的最大分割数量

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 C算法:滑动窗口总结 动态规划 LeetCode100154 执行操作后的最大分割数量 给你一个下标从 0 开始的字符串 s 和一个整数 k。 你需要执行以下分割操作,直到字符串 s 变为 空&#xf…