在医学图像处理中的常见图像往往是Dicom格式保存,但是某些公开数据集上的数据直接就是.jpg或者png格式的保存,为了统一图像的输入模块,需要固定输入图像是dicom格式,这时候就涉及到使用png等格式的图像对已有的,非加密的dicom格式图像的图像矩阵内容做替换了。
1. Python下对dicom图像进行解析操作需要安装Pydicom模块
2. 使用Pydicom模块读取dicom数据
import pydicom
dcm = pydicom.read_file(dcmpath)
这样即可读取dcm文件
3. 使用opencv 读取图像文件
import cv2
img = cv2.imread(imgpath,c2.IMREAD_UNCHANGED)
4. 使用img矩阵替换dcm中的图像矩阵内容
首先需要确定img是否是8位或者16位,需要根据img的位数修改dcm里面的信息;然后进行替换,替换后再重置dcm的row、column以及位数
if ds[0x0028, 0x0100].value == 16: # 如果dicom文件矩阵是16位格式
newimg = newimg.astype(np.uint16) # newimg 是图像矩阵 ds是dcm
elif ds[0x0028, 0x0100].value == 8:
newimg = newimg.astype(np.uint8)
else:
raise Exception("unknow Bits Allocated value in dicom header")
ds.PixelData = newimg.tobytes() # 替换矩阵
ds.__setattr__("Rows", newrow) # 设置新矩阵的row,row是newimg的row
ds.__setattr__("Columns", newcol) # 设置新矩阵的column,col是newimg的col
ds.__setattr__("WindowCenter", int(factor / 2)) # 可重设窗位,或者不重设
ds.__setattr__("WindowWidth", factor - 1) # 可设窗宽,或者不重设
5. 保存修改后的dcm
ds.save_as(dcm_path)
替换效果如下
替换前
替换后