一、pydicom
1、读取元信息
import pydicomimg_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 pydicomdataset = pydicom.dcmread('.\001.dcm')#读取dicom文件#val = dataset.data_element('Columns').value#根据TAG获得其值,可以读写所有tagpixeldata = 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'))) # strimg.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