Speedup of Geometric Decomposition Coil Compression
This is a demo of the Geometric-decomposition Coil Compression (GCC) based on Zhang et. al MRM 2013;69(2):571-82. The demo shows how to use the compression and in addition it shows the use of alignment of the compression matrices. The example is on 2D data, but can also be applied on 3D as well. GCC removes correlations between channels along a fully sampled readout dimension. This allows for significant reduction in data, so parallel imaging and other multi-channel algorithms are much more computationally efficient. This demo demonstrate effective compression from 32->5 virtual channels.
This demo aims to show speedup of computation for parallel imaging
Set parameters:
load brain_32ch.mat im = ifft2c(DATA); DATA = DATA/max(abs(im(:))); % number of compressed virtual coils ncc = 5; dim = 2; ncalib = 20; % use 24 calibration lines to compute compression [sx,sy,Nc] = size(DATA); slwin = 5; % sliding window length for GCC mask = zpad(ones(ncalib,sy,Nc),[sx,sy,Nc]); mask(1:2:end,:,:) = 1; dens = -zpad(ones(ncalib,sy,Nc),[sx,sy,Nc]) + 2; DATAc = DATA.*mask; % crop calibration data calib = crop(DATAc,[ncalib,sy,Nc]);
disp('Performing GCC') tic gccmtx = calcGCCMtx(calib,dim,slwin); gccmtx_aligned = alignCCMtx(gccmtx(:,1:ncc,:)); DATAcc = CC(DATAc,gccmtx_aligned,dim); calibcc = CC(calib,gccmtx_aligned,dim); gcct = toc; disp('perfomring GRAPPA on GCC coils'); tic; resGRAPPAcc = GRAPPA(DATAcc,calibcc,[5,5],0.01);grappacct = toc; disp('performing GRAPPA on physical coils'); tic; resGRAPPA = GRAPPA(DATAc,calib,[5,5],0.01);grappat = toc; errGcc = unCC(resGRAPPAcc,dim,gccmtx_aligned)-DATA; errG = resGRAPPA - DATA;
Performing GCC perfomring GRAPPA on GCC coils reconstructing coil 1 reconstructing coil 2 reconstructing coil 3 reconstructing coil 4 reconstructing coil 5 performing GRAPPA on physical coils reconstructing coil 1 reconstructing coil 2 reconstructing coil 3 reconstructing coil 4 reconstructing coil 5 reconstructing coil 6 reconstructing coil 7 reconstructing coil 8 reconstructing coil 9 reconstructing coil 10 reconstructing coil 11 reconstructing coil 12 reconstructing coil 13 reconstructing coil 14 reconstructing coil 15 reconstructing coil 16 reconstructing coil 17 reconstructing coil 18 reconstructing coil 19 reconstructing coil 20 reconstructing coil 21 reconstructing coil 22 reconstructing coil 23 reconstructing coil 24 reconstructing coil 25 reconstructing coil 26 reconstructing coil 27 reconstructing coil 28 reconstructing coil 29 reconstructing coil 30 reconstructing coil 31 reconstructing coil 32
GCC has many order of magnitude improvement in recon time. Note thst the error image does not have any aliasing patterns in it and is coming from the compression error, rather than the parallel imaging recon
figure, imshow(cat(2, sos(ifft2c(resGRAPPAcc)), sos(ifft2c(resGRAPPA)), sos(ifft2c(DATAc.*dens))),[]); title('Left: GRAPPA with GCC, middle GRAPPA, right: Zero-filling'); figure, imshow(cat(2, sos(ifft2c(errGcc)), sos(ifft2c(errG))),[]); title('Reconstruction error in %. Left: GRAPPA with GCC, right GRAPPA'); colorbar disp(sprintf('Speedup is: %f times!', grappat/(grappacct + gcct)));
Speedup is: 46.173861 times!