| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 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 filedictFlg = checkDictUse;if dictFlg    rtstruct=dicominfo(rtstruct_filename,'dictionary', 'ES - IPT4.1CompatibleDictionary.mat');else    rtstruct=dicominfo(rtstruct_filename);end%rtstruct=rtstruct_filename;% Get number of VOIsROIContourSequence=fieldnames(rtstruct.ROIContourSequence);% Define cell arrayVOI=cell(size(ROIContourSequence,1),2);% Progress barh = 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 arraycellVOI=cell(3,1);cellVOI{1,1}=rtstruct;cellVOI{2,1}=VOI;cellVOI{3,1}=[];% Close progress barclose(h);
 |