def create_dcm_file(self): suffix = '.dcm' filename_little_endian = tempfile.NamedTemporaryFile( suffix=suffix).name filename_big_endian = tempfile.NamedTemporaryFile(suffix=suffix).name print("Setting file meta information...") file_meta = Dataset() file_meta.MediaStorageSOPClassUID = '1.2.840.10008.5.1.4.1.1.2' file_meta.MediaStorageSOPInstanceUID = "1.2.3" file_meta.ImplementationClassUID = "1.2.3.4" print("Setting dataset values...") ds = FileDataset(filename_little_endian, {}, file_meta=file_meta, preamble=b"\0" * 128) ds.PatientName = self.get_patient_name( ) + " " + self.get_patient_surname() ds.PatientID = self.get_patient_id() ds.PatientSex = self.get_patient_sex() ds.PatientAge = self.get_patient_age() ds.PatientWeight = self.get_patient_weight() ds.ImageComment = self.get_patient_comment() ds.PatientBirthDate = self.get_patient_birth() # Set the transfer syntax ds.is_little_endian = True ds.is_implicit_VR = True # Set creation date/time dt = datetime.datetime.now() ds.ContentDate = dt.strftime('%Y%m%d') timeStr = dt.strftime('%H%M%S.%f') # long format with micro seconds ds.ContentTime = timeStr ds.BitsAllocated = 16 ds.Rows = self.image.shape[0] ds.Columns = self.image.shape[1] ds.PixelRepresentation = 0 ds.SamplesPerPixel = 1 ds.PhotometricInterpretation = "MONOCHROME2" image = self.image image *= 255 image = image.astype("uint16") ds.PixelData = Image.fromarray(image).tobytes() print("Writing test file", filename_little_endian) ds.save_as(filename_little_endian) print("File saved.") ds.file_meta.TransferSyntaxUID = pydicom.uid.ExplicitVRBigEndian ds.is_little_endian = False ds.is_implicit_VR = False print("Writing test file as Big Endian Explicit VR", filename_big_endian) ds.save_as(filename_big_endian) return ds
def generate_common_dicom_dataset_series(self, slice_count: int, system: Modality) -> list: output_dataset = [] slice_pos = 0 slice_thickness = 0 study_uid = generate_uid() series_uid = generate_uid() frame_of_ref_uid = generate_uid() date_ = datetime.now().date() age = timedelta(days=45 * 365) time_ = datetime.now().time() cols = 2 rows = 2 bytes_per_voxel = 2 for i in range(0, slice_count): file_meta = Dataset() pixel_array = b"\0" * cols * rows * bytes_per_voxel file_meta.MediaStorageSOPClassUID = sop_classes[system][1] file_meta.MediaStorageSOPInstanceUID = generate_uid() file_meta.ImplementationClassUID = generate_uid() tmp_dataset = FileDataset('', {}, file_meta=file_meta, preamble=pixel_array) tmp_dataset.file_meta.TransferSyntaxUID = "1.2.840.10008.1.2.1" tmp_dataset.SliceLocation = slice_pos + i * slice_thickness tmp_dataset.SliceThickness = slice_thickness tmp_dataset.WindowCenter = 1 tmp_dataset.WindowWidth = 2 tmp_dataset.AcquisitionNumber = 1 tmp_dataset.InstanceNumber = i tmp_dataset.SeriesNumber = 1 tmp_dataset.ImageOrientationPatient = [ 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000 ] tmp_dataset.ImagePositionPatient = [ 0.0, 0.0, tmp_dataset.SliceLocation ] tmp_dataset.ImageType = ['ORIGINAL', 'PRIMARY', 'AXIAL'] tmp_dataset.PixelSpacing = [1, 1] tmp_dataset.PatientName = 'John Doe' tmp_dataset.FrameOfReferenceUID = frame_of_ref_uid tmp_dataset.SOPClassUID = sop_classes[system][1] tmp_dataset.SOPInstanceUID = generate_uid() tmp_dataset.SeriesInstanceUID = series_uid tmp_dataset.StudyInstanceUID = study_uid tmp_dataset.BitsAllocated = bytes_per_voxel * 8 tmp_dataset.BitsStored = bytes_per_voxel * 8 tmp_dataset.HighBit = (bytes_per_voxel * 8 - 1) tmp_dataset.PixelRepresentation = 1 tmp_dataset.Columns = cols tmp_dataset.Rows = rows tmp_dataset.SamplesPerPixel = 1 tmp_dataset.AccessionNumber = '2' tmp_dataset.AcquisitionDate = date_ tmp_dataset.AcquisitionTime = datetime.now().time() tmp_dataset.AdditionalPatientHistory = 'UTERINE CA PRE-OP EVAL' tmp_dataset.ContentDate = date_ tmp_dataset.ContentTime = datetime.now().time() tmp_dataset.Manufacturer = 'Mnufacturer' tmp_dataset.ManufacturerModelName = 'Model' tmp_dataset.Modality = sop_classes[system][0] tmp_dataset.PatientAge = '064Y' tmp_dataset.PatientBirthDate = date_ - age tmp_dataset.PatientID = 'ID0001' tmp_dataset.PatientIdentityRemoved = 'YES' tmp_dataset.PatientPosition = 'FFS' tmp_dataset.PatientSex = 'F' tmp_dataset.PhotometricInterpretation = 'MONOCHROME2' tmp_dataset.PixelData = pixel_array tmp_dataset.PositionReferenceIndicator = 'XY' tmp_dataset.ProtocolName = 'some protocole' tmp_dataset.ReferringPhysicianName = '' tmp_dataset.SeriesDate = date_ tmp_dataset.SeriesDescription = 'test series ' tmp_dataset.SeriesTime = time_ tmp_dataset.SoftwareVersions = '01' tmp_dataset.SpecificCharacterSet = 'ISO_IR 100' tmp_dataset.StudyDate = date_ tmp_dataset.StudyDescription = 'test study' tmp_dataset.StudyID = '' if (system == Modality.CT): tmp_dataset.RescaleIntercept = 0 tmp_dataset.RescaleSlope = 1 tmp_dataset.StudyTime = time_ output_dataset.append(tmp_dataset) return output_dataset