Total variation denoising

From Infogalactic: the planetary knowledge core
Jump to: navigation, search
File:ROF Denoising Example.png
Example of application of the Rudin et al.[1] total variation denoising technique to an image corrupted by Gaussian noise. This example created using demo_tv.m by Guy Gilboa, see external links.

In signal processing, Total variation denoising, also known as total variation regularization is a process, most often used in digital image processing, that has applications in noise removal. It is based on the principle that signals with excessive and possibly spurious detail have high total variation, that is, the integral of the absolute gradient of the signal is high. According to this principle, reducing the total variation of the signal subject to it being a close match to the original signal, removes unwanted detail whilst preserving important details such as edges. The concept was pioneered by Rudin et al. in 1992.[1]

This noise removal technique has advantages over simple techniques such as linear smoothing or median filtering which reduce noise but at the same time smooth away edges to a greater or lesser degree. By contrast, total variation denoising is remarkably effective at simultaneously preserving edges whilst smoothing away noise in flat regions, even at low signal-to-noise ratios.[2]

Mathematical exposition for 1D digital signals

File:TVD 1D Example.png
Application of 1D total variation denoising to a signal obtained from a single-molecule experiment.[3] Gray is the original signal, black is the denoised signal.

For a digital signal y_n, we can, for example, define the total variation as:

V(y) = \sum\limits_n\left|y_{n+1}-y_n \right|

Given an input signal x_n, the goal of total variation denoising is to find an approximation, call it y_n, that has smaller total variation than x_n but is "close" to x_n. One measure of closeness is the sum of square errors:

E(x,y) = \frac{1}{2}\sum\limits_n\left(x_n - y_n\right)^2

So the total variation denoising problem amounts to minimizing the following discrete functional over the signal y_n:

E(x,y) + \lambda V(y)

By differentiating this functional with respect to y_n, we can derive a corresponding Euler–Lagrange equation, that can be numerically integrated with the original signal x_n as initial condition. This was the original approach.[1] Alternatively, since this is a convex functional, techniques from convex optimization can be used to minimize it and find the solution y_n.[3]

Regularization properties

The regularization parameter \lambda plays a critical role in the denoising process. When \lambda=0, there is no denoising and the result is identical to the input signal. As \lambda \to \infty, however, the total variation term plays an increasingly strong role, which forces the result to have smaller total variation, at the expense of being less like the input (noisy) signal. Thus, the choice of regularization parameter is critical to achieving just the right amount of noise removal.

2D digital signals

We now consider 2D signals y, such as images. The total variation norm proposed by the 1992 paper is

V(y) = \sum_{i,j} \sqrt{ |y_{i+1,j} - y_{i,j}|^2 + |y_{i,j+1} - y_{i,j}|^2 }

and is isotropic and not differentiable. A variation that is sometimes used, since it may sometimes be easier to minimize, is an anisotropic version

V_\text{aniso}(y) = \sum_{i,j} \sqrt{ |y_{i+1,j} - y_{i,j}|^2} + \sqrt{|y_{i,j+1} - y_{i,j}|^2 } = \sum_{i,j} |y_{i+1,j} - y_{i,j}| + |y_{i,j+1} - y_{i,j}|.

The standard total variation denoising problem is still of the form

 \min_y \; E(x,y) + \lambda V(y)

where E is the 2D L2 norm. In contrast to the 1D case, solving this denoising is non-trivial. A recent algorithm that solves this is known as the primal dual method.[4]

Due in part to much research in compressed sensing in the mid-2000s, there are many algorithms, such as the split-Bregman method, that solve variants of this problem.

See also

External links

References

  1. 1.0 1.1 1.2 Lua error in package.lua at line 80: module 'strict' not found.
  2. Lua error in package.lua at line 80: module 'strict' not found.
  3. 3.0 3.1 Lua error in package.lua at line 80: module 'strict' not found.
  4. Lua error in package.lua at line 80: module 'strict' not found.