def wls_fit_dki(design_matrix, data): r""" Computes weighted linear least squares (WLS) fit to calculate the diffusion tensor and kurtosis tensor using a weighted linear regression diffusion kurtosis model [1]_. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients. data : array (N, g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. min_signal : default = 1 All values below min_signal are repalced with min_signal. This is done in order to avoid taking log(0) durring the tensor fitting. Returns ------- dki_params : array (N, 27) All parameters estimated from the diffusion kurtosis model for all N voxels. Parameters are ordered as follow: 1) Three diffusion tensor's eingenvalues 2) Three lines of the eigenvector matrix each containing the first second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor References ---------- [1] Veraart, J., Sijbers, J., Sunaert, S., Leemans, A., Jeurissen, B., 2013. Weighted linear least squares estimation of diffusion MRI parameters: Strengths, limitations, and pitfalls. Magn Reson Med 81, 335-346. """ tol = 1e-6 # preparing data and initializing parametres data = np.asarray(data) data_flat = data.reshape((-1, data.shape[-1])) dki_params = np.empty((len(data_flat), 27)) # inverting design matrix and defining minimun diffusion aloud min_diffusivity = tol / -design_matrix.min() inv_design = np.linalg.pinv(design_matrix) # lopping WLS solution on all data voxels for vox in range(len(data_flat)): dki_params[vox] = _wls_iter(design_matrix, inv_design, data_flat[vox], min_diffusivity) # Reshape data according to the input data shape dki_params = dki_params.reshape((data.shape[:-1]) + (27,)) return dki_params
def wls_fit_dki(design_matrix, data): r""" Computes weighted linear least squares (WLS) fit to calculate the diffusion tensor and kurtosis tensor using a weighted linear regression diffusion kurtosis model [1]_. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients. data : array (N, g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. min_signal : default = 1 All values below min_signal are repalced with min_signal. This is done in order to avoid taking log(0) durring the tensor fitting. Returns ------- dki_params : array (N, 27) All parameters estimated from the diffusion kurtosis model for all N voxels. Parameters are ordered as follow: 1) Three diffusion tensor's eingenvalues 2) Three lines of the eigenvector matrix each containing the first second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor References ---------- [1] Veraart, J., Sijbers, J., Sunaert, S., Leemans, A., Jeurissen, B., 2013. Weighted linear least squares estimation of diffusion MRI parameters: Strengths, limitations, and pitfalls. Magn Reson Med 81, 335-346. """ tol = 1e-6 # preparing data and initializing parametres data = np.asarray(data) data_flat = data.reshape((-1, data.shape[-1])) dki_params = np.empty((len(data_flat), 27)) # inverting design matrix and defining minimun diffusion aloud min_diffusivity = tol / -design_matrix.min() inv_design = np.linalg.pinv(design_matrix) # lopping WLS solution on all data voxels for vox in range(len(data_flat)): dki_params[vox] = _wls_iter(design_matrix, inv_design, data_flat[vox], min_diffusivity) # Reshape data according to the input data shape dki_params = dki_params.reshape((data.shape[:-1]) + (27, )) return dki_params
def ols_fit_dki(design_matrix, data): r""" Computes ordinary least squares (OLS) fit to calculate the diffusion tensor and kurtosis tensor using a linear regression diffusion kurtosis model [1]_. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients. data : array (N, g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. Returns ------- dki_params : array (N, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follow: 1) Three diffusion tensor's eingenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor See Also -------- wls_fit_dki References ---------- [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ tol = 1e-6 # preparing data and initializing parameters data = np.asarray(data) data_flat = data.reshape((-1, data.shape[-1])) dki_params = np.empty((len(data_flat), 27)) # inverting design matrix and defining minimun diffusion aloud min_diffusivity = tol / -design_matrix.min() inv_design = np.linalg.pinv(design_matrix) # lopping OLS solution on all data voxels for vox in range(len(data_flat)): dki_params[vox] = _ols_iter(inv_design, data_flat[vox], min_diffusivity) # Reshape data according to the input data shape dki_params = dki_params.reshape((data.shape[:-1]) + (27,)) return dki_params
def ols_fit_dki(design_matrix, data): r""" Computes ordinary least squares (OLS) fit to calculate the diffusion tensor and kurtosis tensor using a linear regression diffusion kurtosis model [1]_. Parameters ---------- design_matrix : array (g, 22) Design matrix holding the covariants used to solve for the regression coefficients. data : array (N, g) Data or response variables holding the data. Note that the last dimension should contain the data. It makes no copies of data. Returns ------- dki_params : array (N, 27) All parameters estimated from the diffusion kurtosis model. Parameters are ordered as follow: 1) Three diffusion tensor's eingenvalues 2) Three lines of the eigenvector matrix each containing the first, second and third coordinates of the eigenvector 3) Fifteen elements of the kurtosis tensor See Also -------- wls_fit_dki References ---------- [1] Tabesh, A., Jensen, J.H., Ardekani, B.A., Helpern, J.A., 2011. Estimation of tensors and tensor-derived measures in diffusional kurtosis imaging. Magn Reson Med. 65(3), 823-836 """ tol = 1e-6 # preparing data and initializing parameters data = np.asarray(data) data_flat = data.reshape((-1, data.shape[-1])) dki_params = np.empty((len(data_flat), 27)) # inverting design matrix and defining minimun diffusion aloud min_diffusivity = tol / -design_matrix.min() inv_design = np.linalg.pinv(design_matrix) # lopping OLS solution on all data voxels for vox in range(len(data_flat)): dki_params[vox] = _ols_iter(inv_design, data_flat[vox], min_diffusivity) # Reshape data according to the input data shape dki_params = dki_params.reshape((data.shape[:-1]) + (27, )) return dki_params