#pydicom 安装与使用
安装
conda install -c conda-forge pydicom
使用
使用示例
import pydicom
filename = 'path_to_dicom'
ds = pydicom.dcmread(filename)
ds.dir() # 查看病人所有信息字典keys
print(ds.PatientName) # 查看病人名字
print(ds) # 查看病人所有信息字典, 如果出现某key对应值编码错误,先暂时跳过该key
############ 查看dicom对应图片值 #####################
print(ds.pixel_array.shape)
print(ds.pixel_array)
##读取显示图片
pylab.imshow(ds.pixel_array, cmap=pylab.cm.bone)
pylab.show()
##修改图片中的元素,不能直接使用data_array,需要转换成PixelData
for n,val in enumerate(ds.pixel_array.flat): # example: zero anything < 300
if val < 300:
ds.pixel_array.flat[n]=0
ds.PixelData = ds.pixel_array.tostring()
ds.save_as('newfilename.dcm')
详细使用教程:pydicom
环境
ubuntu 16.04
conda 4.3.30
# coding : utf-8
# DICOM文件读取及JPG格式图片展示
# @Author : huang
# @Time : 2020.08.18
"""
import pydicom
import matplotlib.pyplot as plt
import numpy as np
import os
import multiprocessing
import threading
import time
def extractDicomFileInfo(filename):
"""
提取Dicom文件的tag信息
input :文件名
output:相关信息
"""
info = {}
dcm = pydicom.read_file(filename)
info["PatientID"] = dcm.PatientID # 患者ID
info["PatientName"] = dcm.PatientName # 患者姓名
info["PatientBirthData"] = dcm.PatientBirthData # 患者出生日期
info["PatientAge"] = dcm.PatientAge # 患者年龄
info['PatientSex'] = dcm.PatientSex # 患者性别
info['StudyID'] = dcm.StudyID # 检查ID
info['StudyDate'] = dcm.StudyDate # 检查日期
info['StudyTime'] = dcm.StudyTime # 检查时间
info['InstitutionName'] = dcm.InstitutionName # 机构名称
info['Manufacturer'] = dcm.Manufacturer # 设备制造商
info['StudyDescription']=dcm.StudyDescription # 检查项目描述
return info
def saveAsJPGImage(img_array,jpg_path,uid,lens):
"""
格式转换函数
input : 像素矩阵,图片保存路径,uid,lens
output:
"""
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_dir
output: args_list
"""
# 定位绝对路径
all_file_list = os.listdir(dicom_dir)
# 初始化args_list
args_list = []
for f in all_file_list:
dicom_file_path = os.path.join(dicom_dir,f)
# dicom_info = extractDicomFileInfo(dicom_file_path) # 提取tag信息备用
jpg_name = jpg_dir+f.split('.d')[0]+'.jpg' # 新建jpg文件名
# print(jpg_name)
dcm = pydicom.read_file(dicom_file_path) # 读取dicom文件
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)
return args_list
def main():
"""
main function
"""
# 存放DICOM文件的文件夹
dicom_dir = "../dicom数据集/DICOM/"
# 存放转换后的JPG图片的文件夹
jpg_dir = "../dicom数据集/JPG图像/"
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()
批量将DICOM文件转换为JPG图像(多进程、高效率)
最新推荐文章于 2024-09-13 20:59:25 发布
本文详细介绍使用pydicom库批量转换DICOM医学影像至JPG格式,涵盖图像读取、信息提取、图像处理及多进程高效转换流程。

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



