Skip to content

dTV implementation #167

@epapoutsellis

Description

@epapoutsellis

I am trying to add a unittest that compares the solution from FGP_dTV vs a solution coming from cxvpy.

The input data and the reference data are:
input
ref

Case 1
The parameters for the FGD_dTV are:

alpha  = 10.0
eta = 0.01
pars = {'algorithm' : FGP_dTV, \
        'input' : data,\
        'refdata' : reference,\
        'regularisation_parameter': alpha, \
        'number_of_iterations' : 50000 ,\
        'tolerance_constant':0.0,\
        'eta_const':eta,\
        'methodTV': 0 ,\
        'nonneg': 0}

and the solutions pass the unittest up to two decimal points.

Case 2
The parameters for the FGD_dTV are:

alpha  = 10.0
eta = 1.0
pars = {'algorithm' : FGP_dTV, \
        'input' : data,\
        'refdata' : reference,\
        'regularisation_parameter': alpha, \
        'number_of_iterations' : 50000 ,\
        'tolerance_constant':0.0,\
        'eta_const':eta,\
        'methodTV': 0 ,\
        'nonneg': 0}

Now, I increased eta and the solution coming from cvxpy is:

cvxpy

This is "a constant" image and it should be as the reference image has no influence for this value of eta.

https://github.com/vais-ral/CCPi-Regularisation-Toolkit/blob/413c6001003c6f1272aeb43152654baaf0c8a423/src/Core/regularisers_CPU/FGP_dTV_core.c#L202-L205
Therefore B_x,B_y are small, and R1,R2 do not change
https://github.com/vais-ral/CCPi-Regularisation-Toolkit/blob/413c6001003c6f1272aeb43152654baaf0c8a423/src/Core/regularisers_CPU/FGP_dTV_core.c#L219-L220

In fact it behaves like a TV reconstruction and the solution should converge to the mean value of data, i.e., np.mean(data) = 0.171875

However, the solution coming from FGP_dTV is:

fgp_dtv

Am I doing something wrong when I set up the FGD_dTV parameters?

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions