Skip to content

Commit

Permalink
update write_dso matlab file to move the segment info to per-frame. f…
Browse files Browse the repository at this point in the history
…ix validation issues and handle empty values
  • Loading branch information
emelalkim committed Mar 4, 2021
1 parent 64d90ad commit 66b1c54
Showing 1 changed file with 51 additions and 11 deletions.
62 changes: 51 additions & 11 deletions matlab/write_DSO.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
% used to generate the DSO file as returned by "dicomwrite".
%
% Author: Emel Alkim (Stanford University)
% Updated 2021-MAR-3

%check the parameters
switch nargin
Expand Down Expand Up @@ -161,15 +162,19 @@
end
end
end
info_mask.SharedFunctionalGroupsSequence.Item_1.SegmentIdentificationSequence.Item_1.ReferencedSegmentNumber=1;
if insCount>1
for i=startIndex:endIndex
% add all slices to referenced slices!
for i=1:size(maxes,3)
slice_info=slices(i);
ib1=i-startIndex+1;
ib1=i-1+1;
item_name=['Item_' num2str(ib1)];
info_mask.ReferencedSeriesSequence.Item_1.ReferencedInstanceSequence.(item_name).ReferencedSOPClassUID=slice_info.SOPClassUID;
info_mask.ReferencedSeriesSequence.Item_1.ReferencedInstanceSequence.(item_name).ReferencedSOPInstanceUID=slice_info.SOPInstanceUID;

end
for i=startIndex:endIndex
slice_info=slices(i);
ib1=i-startIndex+1;
item_name=['Item_' num2str(ib1)];

info_mask.PerFrameFunctionalGroupsSequence.(item_name).DerivationImageSequence.Item_1.SourceImageSequence.Item_1.ReferencedSOPClassUID=slice_info.SOPClassUID;
info_mask.PerFrameFunctionalGroupsSequence.(item_name).DerivationImageSequence.Item_1.SourceImageSequence.Item_1.ReferencedSOPInstanceUID=slice_info.SOPInstanceUID;
Expand Down Expand Up @@ -197,6 +202,8 @@
end

end
info_mask.PerFrameFunctionalGroupsSequence.(item_name).SegmentIdentificationSequence.Item_1.ReferencedSegmentNumber=1; %added 08/27/20

end
else %just one instance should be multiframe
info=refSlice;%first image
Expand Down Expand Up @@ -240,15 +247,36 @@
info_mask.ReferringPhysicianName='';
info_mask.PatientName=info.PatientName;
info_mask.PatientID=info.PatientID;
info_mask.PatientBirthDate= info.PatientBirthDate;
info_mask.PatientSex= info.PatientSex;
if isfield(info,'PatientBirthDate')==true
info_mask.PatientBirthDate= info.PatientBirthDate;
else
info_mask.PatientBirthDate= '';

end
if isfield(info,'PatientSex')==true
info_mask.PatientSex= info.PatientSex;
else
%info_mask.PatientSex= 'female'; changed by JCD 9-Dec-2020
info_mask.PatientSex='F';

end
if isfield(info,'PatientAge')==true
info_mask.PatientAge= info.PatientAge;
else
info_mask.PatientAge= '';

end
if isfield(info,'PatientWeight')==true
info_mask.PatientWeight= info.PatientWeight;
else
info_mask.PatientWeight= '';

end
if isfield(info,'StudyID')==true
info_mask.StudyID=info.StudyID;
else
info_mask.StudyID='';
end
info_mask.StudyID=info.StudyID;

info_mask.MediaStorageSOPClassUID='1.2.840.10008.5.1.4.1.1.66.4'; % SEG image storage
instanceuid=dicomuid;
Expand All @@ -262,7 +290,11 @@
info_mask.SOPClassUID='1.2.840.10008.5.1.4.1.1.66.4'; % SEG Image Storage
info_mask.SOPInstanceUID= instanceuid;

if isfield(info,'info.AccessionNumber')==true
info_mask.AccessionNumber=info.AccessionNumber;
else
info_mask.AccessionNumber='';
end
info_mask.Modality='SEG';
info_mask.Manufacturer='Stanford University';

Expand All @@ -278,28 +310,36 @@
info_mask.AcquisitionDate=datestr(now,'yyyymmdd');
currentTime=datestr(now,'HHMMSS.FFF');
info_mask.ContentTime=currentTime;
if isfield(info,'info.StudyTime')==true
info_mask.StudyTime=info.StudyTime;
else
info_mask.StudyTime='';
end
info_mask.SeriesTime=currentTime;
info_mask.AcquisitionTime=currentTime;
info_mask.InstanceNumber= 1;
info_mask.FrameOfReferenceUID= info.FrameOfReferenceUID;
info_mask.PositionReferenceIndicator= '';

info_mask.DimensionOrganizationSequence.Item_1.DimensionOrganizationUID= dicomuid;
dimorgid = dicomuid;
info_mask.DimensionOrganizationSequence.Item_1.DimensionOrganizationUID= dimorgid;
info_mask.DimensionIndexSequence.Item_1.DimensionOrganizationUID=dimorgid;
info_mask.DimensionIndexSequence.Item_1.DimensionIndexPointer=uint16([32 36950]);%Not writing pointers for now
info_mask.DimensionIndexSequence.Item_1.FunctionalGroupPointer=uint16([32 37137]);%Not writing pointers for now
info_mask.DimensionIndexSequence.Item_1.DimensionDescriptionLabel='Stack ID';
info_mask.DimensionIndexSequence.Item_2.DimensionOrganizationUID=dimorgid;
info_mask.DimensionIndexSequence.Item_2.DimensionIndexPointer=uint16([32 36951]);%Not writing pointers for now
info_mask.DimensionIndexSequence.Item_2.FunctionalGroupPointer=uint16([32 37137]);%Not writing pointers for now
info_mask.DimensionIndexSequence.Item_2.DimensionDescriptionLabel='In-Stack Position Number';
info_mask.DimensionIndexSequence.Item_3.DimensionOrganizationUID=dimorgid;
info_mask.DimensionIndexSequence.Item_3.DimensionIndexPointer=uint16([98 11]);%Not writing pointers for now
info_mask.DimensionIndexSequence.Item_3.FunctionalGroupPointer=uint16([98 10]);%Not writing pointers for now
info_mask.DimensionIndexSequence.Item_3.DimensionDescriptionLabel='Referenced Segment Number';
info_mask.SamplesPerPixel= 1;
info_mask.PhotometricInterpretation= 'MONOCHROME2';
info_mask.NumberOfFrames= size(Seg_mask,1);
info_mask.Rows= size(Seg_mask,2);
info_mask.Columns= size(Seg_mask,3);
info_mask.NumberOfFrames= size(Seg_mask,3);
info_mask.Rows= size(Seg_mask,1);
info_mask.Columns= size(Seg_mask,2);
if isFractional==false
info_mask.BitsAllocated= 1;
info_mask.BitsStored= 1;
Expand Down

0 comments on commit 66b1c54

Please sign in to comment.