Pydicom+SimpleITK操作DICOM画像データとTAG
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(r'.\002.dcm') # dcm
1つのdcmの画像データを別のdcmにコピーするには、pixeldataの読み書きに関連するいくつかのtagを考慮する必要があります.rows、columnsのほか、傾き/断面積、高低位などもあります.早めに修正してください.
import SimpleITK as sitk
image = sitk.ReadImage('.\001.dcm') # dicom
image_array = sitk.GetArrayFromImage(image)
np_array = np.int16(image_array)
image_array = np.squeeze(np_array) #
im = sitk.GetImageFromArray(image_array) # Tag, imagearray dcm
reader = sitk.ImageFileReader()
reader.SetFileName('.\002.dcm')
reader.LoadPrivateTagsOn()
reader.ReadImageInformation() # Tag
ImageType = reader.GetMetaData('0008|0008') # Tag,0002
im.EraseMetaData('0008|0008') # Tag,
im.SetMetaData('0008|0008', ImageType) # dcm Tag
SOPClassUID = reader.GetMetaData('0008|0016')
im.SetMetaData('0008|0016',SOPClassUID)
SOPInstanceUID = reader.GetMetaData('0008|0018')
im.SetMetaData('0008|0018', SOPInstanceUID)
SeriesInstanceUID = reader.GetMetaData('0020|000e') # Tag ,
im.SetMetaData('0020|000e', SeriesInstanceUID)
sitk.WriteImage(im, '.\003.dcm') # dcm,
dcm = pydicom.dcmread('.\001.dcm') # dcm
image = sitk.ReadImage('.\002.dcm')
image_array = sitk.GetArrayFromImage(image)
np_array = np.int16(image_array)
image_array = np.squeeze(np_array) # dcm
dataset = pydicom.dcmread('.\002.dcm') # Tag, tag
dcm.data_element('PixelSpacing').value = dataset.data_element('PixelSpacing').value
dcm.data_element('RescaleIntercept').value = dataset.data_element('RescaleIntercept').value
dcm.data_element('RescaleSlope').value = dataset.data_element('RescaleSlope').value
dcm.PixelData = image_array.tobytes()
dcm.save_as('.\002.dcm') #