DCM文件是一种医学影像文件,除了文件信息,还包含影像数据,即图像信息,只要能够提取到这个图像信息,就可以将其转换为如JPG等图片格式。
在医学影像处理中,常用到MASK掩膜,即勾画病灶区域,以进行病理分析预测,将DCM文件转换为JPG格式后,就可以利用OpenCV2等进行病灶勾画。
将DCM转JPG需用到pydicom库,若未安装,可使用控制台输入pip install pydicom进行安装
DCM转JPG可参考这位博主的博客:用python将.dcm格式图像转为.jpg格式
完整代码如下
import pydicom
import scipy.misc
import os
import imageio
import shutil
di=r"C:\Users\Miao\Desktop\Sample\01\T1\\DICOM\\"
#↑↑↑↑ 01号病人的T1类型的DCM数据所在文件夹 ↑↑↑↑
d=r"C:\Users\Miao\Desktop\Sample\01"
#↑↑↑↑ 01号病人文件夹 ↑↑↑↑
def DCMtoJPG(file_path):
global di
global d
c = []#医学影像常使用:多个患者→多种区域或时期DCM数据→多个DCM数据
#的文件夹存储格式,所以使用c存储多个DCM数据,一次性转换所有DCM文件
names = os.listdir(file_path)#file_path为患者数据所在文件夹
for name in names:
index = name.rfind('.')
name = name[:index]
c.append(name)
for files in c:
DCMpath = d+'\T1\DICOM\\'+files+".dcm" #DCM所在文件夹
JPGpath = d+"\T1jpg\\"+files+".jpg" #将JPG保存到此文件夹
data = pydicom.read_file(DCMpath) #使用pydicom读取DCM文件
img = data.pixel_array #使用pydicom读取图像数据
imageio.imsave(JPGpath,img) #保存JPG图像到out_path
原理上讲 此行代码.jpg改为.png等则可以保存为其他图像格式
JPGpath = d+"\T1jpg\\"+files+".jpg" #将JPG保存到此文件夹
PNGpath = d+"\T1jpg\\"+files+".png" #将PNG保存到此文件夹
当然JPG也可以转换为DCM,只是需要一个DCM文件
因为机器一般会直接输出DCM文件,为了方便处理(比如勾画MASK掩膜)我们才会将其转换为JPG然后再转换为DCM,所以我们一般会有原DCM文件,只要我们将原DCM文件里存储图像的数据部分修改为新的JPG图像数据再保存即可将JPG转换为DCM文件
可参考这位博主的博客:Python JPG图片转DCM
原博客未说清为何还需要一个DCM文件才能把JPG转为DCM 在此做了一些解释
代码如下(需要下载opencv2):
import pydicom
import numpy as np
import os
from pydicom.uid import ExplicitVRLittleEndian
import cv2
import imageio
from matplotlib import pylab as plt
img = cv2.imread(r"C:\Users\Miao\Desktop\Sample\01\T1jpg\IMG-0003-00001.jpg")
#↑↑↑↑↑↑读取JPG文件↑↑↑↑↑↑
img_arr16 = np.array(img, dtype=np.uint16)
img_arr16 = img_arr16.astype('int16')
data_changed = img_arr16[:, :, 0] #灰度图像三通道数据相同读取一个通道即可
pd = data_changed.tobytes()
dcm = pydicom.dcmread("001.dcm") #需要一个已有的DCM文件 最好是转为JPG的原DCM文件
dcm.PixelData = pd #将这个DCM文件的图像像素信息修改为JPG文件的数据
dcm.save_as("002.dcm") #保存为新的DCM文件