主要内容:dcm批量选择模块介绍,dcm转png代码模块介绍,方便移植自己使用,最后把所有代码整合在预处理(5)文章中!!下面是跳转链接:
MR图像预处理(5)——MR图像处理成Yolov5,UNet格式数据-CSDN博客
最近在学习医学图像处理,但是数据预处理很麻烦,网上的数据处理不能满足我的全部要求,找起来很零碎,就打算放一份集成代码在网上,帮助自己复习巩固,也帮助大家加快预处理进度。
一,dcm文件夹批量选择dcm图片
我希望把701015或者601015文件夹(两者仅会存在一个)下面的dcm全部提取出来,并且以想要的方式重新命名,然后在保存到目标文件夹
代码如下:
import os
import shutil
if __name__ == '__main__':
# dicom文件目录
rt_path = r'C:\Users\22495\Desktop\myomagroup3b' #dcm原文件夹路径
output_path = r'C:\Users\22495\Desktop\processed' #最后输出的dcm文件夹路径
for root, dir, file in os.walk(rt_path):
split_root = root.split('\\')#通过\\来进行截断
if (split_root[-1]) == "701015" or (split_root[-1]) == "601015":
print('patient_' + split_root[-3] + ' pictures are storing')
#下面是修改名称的部分,按需来写
for f in file:
split_file = f.split('_')
f_old_path = os.path.join(root, f)
# 找到放了T2W_TSE的文件夹,复制里面的所有文件,并修改名称
f_new_name = split_root[-3] + '_T2W_TSE_' + split_file[-1]
#保存图片到新路径
f_new_path = os.path.join(output_path, f_new_name)
shutil.copy(f_old_path, f_new_path)
os.walk()
是一个生成器函数,用于遍历目录树中的所有文件和文件夹。
import os
for root, dirs, files in os.walk('path/to/directory'):
# root: 当前正在遍历的文件夹路径
# dirs: 当前文件夹中的子文件夹列表
# files: 当前文件夹中的文件列表
# 在这里可以对root、dirs和files进行相应的操作
# 例如,打印当前文件夹路径
print(root)
# 例如,打印当前文件夹中的所有文件名
for file in files:
print(file)
# 例如,打印当前文件夹及其子文件夹中的所有文件名
for dir in dirs:
for subdir_root, subdir_dirs, subdir_files in os.walk(os.path.join(root, dir)):
for subdir_file in subdir_files:
print(os.path.join(subdir_root, subdir_file))
二,dcm图片转换成png图片
import os
import pydicom
from matplotlib import pyplot as plt
dicom_directory = r"C:\Users\22495\Desktop\myomagroup3a\20220726080402\701015" # 原dcm文件路径
output_directory = r"C:\Users\22495\Desktop\dcm.png" # png图片保存路径
if not os.path.exists(output_directory):
os.makedirs(output_directory)#如果没有输出文件夹,就按需求创造一个这样的文件夹
for root, dirs, files in os.walk(dicom_directory):
for file in files:
if file.endswith(".dcm"):
dicom_file_path = os.path.join(root, file)
ds = pydicom.dcmread(dicom_file_path)
pixel_array_numpy = ds.pixel_array#找到dcm文件进行保存
# 3. 保存为PNG
output_path = os.path.join(output_directory, file.replace(".dcm", ".png"))
plt.imsave(output_path, pixel_array_numpy, cmap='gray')