Python 如何替换Dicom医学图像内容 附代码

在医学图像处理中的常见图像往往是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)

替换效果如下

替换前

替换后

你可能感兴趣的:(图像处理)