function [cellVOI] = dicomrt_loadvoi(rtstruct_filename) % dicomrt_loadvoi(rtstruct_filename) % % Load Volumes Of Interests (VOIs) from dicom-rt export file. % % A=dicomrt_dvhcal('rtstruct_filename') load into A the VOIs % extracted from the file 'rtstruct_filename' % % VOIs are stored in a cell array with the following structure: % % ----------------------------- % | [OAR 1] | [xyz contour 1] | % | ------------------- % | | [xyz contour 2] | % | ------------------- % | | ... | % | ------------------- % | | [xyz contour n] | % ----------------------------- % | ... | ... | % ----------------------------- % | [OAR n] | [xyz contour 1] | % | ------------------- % | | [xyz contour 2] | % | ------------------- % | | ... | % | ------------------- % | | [xyz contour n] | % ----------------------------- % % % See also dicomrt_loaddose, dicomrt_loadct, dicomrt_dvhcal % % Copyright (C) 2002 Emiliano Spezi (emiliano.spezi@physics.org) % Get info file dictFlg = checkDictUse; if dictFlg rtstruct=dicominfo(rtstruct_filename,'dictionary', 'ES - IPT4.1CompatibleDictionary.mat'); else rtstruct=dicominfo(rtstruct_filename); end %rtstruct=rtstruct_filename; % Get number of VOIs ROIContourSequence=fieldnames(rtstruct.ROIContourSequence); % Define cell array VOI=cell(size(ROIContourSequence,1),2); % Progress bar h = waitbar(0,['Loading progress:']); set(h,'Name','dicomrt_loadvoi: loading RTSTRUCT objects'); for i=1:size(ROIContourSequence,1) % for i=1:(number of VOIs) ... voilabel=getfield(rtstruct.StructureSetROISequence,char(ROIContourSequence(i)),'ROIName'); VOI{i,1}=voilabel; % get VOI's name try ncont_temp=fieldnames(getfield(rtstruct.ROIContourSequence,char(ROIContourSequence(i)), ... 'ContourSequence')); % get contour list per each VOI (temporary variable) catch warning(['ContourSequence not found for ROI: ', voilabel]); ncont_temp = []; end switch isempty(ncont_temp) case 0 for j=1:size(ncont_temp,1) % for j=1:(number of contours) ... if j==1 VOI{i,2}=cell(size(ncont_temp,1),1); end try NumberOfContourPoints=getfield(rtstruct.ROIContourSequence,char(ROIContourSequence(i)), ... 'ContourSequence', char(ncont_temp(j)),'NumberOfContourPoints'); ContourData=getfield(rtstruct.ROIContourSequence,char(ROIContourSequence(i)), ... 'ContourSequence',char(ncont_temp(j)),'ContourData'); x=dicomrt_mmdigit(ContourData(1:3:NumberOfContourPoints*3)*0.1,7); y=dicomrt_mmdigit(ContourData(2:3:NumberOfContourPoints*3)*0.1,7); z=dicomrt_mmdigit(ContourData(3:3:NumberOfContourPoints*3)*0.1,7); VOI{i,2}{j,1}=cat(2,x,y,z); % this is the same as VOI{i,2}{j,1}=[x,y,z]; end end case 1 % set dummy values. This will be deleted later dugin the import NumberOfContourPoints=1; ContourData=[0,0,0]; x=0; y=0; z=0; VOI{i,2}{1,1}=cat(2,x,y,z); end waitbar(i/size(ROIContourSequence,1),h); ncont_temp=[]; end % VOI cell generation complete % Store VOI in a cell array cellVOI=cell(3,1); cellVOI{1,1}=rtstruct; cellVOI{2,1}=VOI; cellVOI{3,1}=[]; % Close progress bar close(h);