Changeset 153 for vnmr_recon


Ignore:
Timestamp:
Jan 20, 2011, 2:17:49 PM (8 years ago)
Author:
tjniskan
Message:
  • Added support for Various EPI sequences in vnmr_recon/epi_recon.m.

M aedes_readvnmr.m
M aedes_revision.m
M vnmr_recon/epi_recon.m

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vnmr_recon/epi_recon.m

    r152 r153  
    4444       
    4545       
     46        data = abs(fftshift(fftshift(fft(fft(kspace,[],1),[],2),1),2));
     47        data = permute(data,[2 1 3 4]);
     48        data = flipdim(flipdim(data,1),2);
     49        data(:,:,:,1) = []; % Remove reference image
     50       
    4651        % ===================================
    4752        % Reconstruct VNMRj and EPIP sequences
     
    7782        ns = procpar.ns;
    7883       
    79         % Phase sampling
     84       
    8085        if isEPIP
    81                 nv = procpar.nphase;
    82                
    83                 % Read sampling
    84                 np = procpar.nread/2;
     86                nv = procpar.nphase; % Phase sampling
     87                np = procpar.nread/2; % Read sampling
    8588        else
    8689                nv = procpar.nv;
     
    8992       
    9093        % Get orientation
    91         orient = procpar.orient{1}
     94        orient = procpar.orient{1};
    9295       
    9396        % Remove navigators
    9497        if nNav~=0
    9598                nav_data = kspace(1:(np*nNav),:);
    96                 kspace(1:(np*nNav),:)=[];
     99                %kspace(1:(np*nNav),:)=[];
    97100        else
    98101                nav_data = [];
     
    100103       
    101104        if Dat.EPIPhasedArrayData
    102                 data = zeros(nv,np,ns,nVols,nRcv,'single');
     105                data = zeros(nv,np,ns,nVols,nRcvrs,'single');
    103106        else
    104107                data = zeros(nv,np,ns,nVols,'single');
     
    106109       
    107110        % Reshape kspace and detach reference images
    108         if isEPIP
    109                 kspace = reshape(kspace,np,nv,nRcvrs,ns,nVols+nRef);
    110         else
    111                 kspace = reshape(kspace,np,nv,nRcvrs,ns,nVols+nRef);
    112         end
     111        kspace = reshape(kspace,np,nv+nNav,ns,nRcvrs,nVols+nRef);
    113112       
    114113        % Flip even kspace lines
    115         if ~Dat.FastDataRead
    116                 for tt=2:2:size(kspace,2)
    117                         kspace(:,tt,:,:,:) = flipdim(kspace(:,tt,:,:,:),1);
    118                 end
    119         else
    120                 kspace(:,2:2:end,:,:,:) = flipdim(kspace(:,2:2:end,:,:,:),1);
    121         end
    122         ref_data = kspace(:,:,:,:,1:nRef);
    123         kspace(:,:,:,:,1:nRef)=[];
     114%       if ~Dat.FastDataRead
     115%               for tt=2+nNav:2:size(kspace,2)
     116%                       kspace(:,tt,:,:,:) = flipdim(kspace(:,tt,:,:,:),1);
     117%               end
     118%       else
     119%               for tt=2+nNav:2:size(kspace,2)
     120%                       kspace(:,tt,:,:,:) = flipdim(kspace(:,tt,:,:,:),1);
     121%               end
     122%               %kspace(:,2+nNav:2:end,:,:,:) = flipdim(kspace(:,2+nNav:2:end,:,:,:),1);
     123%       end
     124        ref_data = kspace(:,nNav+1:end,:,:,1:nRef);
     125        ref_data(:,2:2:end,:,:,:) = flipdim(ref_data(:,2:2:end,:,:,:),1);
     126        %kspace(:,:,:,:,1:nRef)=[];
    124127       
    125128        % Calculate phase corrections for all receivers
     
    128131        for ii=1:nRcvrs
    129132                if nRef==1
    130       ref_im = ref_data(:,:,ii,:,1);
     133      ref_im = ref_data(:,:,:,ii,1);
    131134      phase1 = exp(-sqrt(-1)*angle(fft(ref_im,[],1)));
    132135                        rev_phase = 1;
    133                         phase_e(:,:,ii,:,:) = phase1;
     136                        phase_e(:,:,:,ii,:) = phase1;
    134137                elseif nRef==3
    135138                        ref1_ind = find(procpar.image==0,1);
    136                         ref1 = ref_data(:,:,ii,:,ref1_ind);
     139                        ref1 = ref_data(:,:,:,ii,ref1_ind);
    137140                        phase1 = exp(-sqrt(-1)*angle(fft(ref1,[],1)));
    138141                       
    139142                        ref2_ind = find(procpar.image==-2,1);
    140                         ref2 = flipdim(ref_data(:,:,ii,:,ref2_ind),1);
     143                        ref2 = flipdim(ref_data(:,:,:,ii,ref2_ind),1);
    141144                        phase2 = exp(-sqrt(-1)*angle(fft(ref2,[],1)));
    142145                       
    143146                        im1_ind = find(procpar.image==-1,1);
    144                         im1 = flipdim(ref_data(:,:,ii,:,im1_ind),1);
     147                        im1 = flipdim(ref_data(:,:,:,ii,im1_ind),1);
    145148                       
    146                         rev_phase(:,:,ii,:,:) = fft(im1,[],1).*phase2;
    147                         phase_e(:,:,ii,:,:) = phase1;
     149                        rev_phase(:,:,:,ii,:) = fft(im1,[],1).*phase2;
     150                        phase_e(:,:,:,ii,:) = phase1;
    148151                end
    149152        end
     
    164167                tmp_data = [];
    165168                if ii==nBlocks
    166                         vol_inds = (ii-1)*blksz+1:nVols;
     169                        vol_inds = (ii-1)*blksz+1+nRef:nVols+nRef;
    167170                else
    168                         vol_inds = (ii-1)*blksz+1:ii*blksz;
    169                 end
    170                 tmp_kspace = kspace(:,:,:,:,vol_inds);
    171                
     171                        vol_inds = (ii-1)*blksz+1+nRef:ii*blksz+nRef;
     172                end
     173                tmp_kspace = kspace(:,nNav+1:end,:,:,vol_inds);
     174               
     175                % Flip even lines
     176                tmp_kspace(:,2:2:end,:,:,:) = flipdim(tmp_kspace(:,2:2:end,:,:,:),1);
     177
    172178                for kk=1:nRcvrs
    173179                        if nRef==3
    174180                                for tt=1:length(vol_inds)
    175                                         tmp_kspace(:,:,kk,:,tt) = ifft(rev_phase(:,:,kk,:,:)+fft(kspace(:,:,kk,:,vol_inds(tt)),[],1).*phase_e(:,:,kk,:,:));
     181                                        tmp_kspace(:,:,:,kk,tt) = ifft(rev_phase(:,:,:,kk,:)+fft(tmp_kspace(:,:,:,kk,tt),[],1).*phase_e(:,:,:,kk,:));
    176182                                end
    177183                        else
    178184                                for tt=1:length(vol_inds)
    179                                         tmp_kspace(:,:,kk,:,tt) = ifft(fft(kspace(:,:,kk,:,vol_inds(tt)),[],1).*phase_e(:,:,kk,:,:));
     185                                        tmp_kspace(:,:,:,kk,tt) = ifft(fft(tmp_kspace(:,:,:,kk,tt),[],1).*phase_e(:,:,:,kk,:));
    180186                                end
    181187                        end
     
    186192                if Dat.EPIPhasedArrayData
    187193                        data_block = abs(tmp_data);
    188                         data_block = permute(data_block,[1 2 4 5 3]);
    189194                        % Permute to correct orientation
    190195                        if strcmpi(orient,'trans90')
    191                                 data_block = permute(data_block,[2 1 3 4 5]);
     196                                data_block = permute(data_block,[2 1 3 5 4]);
     197                                data_block = flipdim(data_block,2);
     198                        else
     199                                data_block = permute(data_block,[1 2 3 5 4]);
    192200                        end
    193                         data(:,:,:,vol_inds,:) = data_block;
     201                        data(:,:,:,:,vol_inds-nRef) = data_block;
    194202                else
    195                         data_block = sqrt(sum(tmp_data.*conj(tmp_data),3));
     203                        data_block = sqrt(sum(tmp_data.*conj(tmp_data),4));
    196204                        % Permute to correct orientation
    197205                        if strcmpi(orient,'trans90')
    198                                 data_block = permute(data_block,[2 1 3 4 5]);
     206                                data_block = permute(data_block,[2 1 3 5 4]);
     207                                data_block = flipdim(data_block,2);
    199208                        end
    200                         data(:,:,:,vol_inds) = squeeze(data_block);
     209                        data(:,:,:,vol_inds-nRef) = squeeze(data_block);
    201210                end
    202211               
    203212        end
    204213        fprintf(1,'\n')
    205        
    206214end
    207215       
Note: See TracChangeset for help on using the changeset viewer.

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