Function compute_M0_coil
Computes second step of pixel-wise fitting of 1 parameter for coils
Contents
Input
- n_size - data size [np - number of projections, nc - number of coils, nr - number of rows]
- cons_model_coil - consistant model in image space for whole dataset of size np x nr x nr x nc
- maske - image mask of size nr x nr
- timeInterval - time interval of data acquisition
- n_iter - number of current iteration
- T1s - T1s image values from first step for T1 map
- M0 - M0 image values from first step for T1 map
- M0s - M0s image values from first step for T1 map
- k_factor - image values of relation M0/M0s
Output
- M0s_prodsens - M0s for all coils of size nr x nr x nc
- M0_new - M0 for all coils of size nr x nr x nc
- exp_factor - calculated exponential factor in the form of exp(-TI/T1s)
- T1_map - image values of T1
Copyrights
(C) All rights reserved.
The code may be used free of charge for non-commercial and educational purposes, the only requirement is that this text is preserved within the derivative work. For any other purpose you must contact the authors for permission. This code may not be redistributed without written permission from the authors.
ABOUT: This software implements basic functionalities of the FIR-MAP algorithm
IMPORTANT: If you use this software you should cite the following in any resulting publication: [1] Michal Staniszewski and Uwe Klose. Improvements of Fast Model-based Acceleration of Parameter Look-Locker T1 Mapping
function [ M0s_prodsens, M0_new, T1_map, exp_factor ] = compute_M0_coil( n_size, cons_model_coil, maske, timeInterval, n_iter, T1s, M0s, M0, k_factor) np = n_size(1); % number of projections nc = n_size(2); % number of coils nr = n_size(3); % number of image rows x = timeInterval'; M0s_prodsens = zeros(nr,nr,nc); M0_new = zeros(nr,nr,nc); exp_factor = zeros(nr,nr,np); % iterate for all coils M0s_prodsens_coil = zeros(nr,nr); for c=1:1:nc ok_tmp = cons_model_coil(:,:,:,c); % magnetization curves for b=1:nr ok_coil = ok_tmp(:,:,b); fprintf('Iter #%d. Include multiple receiver coil for coil #%d. Row -> #%d\n', n_iter, c, b) for a=1:nr if (logical(maske(a,b))) ok = ok_coil(:,a); y = real(ok); y2 = imag(ok); E = (1-(k_factor(a,b)+1)*exp(-x/T1s(a,b))); pfit_real = E\y; % linear one parameter fitting for real part pfit_imag = E\y2; % linear one parameter fitting for real part M0s_prodsens_coil(a,b) = complex(pfit_real(1),pfit_imag(1)); exp_factor(a,b,:) = exp(-timeInterval/T1s(a,b)); end end end M0s_prodsens(:,:,c) = M0s_prodsens_coil; M0_new(:,:,c) = M0s_prodsens_coil.*k_factor; end T1_map = T1s .* k_factor; end