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格式图片展示相关推荐

  1. Dicom 文件 转成 JPG 格式(批量处理)

    需求:将 Dicom 文件转成 JPG 格式 PS:可以批量处理 1.下载软件 免费绿色的阅读软件 MicroDicom 链接为:http://www.microdicom.com/downloads ...

  2. 如何将CAD文件转换成GIF格式图片?

    如何将CAD文件转换成GIF格式图片?如何将CAD文件转换成GIF格式呢?在进行制图时我们可以保存时选择另存为的方法,可是面对大量的文件该怎么办呢? 1.首先我们启动迅捷CAD转换器.运行软件,进入文 ...

  3. 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整

    1. 前言 为了能够在Labelme上对Dicom图像进行编辑,这里对python环境下Dicom文件的读取进行了研究.在Dicom图像中CT的窗宽窗位是一个很重要的概念,但是找了半天在pydicom ...

  4. ISP【三】———— raw读取、不同格式图片差异

    part zero: 如何处理.raw格式数据,读取和转化 matlab读取raw图 (mark读取图片尺寸和位数均可设置,图片尺寸M,N,图片数据类型8bit,16bit改成uint16) clea ...

  5. [Python]小工具:将文件夹下多格式图片自动移动到指定位置

    不扯远,直接聊重点,目的:将一个存放乱七八糟格式文件的文件夹中找出所有格式的图片,并将这些图片移动到指定路径下去 准备: 1.[资源]:存放乱七八糟文件的文件夹 我们这从江湖上搜集了些乱七八糟的东东都 ...

  6. 怎么把PDF文件转换成jpg格式图片

    在发送PDF文件给他人查看时,如果想在任何设备上都能查看,又不想被别人轻易修改,那么可以将PDF文件的页面转换成一张张的图片,因为但是现在不管是手机还是电脑都是可以查看图片文件的,而且查看比较方便,也 ...

  7. ubuntu 下播放 yuv 格式的文件预览Raw格式图片

    1.ubuntu 下播放 yuv 格式的文件 1)使用ffplay sudo apt-get install ffmpeg 查看图片 ffplay -f rawvideo -video_size 64 ...

  8. 基于MuPDF库实现PDF文件转换成PNG格式图片

    背景 之所以会接触MuPDF是因为,有位群友在Q群里提问,如何将PDF保存为.PNG图片格式.我一看到这个问题,就蒙了,因为我没有接触过类似的项目或程序.但是,作为一群之主的我,还是要给初学者一个答复 ...

  9. matlab的seg是什么,地震数据文件读取——以SEG-Y格式为例

    1.引 言 地震勘探是利用地下介质弹性和密度的差异,通过观测和分析大地对人工激发地震波的响应,推断地下岩层的性质和形态的地球物理勘探方法,是钻探前勘测石油与天然气资源的重要手段,在煤田和工程地质勘查. ...

最新文章

  1. 【原创】强化学习精选资料汇总:从入门到精通,看完这些干货就够啦!
  2. 动态产生一个TextBox,并使输入的文本靠右对齐
  3. BZOJ 1055 [HAOI2008]玩具取名
  4. APP运营如何找到精准用户,提升品牌知名度
  5. 谷歌在华遭遇首例关键词官司
  6. Madagascar的宏定义函数--判断整数的奇偶性函数
  7. 剑指offer面试题55 - I. 二叉树的深度(DFS)(递归)
  8. 系统学习机器学习之特征工程(四)--分箱总结
  9. 实验3: DHCP 基本配置
  10. Java 定时任务表达式
  11. 【前端实用工具集】js对url进行编码和解码的三种方式
  12. 自己动手写iPhone wap浏览器之BSD Socket引擎篇
  13. WordPress Contact Form插件‘cntctfrm_contact_emai’参数跨站脚本漏洞
  14. 用photoShop简单提取他人的签名
  15. H3C网管型交换机、路由器 常用登录管理方式使用详解 及 默认端口号,默认用户名、密码
  16. 如何自动生成参考文献格式
  17. Numerical Summation of a Series
  18. pygame 大球吃小球
  19. Google地图加密算法
  20. WM6模拟器(测试软件的好工具)使用手册

热门文章

  1. 南京理工大学计算机专业考研,南京理工大学2020计算机考研初试科目调整
  2. 田忌赛马贪心算法_贪心算法之田忌赛马
  3. 见什么使什么的成语(见什么使什么四字成语大全)
  4. c语言程序员职业寿命,设计师的职业寿命,到底有几年?
  5. 每日感悟-华杉讲解论语-2022/01/24
  6. JAVA-冒泡排序详解
  7. 小米嵌入式面经(转发)
  8. 20X12 fcpx插件20种唯美浪漫小清新线条婚礼文字标题动画WeddingTitlesv2
  9. python学习笔记:读取xyz文件
  10. ⭐算法入门⭐《线性枚举》简单09 —— LeetCode 66. 加一