denoise2 {tvR}R Documentation

Total Variation Denoising for Image

Description

Given an image f, it solves an optimization of the form,

u^* = argmin_u E(u,f)+\lambda V(u)

where E(u,f) is fidelity term and V(u) is total variation regularization term. The naming convention of a parameter method is <problem type> + <name of algorithm>. For more details, see the section below.

Usage

denoise2(
  data,
  lambda = 1,
  niter = 100,
  method = c("TVL1.PrimalDual", "TVL2.PrimalDual", "TVL2.FiniteDifference"),
  normalize = FALSE
)

Arguments

data

standard 2d or 3d array.

lambda

regularization parameter (positive real number).

niter

total number of iterations.

method

indicating problem and algorithm combination.

normalize

a logical; TRUE to make the range in [0,1], or FALSE otherwise.

Value

denoised array as same size of data.

Data format

An input data can be either (1) 2-dimensional matrix representaing grayscale image, or (2) 3-dimensional array for color image.

Algorithms for TV-L1 problem

The cost function for TV-L2 problem is

min_u |u-f|_1 + \lambda |\nabla u|

where for a given 2-dimensional array, |\nabla u| = \sum sqrt(u_x^2 + u_y^2) Algorithms (in conjunction with model type) for this problems are

"TVL1.PrimalDual"

Primal-Dual algorithm.

Algorithms for TV-L2 problem

The cost function for TV-L2 problem is

min_u |u-f|_2^2 + \lambda |\nabla u|

and algorithms (in conjunction with model type) for this problems are

"TVL2.PrimalDual"

Primal-Dual algorithm.

"TVL2.FiniteDifference"

Finite Difference scheme with fixed point iteration.

References

Rudin LI, Osher S, Fatemi E (1992). “Nonlinear total variation based noise removal algorithms.” Physica D: Nonlinear Phenomena, 60(1-4), 259–268. ISSN 01672789.

Chambolle A, Pock T (2011). “A First-Order Primal-Dual Algorithm for Convex Problems with Applications to Imaging.” Journal of Mathematical Imaging and Vision, 40(1), 120–145. ISSN 0924-9907, 1573-7683.

Examples

## Not run: 
## Load grey-scale 'lena' data
data(lena128)

## Add white noise
sinfo   <- dim(lena128)   # get the size information
xnoised <- lena128 + array(rnorm(128*128, sd=10), sinfo)

## apply denoising models
xproc1 <- denoise2(xnoised, lambda=10, method="TVL2.FiniteDifference")
xproc2 <- denoise2(xnoised, lambda=10, method="TVL1.PrimalDual")

## compare
gcol = gray(0:256/256)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2), pty="s")
image(lena128, main="original", col=gcol)
image(xnoised, main="noised", col=gcol)
image(xproc1, main="TVL2.FiniteDifference", col=gcol)
image(xproc2, main="TVL1.PrimalDual", col=gcol)
par(opar)

## End(Not run)


[Package tvR version 0.3.2 Index]