使用python批量读取mhd格式和raw格式医学图像

2023-11-05 16:20

本文主要是介绍使用python批量读取mhd格式和raw格式医学图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我的数据存放大致如下所示
在这里插入图片描述
E:/105casesMask_Seg是总的数据文件夹,Cxxx文件夹存放的是每个病人mhd文件,文件名字就相当于后面的patient_name

#导入需要的包
import os
from PIL import Image
import SimpleITK as sitk
import matplotlib.pyplot as plt
from natsort import natsorted
from tqdm import tqdm#获取文件内的的子文件夹名称
def get_file_name(filename):for root, dirs, files in os.walk(filename):array = dirsif array:return array
#创建空目录
def make_dir(save_path):if not os.path.isdir(save_path):os.makedirs(save_path)#将一个病人的所有图片整合在一张图打印出来
def plot_ct_scan(scan, num_column=4, jump=1):num_slices = len(scan)num_row = (num_slices//jump + num_column - 1) // num_columnf, plots = plt.subplots(num_row, num_column, figsize=(num_column*5, num_row*5))for i in range(0, num_row*num_column):plot = plots[i % num_column] if num_row == 1 else plots[i // num_column, i % num_column]        plot.axis('off')if i < num_slices//jump:plot.imshow(scan[i*jump], cmap=plt.cm.bone) #读取图片并保存
def save_img(data_path,save_path):root = os.path.join(os.getcwd(),data_path)paths = os.listdir(root)print(paths)for path in paths:if path.find('mhd')>=0:data =sitk.ReadImage(os.path.join(root,path))   #读取mhd文件#print(data)spacing = data.GetSpacing()scan = sitk.GetArrayFromImage(data)print('scan.shape',scan.shape) #图像大小print('spacing: ', spacing)   #间隔print('# slice: ', len(scan)) #切片数量#plot_ct_scan(scan)make_dir(save_path)for i in range(scan.shape[0]):im = Image.fromarray(scan[i,:,:])   #这里就是提取的图片数据  im.save(save_path+'/'+str(i)+'.png')  #保存图片if __name__ == '__main__':data_dir = 'E:/105casesMask_Seg/'   #mhd数据存放位置result_dir = 'E:/labels/'   #读取的图片存放位置patients_name = get_file_name( data_dir )patients_name = natsorted(patients_name )#print(data_dir)for patient_name in tqdm(patients_name):   #分别保存每个病人数据data_path = data_dir  + patient_namesave_path = result_dir + patient_namemake_dir(save_path)save_img(data_path,save_path)

这篇关于使用python批量读取mhd格式和raw格式医学图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351021

相关文章

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空