Total Variation Deconvolution using Split Bregman
Functions
usolve_dft_inc.c File Reference

u-subproblem DFT solver for TV-regularized deconvolution More...

#include <string.h>
#include "util_deconv.h"

Go to the source code of this file.

Functions

static void SymmetricPadding (num *Dest, const num *Src, int Width, int Height, int NumChannels)
 Symmetrically pad an image to twice its size. More...
 
static void AdjBlurFourier (numcomplex *ATrans, num *A, FFT(plan) TransformA, const numcomplex *KernelTrans, const num *ztilde, int Width, int Height, int NumChannels, num Alpha)
 Compute ATrans = Alpha . conj(KernelTrans) . DFT[ztilde].
 
static int InitDeconvFourier (tvregsolver *S)
 Intializations to prepare TvRestore for Fourier deconvolution. More...
 
static void UTransSolveFourier (numcomplex *BTrans, num *B, FFT(plan) TransformB, numcomplex *ATrans, const numvec2 *dtilde, const num *DenomTrans, int Width, int Height, int NumChannels)
 Compute BTrans = ( ATrans - DFT[div(dtilde)] ) / DenomTrans. More...
 
static num UDeconvFourier (tvregsolver *S)
 Solve the u-subproblem using DFT transforms (UseZ = 0) More...
 
static num UDeconvFourierZ (tvregsolver *S)
 Solve the u-subproblem using DFT transforms (UseZ = 1) More...
 

Detailed Description

u-subproblem DFT solver for TV-regularized deconvolution

Author
Pascal Getreuer getre.nosp@m.uer@.nosp@m.gmail.nosp@m..com

Copyright (c) 2010-2012, Pascal Getreuer All rights reserved.

This program is free software: you can use, modify and/or redistribute it under the terms of the simplified BSD License. You should have received a copy of this license along this program. If not, see http://www.opensource.org/licenses/bsd-license.html.

Definition in file usolve_dft_inc.c.

Function Documentation

static int InitDeconvFourier ( tvregsolver S)
static

Intializations to prepare TvRestore for Fourier deconvolution.

Parameters
Stvreg solver state
Returns
1 on success, 0 on failure

Definition at line 94 of file usolve_dft_inc.c.

static void SymmetricPadding ( num *  Dest,
const num *  Src,
int  Width,
int  Height,
int  NumChannels 
)
static

Symmetrically pad an image to twice its size.

Parameters
Destthe destination
Srcthe source image
Width,Height,NumChannelsthe dimensions of Src

The Src image of size Width by Height is reflected over each axis to create an image that is 2*Width by 2*Height.

Definition at line 27 of file usolve_dft_inc.c.

static num UDeconvFourier ( tvregsolver S)
static

Solve the u-subproblem using DFT transforms (UseZ = 0)

This routine solves the u-subproblem

\[ \tfrac{\lambda}{\gamma}K^* Ku -\Delta u = \tfrac{\lambda}{ \gamma}K^* f -\operatorname{div}\tilde{d}, \]

where K denotes the blur operator $ Ku := \varphi * u $. The solution is obtained using the discrete Fourier transform (DFT) as

\[ u=\mathcal{F}^{-1}\left[\frac{\frac{\lambda}{\gamma}\overline{ \mathcal{F}(\varphi)}\cdot\mathcal{F}(Ef)- \mathcal{F}\bigl(E \operatorname{div}(d-b)\bigr)}{\frac{\lambda}{\gamma}\lvert\mathcal{F}( \varphi)\rvert^2 - \mathcal{F}(\Delta)}\right], \]

where E denotes symmetric extension and $ \mathcal{F} $ denotes the DFT.

Definition at line 227 of file usolve_dft_inc.c.

static num UDeconvFourierZ ( tvregsolver S)
static

Solve the u-subproblem using DFT transforms (UseZ = 1)

This extended version of UDeconvFourier is used when performing Fourier- based deconvolution with the three-auxiliary variable algorithm (UseZ = 1), that is, in a deconvolution problem with a non-symmetric kernel and non- Gaussian noise model.

Definition at line 249 of file usolve_dft_inc.c.

static void UTransSolveFourier ( numcomplex BTrans,
num *  B,
FFT(plan)  TransformB,
numcomplex ATrans,
const numvec2 dtilde,
const num *  DenomTrans,
int  Width,
int  Height,
int  NumChannels 
)
static

Compute BTrans = ( ATrans - DFT[div(dtilde)] ) / DenomTrans.

This subroutine is a part of the DFT u-subproblem solution that is common to both the d,u splitting (UseZ=0) and d,u,z splitting (UseZ=1).

Definition at line 183 of file usolve_dft_inc.c.