Skip to content

TVPenalty

template <typename T1> class TVPenalty : public Robject<T1>

Approximate total-variation (TV) regularization penalty.

Smooth approximation to total variation using the hyperbola (Charbonnier) potential:

\[\psi(d) = \delta^2\!\left(\sqrt{1 + (d/\delta)^2} - 1\right)\]

Derivative (used by dpot): $\(\dot\psi(d) = \frac{d}{\sqrt{1 + (d/\delta)^2}}\)$

Weight (used by wpot): $\(\omega(d) = \frac{1}{\sqrt{1 + (d/\delta)^2}}\)$

Behaves quadratically near zero (\(\psi(d) \approx \frac{1}{2}d^2\) for \(|d| \ll \delta\)) and linearly for large differences (\(\psi(d) \approx \delta|d|\) for \(|d| \gg \delta\)).

\(\delta\) controls the transition from quadratic to linear behavior. Smaller \(\delta\) = sharper edges, closer to true TV, but harder optimization.

TVPenalty<float> R(Nx, Ny, Nz, beta, delta);
auto xhat = solve_pwls_pcg<float>(x0, G, W, yi, R, niter);

See : Rudin, Osher & Fatemi, "Nonlinear Total Variation Based Noise Removal Algorithms," Physica D, 1992. https://doi.org/10.1016/0167-2789(92)90242-F

See : QuadPenalty for a purely quadratic alternative.

See : Robject for the base class interface.

T1 : Floating-point precision type (float or double).

Variables

Name Description
Delta Smoothing parameter \(\delta\) for the Charbonnier potential approximation.

Functions

Name Description
TVPenalty Default constructor.
TVPenalty Construct an approximate TV penalty operator.
wpot TV weight function: \(\omega(d) = 1 / \sqrt{1 + (d/\delta)^2}\). d : Finite-difference vector. Return : Per-element weights, same length as d.
dpot TV derivative: \(\dot\psi(d) = d / \sqrt{1 + (d/\delta)^2}\). d : Finite-difference vector. Return : Per-element derivatives, same length as d.
pot TV potential: \(\psi(d) = \delta^2(\sqrt{1 + (d/\delta)^2} - 1)\). d : Finite-difference vector. Return : Per-element potential values, same length as d.

Variable Details

Delta

T1 Delta

Smoothing parameter $\delta$ for the Charbonnier potential approximation.

Function Details

TVPenalty

TVPenalty()

Default constructor.

TVPenalty(uword nx, uword ny, uword nz, T1 beta, T1 delta, uword dims2penalize = 3)

Construct an approximate TV penalty operator.

nx : Image x-dimension.

ny : Image y-dimension.

nz : Image z-dimension (use 1 for 2-D).

beta : Regularization strength \(\beta\).

delta : Smoothing parameter \(\delta > 0\); smaller values approach exact TV.

dims2penalize : Number of spatial dimensions to penalize (default 3).

dpot

Col<CxT1> dpot(const Col<CxT1>& d) const override

TV derivative: $\dot\psi(d) = d / \sqrt{1 + (d/\delta)^2}$.

d : Finite-difference vector.

Return : Per-element derivatives, same length as d.

pot

Col<CxT1> pot(const Col<CxT1>& d) const override

TV potential: $\psi(d) = \delta^2(\sqrt{1 + (d/\delta)^2} - 1)$.

d : Finite-difference vector.

Return : Per-element potential values, same length as d.

wpot

Col<CxT1> wpot(const Col<CxT1>& d) const override

TV weight function: $\omega(d) = 1 / \sqrt{1 + (d/\delta)^2}$.

d : Finite-difference vector.

Return : Per-element weights, same length as d.