Skip to content

Instantly share code, notes, and snippets.

@yarastqt
Created May 24, 2023 22:59
Show Gist options
  • Save yarastqt/0eb00db95aa3906c1159f6085bfb4bb3 to your computer and use it in GitHub Desktop.
Save yarastqt/0eb00db95aa3906c1159f6085bfb4bb3 to your computer and use it in GitHub Desktop.
import pydicom
import os
def split_multiframe_dicom(input_file):
ds = pydicom.dcmread(input_file)
number_of_frames = int(ds.NumberOfFrames)
pixelArray = ds.pixel_array.squeeze()
for idx in range(number_of_frames):
file_meta = pydicom.dataset.FileMetaDataset()
file_meta.MediaStorageSOPClassUID = pydicom.uid.SecondaryCaptureImageStorage
file_meta.MediaStorageSOPInstanceUID = pydicom.uid.generate_uid()
file_meta.TransferSyntaxUID = pydicom.uid.ImplicitVRLittleEndian
tmp_ds = pydicom.dataset.Dataset()
tmp_ds.file_meta = file_meta
tmp_ds.is_little_endian = tmp_ds.file_meta.TransferSyntaxUID.is_little_endian
tmp_ds.is_implicit_VR = tmp_ds.file_meta.TransferSyntaxUID.is_implicit_VR
essential_group_list = [0x0020, 0x0028]
for group in essential_group_list:
for key, value in ds.group_dataset(group).items():
tmp_ds[key] = value
del tmp_ds.NumberOfFrames
tmp_ds.InstanceNumber = idx + 1
tmp_ds.PixelData = pixelArray[idx, :].squeeze().tobytes()
output_path = os.path.join("build", f"slice_{idx + 1}.dcm")
tmp_ds.save_as(output_path, write_like_original=False)
split_multiframe_dicom("<file>.dcm")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment