corrct.data_terms

Data fidelity classes.

@author: Nicola VIGANÒ, Computational Imaging group, CWI, The Netherlands, and ESRF - The European Synchrotron, Grenoble, France

Module Contents

Classes

DataFidelityBase

Define the DataFidelity classes interface.

DataFidelity_l2

l2-norm data-fidelity class.

DataFidelity_wl2

Weighted l2-norm data-fidelity class.

DataFidelity_l2b

l2-norm ball data-fidelity class.

DataFidelity_Huber

Huber-norm data-fidelity class. Given a parameter a: l2-norm for x < a, and l1-norm for x > a.

DataFidelity_l1

l1-norm data-fidelity class.

DataFidelity_l12

l12-norm data-fidelity class.

DataFidelity_l1b

l1-norm ball data-fidelity class.

DataFidelity_KL

KullbackLeibler data-fidelity class.

DataFidelity_ln

nuclear-norm data-fidelity class.

Functions

_soft_threshold

Data

eps

NDArrayFloat

API

corrct.data_terms.eps

None

corrct.data_terms.NDArrayFloat

None

corrct.data_terms._soft_threshold(values: corrct.data_terms.NDArrayFloat, threshold: Union[float, corrct.data_terms.NDArrayFloat]) None[source]
class corrct.data_terms.DataFidelityBase(background: Union[float, corrct.data_terms.NDArrayFloat, None] = None)[source]

Bases: abc.ABC

Define the DataFidelity classes interface.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

data: Union[corrct.data_terms.NDArrayFloat, None]

None

sigma: Union[float, corrct.data_terms.NDArrayFloat]

None

background: Union[corrct.data_terms.NDArrayFloat, None]

None

sigma_data: Union[corrct.data_terms.NDArrayFloat, None]

None

__data_fidelity_name__ = <Multiline-String>
_slice_attr(attr: str, ind: Any) None[source]
__getitem__(ind: Any) corrct.data_terms.DataFidelityBase[source]

Slice the norm and all its attributes.

Parameters

ind : Any Slicing indices.

Returns

DataFidelityBase The sliced norm.

info() str[source]

Return the data-fidelity info.

Returns

str Data fidelity info string.

upper() str[source]

Return the upper case name of the data-fidelity.

Returns

str Upper case string name of the data-fidelity.

lower() str[source]

Return the lower case name of the data-fidelity.

Returns

str Lower case string name of the data-fidelity.

assign_data(data: Union[float, corrct.data_terms.NDArrayFloat, None] = None, sigma: Union[float, corrct.data_terms.NDArrayFloat] = 1.0) None[source]

Initialize the data bias, and sigma of the data term.

Parameters

data : Union[float, NDArrayFloat, None], optional The data bias, by default None sigma : Union[float, NDArrayFloat], optional The sigma, by default 1.0

compute_residual(proj_primal: corrct.data_terms.NDArrayFloat, mask: Union[corrct.data_terms.NDArrayFloat, None] = None) corrct.data_terms.NDArrayFloat[source]

Compute the residual in the dual domain.

Parameters

proj_primal : NDArrayFloat Projection of the primal solution mask : Union[NDArrayFloat, None], optional Mask of the dual domain, by default None

Returns

NDArrayFloat The residual

abstract compute_residual_norm(dual: corrct.data_terms.NDArrayFloat) float[source]

Compute the norm of the residual.

Parameters

dual : NDArrayFloat The residual in the dual domain.

Returns

float The residual norm.

_compute_sigma_data()[source]
compute_data_dual_dot(dual: corrct.data_terms.NDArrayFloat, mask: Union[corrct.data_terms.NDArrayFloat, None] = None) float[source]

Compute the dot product of the data bias and the dual solution.

Parameters

dual : NDArrayFloat The dual solution. mask : Union[NDArrayFloat, None], optional Mask of the dual domain, by default None

Returns

float The dot product between the data bias and the dual solution

initialize_dual() corrct.data_terms.NDArrayFloat[source]

Initialize the dual domain solution.

Returns

NDArrayFloat A zero array with the dimensions of the dual domain.

update_dual(dual: corrct.data_terms.NDArrayFloat, proj_primal: corrct.data_terms.NDArrayFloat) None[source]

Update the dual solution.

Parameters

dual : NDArrayFloat The current dual solution proj_primal : NDArrayFloat The projected primal solution

abstract apply_proximal(dual: corrct.data_terms.NDArrayFloat) None[source]

Apply the proximal in the dual domain.

Parameters

dual : NDArrayFloat The dual solution

abstract compute_primal_dual_gap(proj_primal: corrct.data_terms.NDArrayFloat, dual: corrct.data_terms.NDArrayFloat, mask: Union[corrct.data_terms.NDArrayFloat, None] = None) float[source]

Compute the primal-dual gap of the current solution.

Parameters

proj_primal : NDArrayFloat The projected primal solution (in the dual domain) dual : NDArrayFloat The dual solution mask : Union[NDArrayFloat, None], optional Mask in the dual domain, by default None

Returns

float The primal-dual gap

class corrct.data_terms.DataFidelity_l2(background: Union[float, corrct.data_terms.NDArrayFloat, None] = None)[source]

Bases: corrct.data_terms.DataFidelityBase

l2-norm data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘l2’

assign_data(data: Union[float, corrct.data_terms.NDArrayFloat, None] = None, sigma: Union[float, corrct.data_terms.NDArrayFloat] = 1.0) None[source]
compute_residual_norm(dual: corrct.data_terms.NDArrayFloat) float[source]
apply_proximal(dual: corrct.data_terms.NDArrayFloat) None[source]
compute_primal_dual_gap(proj_primal: corrct.data_terms.NDArrayFloat, dual: corrct.data_terms.NDArrayFloat, mask: Union[corrct.data_terms.NDArrayFloat, None] = None) float[source]
class corrct.data_terms.DataFidelity_wl2(weights: Union[float, corrct.data_terms.NDArrayFloat], background: Union[float, corrct.data_terms.NDArrayFloat, None] = None)[source]

Bases: corrct.data_terms.DataFidelity_l2

Weighted l2-norm data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘wl2’

assign_data(data: Union[float, corrct.data_terms.NDArrayFloat, None], sigma: Union[float, corrct.data_terms.NDArrayFloat] = 1.0)[source]
compute_residual(proj_primal, mask: Union[float, corrct.data_terms.NDArrayFloat, None] = None)[source]
compute_residual_norm(dual: Union[float, corrct.data_terms.NDArrayFloat]) float[source]
class corrct.data_terms.DataFidelity_l2b(local_error: Union[float, corrct.data_terms.NDArrayFloat], background: Union[float, corrct.data_terms.NDArrayFloat, None] = None)[source]

Bases: corrct.data_terms.DataFidelity_l2

l2-norm ball data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘l2b’

assign_data(data: Union[float, corrct.data_terms.NDArrayFloat, None], sigma: Union[float, corrct.data_terms.NDArrayFloat] = 1.0)[source]
compute_residual(proj_primal: corrct.data_terms.NDArrayFloat, mask: Union[corrct.data_terms.NDArrayFloat, None] = None) corrct.data_terms.NDArrayFloat[source]
apply_proximal(dual: corrct.data_terms.NDArrayFloat) None[source]
compute_primal_dual_gap(proj_primal: corrct.data_terms.NDArrayFloat, dual: corrct.data_terms.NDArrayFloat, mask: Union[corrct.data_terms.NDArrayFloat, None] = None) float[source]
class corrct.data_terms.DataFidelity_Huber(local_error, background=None, l2_axis=None)[source]

Bases: corrct.data_terms.DataFidelityBase

Huber-norm data-fidelity class. Given a parameter a: l2-norm for x < a, and l1-norm for x > a.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘Hub’

assign_data(data, sigma=1.0)[source]
compute_residual_norm(dual)[source]
apply_proximal(dual)[source]
compute_primal_dual_gap(proj_primal, dual, mask=None)[source]
class corrct.data_terms.DataFidelity_l1(background=None)[source]

Bases: corrct.data_terms.DataFidelityBase

l1-norm data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘l1’

_get_inner_norm(dual)[source]
_apply_threshold(dual)[source]
apply_proximal(dual, weight=1.0)[source]
compute_residual_norm(dual)[source]
compute_primal_dual_gap(proj_primal, dual, mask=None)[source]
class corrct.data_terms.DataFidelity_l12(background=None, l2_axis=0)[source]

Bases: corrct.data_terms.DataFidelity_l1

l12-norm data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘l12’

_get_inner_norm(dual)[source]
class corrct.data_terms.DataFidelity_l1b(local_error, background=None)[source]

Bases: corrct.data_terms.DataFidelity_l1

l1-norm ball data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘l1b’

assign_data(data, sigma=1.0)[source]
_apply_threshold(dual)[source]
class corrct.data_terms.DataFidelity_KL(background: Union[float, corrct.data_terms.NDArrayFloat, None] = None)[source]

Bases: corrct.data_terms.DataFidelityBase

KullbackLeibler data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘KL’

_compute_sigma_data()[source]
apply_proximal(dual)[source]
compute_residual(proj_primal, mask=None)[source]
compute_residual_norm(dual)[source]
compute_primal_dual_gap(proj_primal, dual, mask=None)[source]
class corrct.data_terms.DataFidelity_ln(background=None, ln_axes: Sequence[int] = (1, -1), spectral_norm: corrct.data_terms.DataFidelityBase = DataFidelity_l1())[source]

Bases: corrct.data_terms.DataFidelityBase

nuclear-norm data-fidelity class.

Initialization

Initialize the base data-fidelity class.

Parameters

background : float | NDArrayFloat | None, optional The data background. The default is None.

__data_fidelity_name__

‘ln’

apply_proximal(dual)[source]
compute_residual_norm(dual)[source]
compute_primal_dual_gap(proj_primal, dual, mask=None)[source]