$ \DeclareMathOperator{\arccosh}{arccosh} \DeclareMathOperator*{\argmin}{arg\,min} \DeclareMathOperator{\Exp}{Exp} \newcommand{\geo}[2]{\gamma_{\overset{\frown}{#1,#2}}} \newcommand{\geoS}{\gamma} \newcommand{\geoD}[2]{\gamma_} \newcommand{\geoL}[2]{\gamma(#2; #1)} \newcommand{\gradM}{\nabla_{\M}} \newcommand{\gradMComp}[1]{\nabla_{\M,#1}} \newcommand{\Grid}{\mathcal G} \DeclareMathOperator{\Log}{Log} \newcommand{\M}{\mathcal M} \newcommand{\N}{\mathcal N} \newcommand{\mat}[1]{\mathbf{#1}} \DeclareMathOperator{\prox}{prox} \newcommand{\PT}[3]{\mathrm{PT}_{#1\to#2}#3} \newcommand{\R}{\mathbb R} \newcommand{\SPD}[1]{\mathcal{P}(#1)} \DeclareMathOperator{\Tr}{Tr} \newcommand{\tT}{\mathrm{T}} \newcommand{\vect}[1]{\mathbf{#1}} $

The CPP algorithm for Huber relaxed TV

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

See also