This algorithm computes the cyclic or randomized proximal point algorithm
on a manifold for the first order differences relaxed by a Huber functional.
It consits of `proxDistanceSquared`

,
`proxTV`

, with a modified/relaxed inner difference, the Huber function relaxed absolute difference.
The functional to minimize reads for given (noisy or lossy) data $u\in\M^{\vect{n}}$$ as

where the data term is reduced to known data from for the lossy case, and the first order differences are relaxed to a quadratic term for small distances. The weighghts can be also given as vectors for the dimensions with different weights, i.e. $\alpha_1$ as a weight for the differences in -direction Real values are interpreted as constant vectors.

When given as matrices, the upper triangular part of weights the diagonal differences in both positive directions (to direction, while the lower triangular denotes weights for .

The parameters `lambda`

, `lambdaIterate`

, and `stoppingCriterion`

are explained
in the optional parameters section
of the `CyclicProximalPoint`

this function internally
uses.

The `FixedMask`

sets pixel in to the value initially provided by
and leaves them unchanged. the `UnknownMask`

specifies unknown pixel, which are
intialized and regularized during the algorithm.

### Matlab Documentation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

% CPP_HuberTV(M,f,alpha,stoppincCriterion)
% Compute the CPP of the first order TV with Huber relaxation
% can also be called with a struct with the corresponding fields, i.e. as
% CPP_HuberTV(problem).
%
% INPUT
% M : a manifold.
% f : an image from M^{m_1,m_2,...,m_n} of
% manifold-valued data
% alpha : weight(s) for first order absolute difference terms
% either a number or one for each dimension.
% stoppingCriterion : a functional @(x,xold,lambda,iter) as a stopping
% criterion based on x, the last iterate xold, lambda
%
% OUTPUT:
% x : result of the cyclic proximal point algorithm
% recData : recorded data array of the by the record-function
%
% OPTIONAL PARAMETERS
%
% 'UnknownMask' : ([]) Specify a mask the same size as the data, i.e.,
% m_1xm_2x...xm_nw, which are labeled as unknown
% they are initialized in the cycles, when possible.
% 'FixedMask' : ([]) Specify a binary mask (m_y1xm_2x...xm_n) for
% values that are fixed. They are fixed on a 'poor
% mans method', i.e. reset after each step
% 'lambdaIterate' : (@ (iter)) a functional @(iter) computing the
% iterates value of lambda
% 'lambda' : if no iterate (see above) is given, this value is used
% to set the iterate to @(iter) lambda/iter
% Debug : ([]) a function @ (x,xold,iter) producing debug
% output
% Record : (@(x,iter)) a function returning a column vector, if
% there's a second return value and this function is
% given, data is recorded in an array and returned
% ---
% MVIRT | R. Bergmann | 2018-01-22