From 050504600ba8d8be34d25aee938cada183d923e2 Mon Sep 17 00:00:00 2001 From: Niklas Wahl Date: Fri, 16 Oct 2020 02:21:18 +0200 Subject: [PATCH] fix memory issue with dicom export --- MatRad_Config.m | 12 +++---- .../matRad_exportDicomCt.m | 31 +++++++++---------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/MatRad_Config.m b/MatRad_Config.m index 8565b7038..a73893b59 100644 --- a/MatRad_Config.m +++ b/MatRad_Config.m @@ -30,12 +30,6 @@ propMC; propStf; - %For storing the Environment & its version - env; - envVersion; - isOctave; %Helper bool to check for Octave - isMatlab; %Helper bool to check for Matlab - %Disable GUI disableGUI = false; end @@ -43,6 +37,12 @@ properties (SetAccess = private) messageLog = {}; logFileHandle; + + %For storing the Environment & its version + env; + envVersion; + isOctave; %Helper bool to check for Octave + isMatlab; %Helper bool to check for Matlab end properties (Constant) diff --git a/dicom/@matRad_DicomExporter/matRad_exportDicomCt.m b/dicom/@matRad_DicomExporter/matRad_exportDicomCt.m index 04f2c933b..c700e857a 100644 --- a/dicom/@matRad_DicomExporter/matRad_exportDicomCt.m +++ b/dicom/@matRad_DicomExporter/matRad_exportDicomCt.m @@ -22,9 +22,9 @@ % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -disp('Exporting DICOM CT...'); +matRad_cfg = MatRad_Config.instance(); -env = matRad_getEnvironment(); +matRad_cfg.dispInfo('Exporting DICOM CT...'); %default meta meta.PatientName = obj.PatientName; @@ -38,7 +38,7 @@ meta.StudyInstanceUID = obj.StudyInstanceUID; meta.FrameOfReferenceUID = obj.FrameOfReferenceUID; -ClassUID = '1.2.840.10008.5.1.4.1.1.2'; %RT Structure Set +ClassUID = '1.2.840.10008.5.1.4.1.1.2'; %CT Image meta.MediaStorageSOPClassUID = ClassUID; meta.SOPClassUID = ClassUID; %TransferSyntaxUID = '1.2.840.10008.1.2'; @@ -105,7 +105,6 @@ obj.ctSliceMetas = struct([]); obj.ctExportStatus = struct([]); -isOctave = strcmp(env,'OCTAVE'); for i = 1:nSlices ctSlice = ctCube(:,:,i); @@ -118,24 +117,24 @@ obj.ctSliceMetas(i).SlicePositions = z(i); %Create and store unique ID - obj.ctSliceMetas(i).SOPClassUID = '1.2.840.10008.5.1.4.1.1.2'; - %These lines DO NOT WORK since Matlab overwrites the unique ID's - %obj.ctSliceMetas(i).SOPInstanceUID = dicomuid; - %obj.ctSliceMetas(i).MediaStorageSOPInstanceUID = obj.ctSliceMetas(i).SOPInstanceUID; + obj.ctSliceMetas(i).SOPClassUID = ClassUID; fullFileName = fullfile(obj.dicomDir,[fileName num2str(i) '.dcm']); - if isOctave + if matRad_cfg.isOctave + obj.ctSliceMetas(i).SOPInstanceUID = dicomuid; + obj.ctSliceMetas(i).MediaStorageSOPInstanceUID = obj.ctSliceMetas(i).SOPInstanceUID; + dicomwrite(ctSlice,fullFileName,obj.ctSliceMetas(i)); else status = dicomwrite(ctSlice,fullFileName,obj.ctSliceMetas(i),'ObjectType','CT Image Storage'); obj.ctExportStatus = obj.addStruct2StructArray(obj.ctExportStatus,status); - end - - %We need to get the info of the file just written because of Matlab's - %hardcoded way of generating InstanceUIDs during writing - tmpInfo = dicominfo(fullFileName); - obj.ctSliceMetas(i).SOPInstanceUID = tmpInfo.SOPInstanceUID; - obj.ctSliceMetas(i).MediaStorageSOPInstanceUID = tmpInfo.MediaStorageSOPInstanceUID; + + %We need to get the info of the file just written because of Matlab's + %hardcoded way of generating InstanceUIDs during writing + tmpInfo = dicominfo(fullFileName); + obj.ctSliceMetas(i).SOPInstanceUID = tmpInfo.SOPInstanceUID; + obj.ctSliceMetas(i).MediaStorageSOPInstanceUID = tmpInfo.MediaStorageSOPInstanceUID; + end matRad_progress(i,nSlices);