Menu

Python Sparse data Analysis Package external MRI plugin.

Source code for mri.reconstructors.calibrationless

# -*- coding: utf-8 -*-
##########################################################################
# pySAP - Copyright (C) CEA, 2017 - 2018
# Distributed under the terms of the CeCILL-B license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
# for details.
##########################################################################

"""
This implements calibrationless reconstruction with different proximities
"""
# System import
import warnings

from .base import ReconstructorBase
from ..operators import GradAnalysis, GradSynthesis, WaveletN

# Third party import
from modopt.opt.proximity import SparseThreshold
from modopt.opt.linear import Identity


[docs]class CalibrationlessReconstructor(ReconstructorBase): """ This class implements a regularized calibrationless reconstruction. Notes ----- For the Analysis case, finds the solution for x of: ..math:: (1/2) * sum(||F x_l - y_l||^2_2, n_coils) + mu * H(W x_l) For the Synthesis case, finds the solution of: ..math:: (1/2) * sum(||F Wt alpha_l - y_l||^2_2, n_coils) + mu * H(alpha_l) Parameters ---------- fourier_op: object of class FFT, NonCartesianFFT or Stacked3DNFFT in mri.operators Defines the fourier operator F in the above equation. linear_op: object, (optional, default None) Defines the linear sparsifying operator W. This must operate on x and have 2 functions, op(x) and adj_op(coeff) which implements the operator and adjoint operator. For wavelets, this can be object of class WaveletN or WaveletUD2 from mri.operators . If None, sym8 wavelet with nb_scale=3 is chosen. gradient_formulation: str between 'analysis' or 'synthesis', default 'synthesis' defines the formulation of the image model which defines the gradient. n_jobs : int, default 1 The number of cores to be used for faster reconstruction verbose: int, optional default 0 Verbosity levels 1 => Print basic debug information 5 => Print all initialization information 20 => Calculate cost at the end of each iteration. 30 => Print the debug information of operators if defined by class NOTE - High verbosity (>20) levels are computationally intensive. **kwargs : Extra keyword arguments for gradient initialization: Please refer to mri.operators.gradient.base for information regularizer_op: operator, (optional default None) Defines the regularization operator for the regularization function H. If None, the regularization chosen is Identity and the optimization turns to gradient descent. """ def __init__(self, fourier_op, linear_op=None, gradient_formulation="synthesis", n_jobs=1, verbose=0, **kwargs): if linear_op is None: linear_op = WaveletN( # TODO change nb_scales to max_nb_scale - 1 wavelet_name="sym8", nb_scale=3, dim=len(fourier_op.shape), n_coils=fourier_op.n_coils, n_jobs=n_jobs, verbose=bool(verbose >= 30), ) # Ensure that we are in right multichannel config if fourier_op.n_coils != linear_op.n_coils: raise ValueError("The value of n_coils for fourier and wavelet " "operation must be same for " "calibrationless reconstruction!") if gradient_formulation == 'analysis': grad_class = GradAnalysis elif gradient_formulation == 'synthesis': grad_class = GradSynthesis super(CalibrationlessReconstructor, self).__init__( fourier_op=fourier_op, linear_op=linear_op, gradient_formulation=gradient_formulation, grad_class=grad_class, verbose=verbose, **kwargs, )

Follow us

© 2019, Antoine Grigis Samuel Farrens Jean-Luc Starck Philippe Ciuciu