一、pydicom
1、读取元信息
import pydicom
img_path = '.\001.dcm'
dataset = pydicom.dcmread(img_path)
# <class 'pydicom.dataelem.DataElement'>
print(dataset.data_element('PixelSpacing'), type(dataset.data_element('PixelSpacing')))
print(dataset[0x00280030], type(dataset[0x00280030]))
# <class 'pydicom.multival.MultiValue'>
print(dataset.PixelSpacing, type(dataset.PixelSpacing))
print(dataset.data_element('PixelSpacing').value, type(dataset.data_element('PixelSpacing').value))
dataset是<class 'pydicom.dataset.FileDataset'>对象
dataset.data_element读取到的是DataElement对象,可以调用.value方法获取其值
dataset.data_element('tagname')等价与dataset[0xtagid]
dataset.tagname直接得到元数据值
dataset.tagname等价于dataset.data_element('tagname').value
2、修改元信息
可以直接对dataset.tagname赋值(注意赋值类型)
import pydicom
dataset = pydicom.dcmread('.\001.dcm') #读取dicom文件
#val = dataset.data_element('Columns').value #根据TAG获得其值,可以读写所有tag
pixeldata = dataset.pixel_array #获得图像数据的矩阵形式,只读
databyte = dataset.PixelData #获得图像的byte数据,可直接读写
datanew = pixeldata[0:400, 0:400] #截取原图像的一部分
dataset.Rows, dataset.Columns = datanew.shape #图像矩阵大小的另一种快速读写方法
newArray = np.ones([400, 400])+254 #新建一个对应大小的图像数据矩阵
data16 = np.int16(newArray) #必须转为int16
#dataset.pixel_array.data = data16 #第一种修改图像数据的方法,直接修改像素值
dataset.PixelData = data16.tobytes() #第二种修改图像数据的方法,修改byte值,建议用这种方式
dataset.save_as('.\002.dcm') #保存为新dcm文件
二、SimpleITK
img_path = '.\001.dcm'
img = sitk.ReadImage(img_path)
print(img.GetMetaData('0010|0010'), type(img.GetMetaData('0010|0010'))) # str
img.SetMetaData('0010|0010', 'hahaha')
# img.EraseMetaData('0010|0010') # 删除tag,删除后无法再获取了
print(img.GetMetaData('0010|0010'), type(img.GetMetaData('0010|0010')))
sitk.WriteImage(img, '.\003.dcm')
三、dicom常用tag
DICOM的常用Tag分类和说明_inter_peng的博客-CSDN博客_c++如何四舍五入
参考:
Pydicom+SimpleITK操作DICOM图像数据和TAG_咣咣咣、的博客-CSDN博客_pydicom读取tag