医学影像dcm格式转jpg运行慢解决方案:
利用python语言将一些数据格式为dcm的数据,转化成 jpg、png或bmp等形式。
问题描述:
一个同课题组的同学研究方向为医学影像方面,需要把dcm的医学影像转成jpg图像进行分析和处理。数据格式转化了一个多月还是没转好,导师顿时坐不住了。然后我也帮忙看了下代码,一开始没发现不对劲。后面发现…噢。。。
原因分析:
利用for循环批量进行数据转化时使用matplotlib保存图像后,没有清除 figure,即少了 plt.clf() 命令,导致速度变慢。
解决方案:
# 导入相应的包
import pydicom
import matplotlib.pyplot as plt
import os
from tqdm import tqdm
def DCMtoJPG(sourcepath, tagertpath):
# 遍历原始数据路径所有文件夹
all_dir = os.listdir(sourcepath)
all_dir_len = len(all_dir)
# 对每个子文件夹进行批量处理
for i, dir_ in enumerate(all_dir):
print('Toall dir: {} Current dir: {} : {}'.format(all_dir_len,i, dir_))
# 在目标路径也建立和原始路径相同名称的文件夹
os.makedirs(os.path.join(tagertpath, dir_), exist_ok=True)
# 遍历子文件夹中所有 dcm 数据
all_file = os.listdir(os.path.join(sourcepath, dir_))
#对每个子文件夹中的 dcm 数据进行处理
for file in tqdm(all_file):
ds = pydicom.dcmread(os.path.join(sourcepath, dir_, file))
plt.imshow(ds.pixel_array)
new_name = file.split('.')[0]+'.jpg'
out_path = os.path.join(tagertpath, dir_, new_name)
plt.savefig(out_path)
# **速度慢就是少了以下一行代码!!!**
plt.clf()
print('完结撒花!')
if __name__=='__main__':
# 原始数据路径 sourcepath 中包含了许多子文件夹,每个子文件夹包含 dcm 数据
sourcepath = '/home/name/sourcepath'
# 保存 jpg 的目标路径
tagertpath = '/home/name/tagertpath'
DCMtoJPG(sourcepath, tagertpath)