1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用python(pydicom)读取Dicom文件并且转换成png

使用python(pydicom)读取Dicom文件并且转换成png

时间:2022-01-25 22:35:11

相关推荐

使用python(pydicom)读取Dicom文件并且转换成png

这篇主要讲怎么处理dicom格式的医学影像文件,并且转换成png,这样利于我们对图像进行处理。

pydicom 目前取代了前的dicom库,更加的便捷

导入需要的模块,如果没安装,都可以用pip进行安装。SimpleITK、pydicom是操作医学影像的模块。

import osimport SimpleITKimport pydicomimport numpy as npimport cv2from tqdm import tqdmdef is_dicom_file(filename):#判断某文件是否是dicom格式的文件file_stream = open(filename, 'rb')file_stream.seek(128)data = file_stream.read(4)file_stream.close()if data == b'DICM':return Truereturn Falsedef load_patient(src_dir):'''读取某文件夹内的所有dicom文件:param src_dir: dicom文件夹路径:return: dicom list'''files = os.listdir(src_dir)slices = []for s in files:if is_dicom_file(src_dir + '/' + s):instance = pydicom.read_file(src_dir + '/' + s)slices.append(instance)try:slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])except:slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)for s in slices:s.SliceThickness = slice_thicknessreturn slicesdef get_pixels_hu_by_simpleitk(dicom_dir):'''读取某文件夹内的所有dicom文件:param src_dir: dicom文件夹路径:return: image array'''reader = SimpleITK.ImageSeriesReader()dicom_names = reader.GetGDCMSeriesFileNames(dicom_dir)reader.SetFileNames(dicom_names)image = reader.Execute()img_array = SimpleITK.GetArrayFromImage(image)img_array[img_array == -2000] = 0return img_arrayif __name__ == '__main__':#dicom文件目录dicom_dir = 'dcm/'# 读取dicom文件的元数据(dicom tags)slices = load_patient(dicom_dir)print('The number of dicom files : ', len(slices))# 提取dicom文件中的像素值image = get_pixels_hu_by_simpleitk(dicom_dir)for i in tqdm(range(image.shape[0])):#输出png文件目录img_path = "dcm_2_png/img_" + str(i).rjust(4, '0') + "_i.png"org_img =image[i]*20# 保存图像数组cv2.imwrite(img_path, org_img )

借鉴修改自DICOM转PNG

将DICOM库改为了pydicom库,路径稍作修改导出在代码同一目录下(导出前手动建目录)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。