123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- function [filelistAXIAL,xlocationAXIAL,ylocationAXIAL,zlocationAXIAL,change,user_option] = dicomrt_loadctlist(filename)
- % dicomrt_loadctlist(filename)
- %
- % Parse CT data set specified in filename. If more than one study are found within the CT data set
- % the user can select a study and dicomrt_loadctlist return a filelist and x,y,z coordinates of the
- % selected CT subset
- %
- % filename contains a list of CT slices to import
- %
- % change is 1 if any change to the filelist have been done, 0 otherwise
- % user_option is 1 if the user select not to continue with the program, 0 otherwise
- %
- % Example:
- % [list,x,y,z,change,user_option]=dicomrt_loadctlist(filename)
- %
- % with filename containint the following:
- % ct1 (group1)
- % ct2 (group2)
- % ct3 (group1)
- % ct4 (group2)
- %
- % if the user select one of them (e.g. group1):
- % list= contain only ct1 and ct3,
- % x= xlocation of ct1 and ct3 ,
- % y= ylocation of ct1 and ct3 ,
- % z= zlocation of ct1 and ct3 ,
- % change= 1,
- % user_option= 0
- %
- % See also dicomrt_loaddose dicomrt_loadct dicomrt_sortct
- %
- % Copyright (C) 2002 Emiliano Spezi (emiliano.spezi@physics.org)
- % Retrieve the number of images
- nlines=dicomrt_nASCIIlines(filename);
- % Get CT images and create 3D Volume
- fid=fopen(filename);
- nct=0;
- counter=0;
- % Initialize variable
- filelist=' ';
- studyUIDlist=' ';
- listUID=' ';
- imagetype=' ';
- user_option=0;
- % Progress bar
- h = waitbar(0,['Loading progress:']);
- set(h,'Name','dicomrt_loadctlist: loading CT objects tags');
- %loop until the end-of-file is reached and build 3D CT matrix
- while (feof(fid)~=1);
- nct=nct+1; % counting
- nctcheck=nct; % check for eof
- ct_file_location{1,nct}=fgetl(fid);
- if isnumeric(ct_file_location{1,nct}), nct=nct-1, break, end %end of line reached
- dictFlg = checkDictUse;
- if dictFlg
- info_temp=dicominfo(ct_file_location{1,nct}, 'dictionary', 'ES - IPT4.1CompatibleDictionary.mat');
- else
- info_temp=dicominfo(ct_file_location{1,nct});
- end
- xlocation(nct)=info_temp.ImagePositionPatient(1);
- ylocation(nct)=info_temp.ImagePositionPatient(2);
- zlocation(nct)=info_temp.ImagePositionPatient(3);
- xlocation=xlocation';
- ylocation=ylocation';
- zlocation=zlocation';
- filelist=char(filelist,info_temp.Filename);
- if isfield(info_temp,'ImageType')~=1
- warning('dicomrt_loadctlist: no DICOM ImageType was found. Assuming AXIAL CT Images');
- imagetype='AXIAL';
- else
- imagetype=char(imagetype,info_temp.ImageType);
- end
- listUID=char(listUID,info_temp.StudyInstanceUID);
- studyUID=info_temp.StudyInstanceUID;
- if isequal(studyUID, studyUIDlist(size(studyUIDlist,1),:))==0
- studyUIDlist=char(studyUIDlist,studyUID);
- end
- waitbar(nct/nlines,h);
- end
- filelist(1,:)=[];
- studyUIDlist(1,:)=[];
- listUID(1,:)=[];
- imagetype(1,:)=[];
- if size(studyUIDlist,1)>=2
- change=1;
- disp(' ');
- warning([int2str(size(studyUIDlist,1)),' studies was found among the ct slices you want to import']);
- disp(' ');
- leave = input('Do you want to leave (Y/N) ? [N] ','s');
- if leave == 'Y' | leave == 'y';
- user_option=1;
- return
- else
- disp('Available studies:');
- for j=1:size(studyUIDlist,1)
- disp([int2str(j), ' - ', studyUIDlist(j,:)]);
- end
- chooseUID = input(['Select a study to be imported from 1 to ',int2str(size(studyUIDlist,1)),': ']);
- if isempty(chooseUID)==1 | isnumeric(chooseUID)~=1 | chooseUID>size(studyUIDlist,1)
- error('dicomrt_loadctlist: There is no default to this answer or the number to entered is invalid. Exit now !');
- user_option=1;
- else
- filelistUID=' ';
- imagetypeUID=' ';
- for k=1:size(filelist,1)
- if listUID(k,:)==studyUIDlist(chooseUID,:);
- counter=counter+1;
- filelistUID=char(filelistUID,filelist(k,:));
- imagetypeUID=char(imagetypeUID,imagetype(k,:));
- xlocationUID(counter)=xlocation(k);
- ylocationUID(counter)=ylocation(k);
- zlocationUID(counter)=zlocation(k);
- end
- end
- filelistUID(1,:)=[];
- imagetypeUID(1,:)=[];
- counter=0; % reset counter
- end
- end
- else
- filelistUID=filelist;
- imagetypeUID=imagetype;
- xlocationUID=xlocation;
- ylocationUID=ylocation;
- zlocationUID=zlocation;
- end
- % Check for scout images (not AXIAL)
- imagetypeAXIAL=' ';
- filelistAXIAL=' ';
- for i=1:size(filelistUID,1)
- if isempty(findstr('AXIAL',imagetypeUID(i,:)))==1 % Scout image found
- disp(['The following image :',filelistUID(i,:),' is not AXIAL. Skipped ...']);
- change=1; % just make sure we return alterations to the filelist
-
- % added to try read uulke prosate data
- counter=counter+1;
- imagetypeAXIAL=char(imagetypeAXIAL,imagetypeUID(i,:));
- filelistAXIAL=char(filelistAXIAL,filelistUID(i,:));
- xlocationAXIAL(counter)=xlocationUID(i);
- ylocationAXIAL(counter)=ylocationUID(i);
- zlocationAXIAL(counter)=zlocationUID(i);
- % added to here
- else
- counter=counter+1;
- imagetypeAXIAL=char(imagetypeAXIAL,imagetypeUID(i,:));
- filelistAXIAL=char(filelistAXIAL,filelistUID(i,:));
- xlocationAXIAL(counter)=xlocationUID(i);
- ylocationAXIAL(counter)=ylocationUID(i);
- zlocationAXIAL(counter)=zlocationUID(i);
- end
- end
- if exist('change')~=1
- change=0;
- end
- filelistAXIAL(1,:)=[];
- imagetypeAXIAL(1,:)=[];
- if change ==1 % export changes to file
- newfilename=[filename,'.sort.txt'];
- newfile=fopen(newfilename,'w');
- for i=1:size(filelistAXIAL,1)
- fprintf(newfile,'%c',deblank(filelistAXIAL(i,:))); fprintf(newfile,'\n');
- end
- disp(['A new file list has been written by dicomrt_loadctlist with name: ',newfilename]);
- disp('This file will be used to import ct data instead');
- fclose(newfile);
- end
- % Close progress bar
- close(h);
- clear info_temp
|