source: an2_mrdread.m @ 44

Last change on this file since 44 was 15, checked in by tjniskan, 12 years ago
  • Almost all of the functions used by Analyze2 start now with a prefix

"an2_".

  • Deleted some depricated functions.

M analyze2.m
D cellsprintf.m
M spectrsum.m
A an2_cellsprintf.m
D calc_wait.m
A an2_calc_wait.m
D getnicedialoglocation.m
A an2_getnicedialoglocation.m
A an2_iseven.m
D iseven.m
M an2_revision.m
D checkcthdr.m
A an2_checkcthdr.m
D fitmaps.m
A an2_fitmaps.m
A an2_read_nifti.m
D read_nifti.m
D mrdread.m
A an2_mrdread.m
D res2table.m
A an2_copy_roi.m
D copy_roi.m
D helpabout.m
A an2_helpabout.m
A an2_res2table.m
D readfid.m
A an2_readfid.m
D readtab.m
A an2_readtab.m
A an2_killfigs.m
D killfigs.m
D roi_stats.m
A an2_roi_stats.m
A an2_juigetfiles.m
D juigetfiles.m
A an2_gui_defaults.m
D gui_defaults.m
D errordump.m
A an2_errordump.m
D export_gui.m
A an2_export_gui.m
D check_file_exist.m
A an2_check_file_exist.m
A an2_cellwrite.m
D cellwrite.m
A an2_rot3d.m
A an2_wbar.m
D wbar.m
D readfdf.m
D rot3d.m
A an2_readfdf.m
M b1_map.m
D uigetfiles.m
D viewprocpar.m
D cdata.mat
A an2_viewprocpar.m
A an2_cdata.mat
A an2_readprocpar.m
D readprocpar.m
A an2_data_read.m
D data_read.m
D surread.m
D deblanke.m
A an2_surread.m
D maptool.m
D resviewer.m
A an2_resviewer.m
A an2_maptool.m
D mriread.m
A an2_mriread.m
A an2_inputdlg.m
D roi_copy_gui.m
A an2_roi_copy_gui.m
D setdefaultbutton.m
D readctdata.m
A an2_readctdata.m
D readfidprefs.m
A an2_readfidprefs.m
D roi_inputdlg.m
M addicon.m
D imaread.m
A an2_imaread.m
D saveres.m
A an2_saveres.m
D rotateflip.m
A an2_rotateflip.m
D editstack.m
A an2_editstack.m
D plugins.m
A an2_plugins.m
M makelcmraw.m
D write_nifti.m
A an2_write_nifti.m

File size: 7.6 KB
Line 
1function [kuvat,info,kspace,complex]=an2_mrdread(filename,reorder,selection,tallsur,scaling,zerop)
2%AN2_MRDREAD Reads .mrd-files into matrix.
3%       [A,Info,Kspace,Complex]=an2_mrdread(Filename,Reorder,[Selection],'SAVE',scaling,zerofill factor)
4%       reads MRD file filename and returns absolute images in A [xsize,experiments*ysize] and
5%       some additional information.
6%       Also Kspaces and Complex images are returned in respective matrises.
7%
8%       Additional information (1) Number of Read Experiments
9%                              (2) Total number of Experiments
10%                              (3) Scaling factor for data(4095/max value)
11%                              (4)-(n) Read Experiments
12%
13%       Reorder parameter can be given with one of the following values:
14%               'SEQ'             sequential
15%               'FLASH' or 'CO'   center-out
16%               'EPI4S'           2 or 4-segment EPI
17%               'JFLASH'          joined FLASH with center out (eg. diff-Flash)
18%               'FSEx'            FSE with x echos/train
19%               'reference.mrd'   reference image for EPI with 2 or 4 segments
20%               'reorder.txt'     name of reorder file
21%               [reference order] matrix for order
22%               Without Reorder parameter sequential order is used.
23%
24%       Additional Selection parameter can be used to select only wanted experiments/slices/echoes.
25%       Images are numbered as [exp1.echo1.slice1,exp1.echo1.slice2,...,exp1.echoM.sliceN,exp2.echo1.slice1,...].
26%
27%       'Save' as fourh parameter turns on SUR saving.
28%
29%       Scaling 0 scales all the images according to global maximum whereas other values scale each image individually.
30%
31%       Zerofill factor controls the size of phase encode zerofilling (pe size = read-out size * factor).
32%
33%       See also EPIC, JFLASH, IMAGREAD, SURREAD.
34%
35%       Notes! Currently only 2D-images with experiment/multi-slice loops are supported.
36%              Images are in order [exp1.echo1.slice1,exp1.echo1.slice2,...,exp1.echoM.sliceN,exp2.echo1.slice1,...]
37
38%       'Real' 3D MRD-files are supported through MRD3D. If AN2_MRDREAD finds 3D matrix, it will transport
39%       it to MRD3D. For 3D matrices only absolute 3D matrix [xsize,ysize,zsize] is returned.
40%       'Save' command affects saving of SUR files from 3D matrices (MAT file is saved always).
41%       See MRD3D for further details. Real 3D matrices are only supported in Matlab 5 and higher.
42
43if nargin<1
44        [filename,polku]=getfile('*.mrd');
45        if filename==0
46                return
47        end
48        filename=[polku filename];
49elseif ~isstr(filename)
50        [filename,polku]=getfile('*.mrd');
51        if filename==0
52                return
53        end
54        filename=[polku filename];
55end
56if (nargin>=4)
57        tall=on_off(tallsur);
58else
59        tall=0;
60end
61if (nargin>=5)
62        scaling=on_off(scaling);
63else
64        scaling=0;      % Full set
65end
66if (nargin>=6)
67        zerofactor=zerop;       
68        if zerofactor<0
69                zerop=0;
70                zerofactor=0;
71        end
72        if zerofactor>1
73                zerofactor=1;
74        end     
75        zerop=on_off(zerop);
76else
77        zerofactor=1;   
78        zerop=1;        % Zeropad before fft
79end
80if nargin>=2
81        if isempty(reorder)
82                reorder='SEQ';
83        else
84                if ~isstr(reorder)
85                        order=reorder;
86                        %reorder=[];
87                end
88        end
89else
90        reorder='SEQ';
91end
92long=[2^0,2^8,2^16,2^24]';
93
94fid=fopen(filename,'rb','l');
95if fid==-1
96        disp('Error in opening input file.');
97        return;
98end
99%header=fread(fid,512,'char');
100xsize=fread(fid,1,'long');                                              % 0-3 xsize (samples)
101ysize=fread(fid,1,'long');                                              % 4-7 ysize (views)
102zsize=fread(fid,1,'long');                                              % 8-B zsize (sec.views)
103if zsize>1
104        vers=version;
105        vers=str2num(vers(1));
106        if vers<5
107                disp('AN2_MRDREAD does not currently handle 3D matrices. Use MRD3D (Matlab 5).');
108                return;
109        else
110                if (nargin>=4)
111                        tall=on_off(tallsur);
112                else
113                        tall=1;
114                end             
115                disp('3D matrix : Switching to MRD3D. For full set of options use MRD3D.');
116                fclose(fid);
117                eval(['kuvat=mrd3d(filename,tall,1);']);
118                return
119        end
120end
121slices=fread(fid,1,'long');                                             % C-F slices
122fseek(fid,152,-1);
123echoes=fread(fid,1,'long');                                             % 98-9B echoes
124fseek(fid,156,-1);
125experiments=fread(fid,1,'long');                                % 9C-9F experiments
126fseek(fid,18,-1);
127datatype=fread(fid,1,'int16');                  %Datatype
128compl=1+fix(datatype/16);
129datatype=rem(datatype,16);
130%datatypes=str2mat('char','schar','short','int16','long','float','double');
131datatypes = {'char','schar','short','int16','long','float','double'};
132datasizes=[1 1 2 2 4 4 8];
133datasize=datasizes(datatype+1);
134%datatype=deblanke(datatypes(datatype+1,:));
135datatype=datatypes{datatype+1};
136
137fseek(1,256,-1);
138imtitle=fread(fid,256,'char');
139if nargin>=3
140        if isempty(selection)
141                selection=[1:experiments*slices*echoes];
142        else
143                if ((min(selection)<1)|(max(selection)>experiments*slices*echoes))
144                        disp(['Warning : Out of bounds images in selection.'])
145                end
146                selection(find(selection>experiments*slices*echoes))=echoes*experiments*slices.*ones(size(find(selection>experiments*slices*echoes)));
147                selection(find(selection<1))=1.*ones(size(find(selection<1)));
148        end
149else
150        selection=[1:experiments*slices*echoes];
151end
152
153%order=[];
154if isstr(reorder)
155        if strcmp(deblank(upper(reorder)),'JFLASH')
156                fclose(fid);
157                [kuvat,experiments]=jflash(filename);
158        %elseif strcmp(deblank(upper(reorder)),'EPI4S')
159        %       fclose(fid);
160        %       [kuvat,experiments]=epic(filename);
161        elseif strcmp(deblank(upper(reorder)),'FLASH')
162                apu=[0 ceil((1:ysize-1)/2)];
163                apu2=[-1.*ones(1,ysize)].^[1:ysize];
164                order=ysize/2+1-apu.*apu2;
165        elseif strcmp(deblank(upper(reorder)),'CO')
166                order=nmrorder(0,ysize,ysize);
167        elseif strcmp(deblank(upper(reorder)),'SEQ')
168                order=[1:ysize];
169        elseif strcmp(deblank(upper(reorder(1:min(3,length(reorder))))),'FSE')
170                echos=deblank(upper(reorder));
171                echos=str2num(echos(4:length(echos)));
172                order=nmrorder(1,ysize,echos);
173        else
174                fid_order=fopen(reorder,'r');
175                while 1
176                        line=fgetl(fid_order);
177                        if ~isstr(line)
178                                return
179                        else                           
180                                order=[order;str2num(line)];
181                        end
182                end             
183                fclose(fid_order);
184                %order=dlmread(reorder,'\n');
185        end
186else
187        order=reorder;
188end
189if min(order)==0
190        order=order+1;
191end
192if ~isempty(order)
193        xs=xsize;
194        ys=ysize;
195        if (ysize==1)
196                zerop=0;       
197        end
198        if zerop
199                xs=max([xsize,ysize]);
200                ys=xs*zerofactor;
201                if ys<min([xsize,ysize])
202                        ys=min([xsize,ysize]);
203                        disp(['Zerofilled image too small in PE direction, size set to ' num2str(ys)])
204                end                     
205        end
206        kuvat=zeros(xs,xs*length(selection));   
207        if nargout>2
208                kspace=zeros(xsize,ysize*length(selection));
209        end
210        if nargout>3
211                complex=zeros(xs,xs*length(selection));
212        end
213        for silmukka=1:length(selection)
214                apu=512+(selection(silmukka)-1)*[compl*xsize*ysize]*datasize;
215                fseek(fid,apu,-1);
216                kuva = fread(fid,[compl*xsize,ysize],datatype);
217                if (compl==2)
218                        ordered(:,order)=kuva(1:2:2*xsize,:)+i*kuva(2:2:2*xsize,:);
219                else
220                        ordered(:,order)=kuva;
221                end
222                if (ysize==1)
223                        muunnos=fliplr(fftshift(fft(ordered,xs)));
224                else                                   
225                        pohja=zeros(xs,ys);             
226                        pohja(:,1+floor(ys/2-ysize/2):floor(ys/2-ysize/2+ysize))=ordered;
227                        muunnos=fftshift(fft2(fftshift(pohja)));                       
228                end
229                if nargout>2
230                        kspace(:,1+(silmukka-1)*ysize:silmukka*ysize)=ordered;
231                end
232                if nargout>3
233                        complex(:,1+(silmukka-1)*xs:silmukka*xs-(xs-ys))=muunnos;
234                end
235                if ~scaling
236                        kuvat(:,1+(silmukka-1)*xs:silmukka*xs-(xs-ys))=abs(muunnos);                           
237                        %kuvat(:,1+(silmukka-1)*ys:silmukka*ys)=abs(muunnos);                           
238                else                   
239                        apu=abs(muunnos);                               
240                        kuvat(:,1+(silmukka-1)*xs:silmukka*xs-(xs-ys))=apu/maxn(apu)*4095;
241                        %kuvat(:,1+(silmukka-1)*ys:silmukka*ys)=apu/maxn(apu)*4095;
242                end
243        end
244        fclose(fid);
245end
246if ~scaling
247        scaling=4095/maxn(kuvat);
248        kuvat=kuvat./maxn(kuvat).*4095;
249end
250if tall
251        mat2sur(kuvat,filename);
252end
253info=[length(selection) experiments scaling selection];
254
255if nargout<1
256        montage(kuvat,[xs,xs,length(selection)]);
257        colormap('gray')
258        colorbar
259end
Note: See TracBrowser for help on using the repository browser.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008