DICOM文件读取及PNG格式图片展示
import globimport pydicom
import matplotlib.pyplot as plt
import numpy as np
import os
import multiprocessing
import threading
import timedef extractDicomFileInfo(filename):"""提取Dicom文件的tag信息input :文件名output:相关信息"""info = {}dcm = pydicom.read_file(filename)info["PatientID"] = dcm.PatientID # 患者IDinfo["PatientName"] = dcm.PatientName # 患者姓名info["PatientBirthData"] = dcm.PatientBirthData # 患者出生日期 info["PatientAge"] = dcm.PatientAge # 患者年龄info['PatientSex'] = dcm.PatientSex # 患者性别info['StudyID'] = dcm.StudyID # 检查IDinfo['StudyDate'] = dcm.StudyDate # 检查日期info['StudyTime'] = dcm.StudyTime # 检查时间info['InstitutionName'] = dcm.InstitutionName # 机构名称info['Manufacturer'] = dcm.Manufacturer # 设备制造商info['StudyDescription'] = dcm.StudyDescription # 检查项目描述return infodef saveAsJPGImage(img_array, jpg_path, uid, lens):"""格式转换函数input : 像素矩阵,图片保存路径,uid,lensoutput:"""plt.figure(figsize=(12,6), dpi=80) # 绘制画板arr_temp = np.reshape(img_array, (lens,))max_val = max(arr_temp) # 获取像素极大值min_val = min(arr_temp) # 获取像素极小值img_array = (img_array-min_val)/(max_val-min_val) # 像素值归一化plt.imshow(img_array, cmap=plt.cm.bone)plt.title("UID:{}".format(uid))# print("saving image:{}".format(jpg_path.split('JPG图像/')[1]))plt.savefig(jpg_path)plt.close()def getDicomFile(dicom_dir, jpg_dir):"""获取dicom文件的参数信息input : dicom_dir,jpg_diroutput: args_list"""# 定位绝对路径all_file_list = os.listdir(dicom_dir)# 初始化args_listargs_list = []extension = 'dcm'for f in all_file_list:dcm_dir = os.path.join(dicom_dir, f, 'st01', '*.' + extension)dcm_files = glob.glob(dcm_dir)for i, d in enumerate(dcm_files):dicom_file_path = d# dicom_info = extractDicomFileInfo(dicom_file_path) # 提取tag信息备用dcm_name = os.path.basename(d) # t2640000201al.dcm# jpg_name = jpg_dir + d# print(jpg_name)dcm = pydicom.read_file(dicom_file_path) # 读取dicom文件if "PixelData" not in dcm:print(f"Dataset found with no Pixel Data: {d}")continueif len(dcm.pixel_array.shape) > 2:# 循环提取图片for index in range(int(dcm.pixel_array.shape[0])):# 根据dicom文件的BitAllocation显示1img = np.asarray(dcm.pixel_array[index], dtype='uint16')img_upload_path = os.path.join(jpg_dir, f, dcm_name.split('.d')[0], str(index) + ".png")if not os.path.exists(os.path.join(jpg_dir, f, dcm_name.split('.d')[0])):os.makedirs(os.path.join(jpg_dir, f, dcm_name.split('.d')[0]))# cmap参数是重点,选择plt.cm.bone,胸片显示才会正常plt.imsave(img_upload_path, img, cmap=plt.cm.bone)else:# 单图img = np.asarray(dcm.pixel_array, dtype='uint16')img_upload_path = os.path.join(jpg_dir, "x.png")plt.imsave(img_upload_path, img, cmap=plt.cm.bone)# img_array = dcm.pixel_array # 获取图像像素矩阵# lens = img_array.shape[0]*img_array.shape[1] # 获取像素矩阵大小# uid = dcm.SOPInstanceUID # 获取图像uid# args_tuple = (img_array, jpg_name, uid, lens) # 添加参数tuple# args_list.append(args_tuple)def main():"""main function"""# 存放DICOM文件的文件夹dicom_dir = "D:\papilla_detection\DICOM"# dicom_dir = r'E:\scripts\dicom2png'# 存放转换后的JPG图片的文件夹jpg_dir = "D:\papilla_detection\PNG"# jpg_dir = r'E:\scripts\dicom2png\png'begin_time = time.time() # 开始时间pool = multiprocessing.Pool(processes=5) # 创建进程池args_list = getDicomFile(dicom_dir, jpg_dir) # 获取参数list# pool.starmap(saveAsJPGImage, args_list) # 多进程保存jpg文件# pool.close() # 关闭进程end_time = time.time() # 结束时间print("耗时:{}s".format(round(end_time-begin_time, 4))) # 打印耗时if __name__ == '__main__':main()
DICOM文件读取及PNG格式图片展示相关推荐
- Dicom 文件 转成 JPG 格式(批量处理)
需求:将 Dicom 文件转成 JPG 格式 PS:可以批量处理 1.下载软件 免费绿色的阅读软件 MicroDicom 链接为:http://www.microdicom.com/downloads ...
- 如何将CAD文件转换成GIF格式图片?
如何将CAD文件转换成GIF格式图片?如何将CAD文件转换成GIF格式呢?在进行制图时我们可以保存时选择另存为的方法,可是面对大量的文件该怎么办呢? 1.首先我们启动迅捷CAD转换器.运行软件,进入文 ...
- 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整
1. 前言 为了能够在Labelme上对Dicom图像进行编辑,这里对python环境下Dicom文件的读取进行了研究.在Dicom图像中CT的窗宽窗位是一个很重要的概念,但是找了半天在pydicom ...
- ISP【三】———— raw读取、不同格式图片差异
part zero: 如何处理.raw格式数据,读取和转化 matlab读取raw图 (mark读取图片尺寸和位数均可设置,图片尺寸M,N,图片数据类型8bit,16bit改成uint16) clea ...
- [Python]小工具:将文件夹下多格式图片自动移动到指定位置
不扯远,直接聊重点,目的:将一个存放乱七八糟格式文件的文件夹中找出所有格式的图片,并将这些图片移动到指定路径下去 准备: 1.[资源]:存放乱七八糟文件的文件夹 我们这从江湖上搜集了些乱七八糟的东东都 ...
- 怎么把PDF文件转换成jpg格式图片
在发送PDF文件给他人查看时,如果想在任何设备上都能查看,又不想被别人轻易修改,那么可以将PDF文件的页面转换成一张张的图片,因为但是现在不管是手机还是电脑都是可以查看图片文件的,而且查看比较方便,也 ...
- ubuntu 下播放 yuv 格式的文件预览Raw格式图片
1.ubuntu 下播放 yuv 格式的文件 1)使用ffplay sudo apt-get install ffmpeg 查看图片 ffplay -f rawvideo -video_size 64 ...
- 基于MuPDF库实现PDF文件转换成PNG格式图片
背景 之所以会接触MuPDF是因为,有位群友在Q群里提问,如何将PDF保存为.PNG图片格式.我一看到这个问题,就蒙了,因为我没有接触过类似的项目或程序.但是,作为一群之主的我,还是要给初学者一个答复 ...
- matlab的seg是什么,地震数据文件读取——以SEG-Y格式为例
1.引 言 地震勘探是利用地下介质弹性和密度的差异,通过观测和分析大地对人工激发地震波的响应,推断地下岩层的性质和形态的地球物理勘探方法,是钻探前勘测石油与天然气资源的重要手段,在煤田和工程地质勘查. ...
最新文章
- 【原创】强化学习精选资料汇总:从入门到精通,看完这些干货就够啦!
- 动态产生一个TextBox,并使输入的文本靠右对齐
- BZOJ 1055 [HAOI2008]玩具取名
- APP运营如何找到精准用户,提升品牌知名度
- 谷歌在华遭遇首例关键词官司
- Madagascar的宏定义函数--判断整数的奇偶性函数
- 剑指offer面试题55 - I. 二叉树的深度(DFS)(递归)
- 系统学习机器学习之特征工程(四)--分箱总结
- 实验3: DHCP 基本配置
- Java 定时任务表达式
- 【前端实用工具集】js对url进行编码和解码的三种方式
- 自己动手写iPhone wap浏览器之BSD Socket引擎篇
- WordPress Contact Form插件‘cntctfrm_contact_emai’参数跨站脚本漏洞
- 用photoShop简单提取他人的签名
- H3C网管型交换机、路由器 常用登录管理方式使用详解 及 默认端口号,默认用户名、密码
- 如何自动生成参考文献格式
- Numerical Summation of a Series
- pygame 大球吃小球
- Google地图加密算法
- WM6模拟器(测试软件的好工具)使用手册