---
title: "TotalVariationFilter"
language: "en"
type: "Symbol"
summary: "TotalVariationFilter[data] iteratively reduces noise while preserving rapid transitions in data. TotalVariationFilter[data, param] assumes a regularization parameter value param."
keywords: 
- total variation
- total variation filter
- total variation regularization
- total variation denoising
- TV
- denoising
- noise
- Laplacian
- Gaussian
- Poisson
- ROF
- bounded variation
canonical_url: "https://reference.wolfram.com/language/ref/TotalVariationFilter.html"
source: "Wolfram Language Documentation"
related_guides: 
  - 
    title: "Image Restoration"
    link: "https://reference.wolfram.com/language/guide/ImageRestoration.en.md"
  - 
    title: "Linear and Nonlinear Filters"
    link: "https://reference.wolfram.com/language/guide/LinearAndNonlinearFilters.en.md"
  - 
    title: "Image Filtering & Neighborhood Processing"
    link: "https://reference.wolfram.com/language/guide/ImageFilteringAndNeighborhoodProcessing.en.md"
  - 
    title: "Image Processing & Analysis"
    link: "https://reference.wolfram.com/language/guide/ImageProcessing.en.md"
  - 
    title: "Video Computation: Update History"
    link: "https://reference.wolfram.com/language/guide/VideoComputation-UpdateHistory.en.md"
  - 
    title: "Image Computation for Microscopy"
    link: "https://reference.wolfram.com/language/guide/ImageComputationForMicroscopy.en.md"
  - 
    title: "Audio Processing"
    link: "https://reference.wolfram.com/language/guide/AudioProcessing.en.md"
related_functions: 
  - 
    title: "WienerFilter"
    link: "https://reference.wolfram.com/language/ref/WienerFilter.en.md"
  - 
    title: "MedianFilter"
    link: "https://reference.wolfram.com/language/ref/MedianFilter.en.md"
  - 
    title: "MeanShiftFilter"
    link: "https://reference.wolfram.com/language/ref/MeanShiftFilter.en.md"
  - 
    title: "PeronaMalikFilter"
    link: "https://reference.wolfram.com/language/ref/PeronaMalikFilter.en.md"
---
# TotalVariationFilter

TotalVariationFilter[data] iteratively reduces noise while preserving rapid transitions in data.

TotalVariationFilter[data, param] assumes a regularization parameter value param.

## Details and Options

* ``TotalVariationFilter``, also known as total variation regularization, is an iterative filter commonly used to reduce different types of additive or multiplicative noise while preserving sharp transitions.

* In ``TotalVariationFilter[data, param]````, `` the value of regularization parameter ``param`` is typically in the range 0 to 1.

* The ``data`` can be any of the following:

|         |                                                   |
| ------- | ------------------------------------------------- |
| list    | arbitrary-rank numerical array                    |
| tseries | temporal data such as TimeSeries, TemporalData, … |
| image   | arbitrary Image or Image3D object                 |
| audio   | an Audio object                                   |
| video   | a Video object                                    |

* The following options can be specified:

|                |            |                                              |
| -------------- | ---------- | -------------------------------------------- |
| MaxIterations  | 30         | maximum number of iterations to be performed |
| Method         | "Gaussian" | type of noise to be removed                  |

* Possible ``Method`` settings include:  »

|             |                                                      |
| ----------- | ---------------------------------------------------- |
| "Gaussian"  | additive Gaussian, uniform and other types of noise  |
| "Laplacian" | salt-and-pepper or impulse noise                     |
| "Poisson"   | multiplicative noise, as in low-light conditions     |

---

## Examples (21)

### Basic Examples (3)

Denoise a grayscale image:

```wl
In[1]:= TotalVariationFilter[[image]]

Out[1]= [image]
```

---

Filter a 3D image:

```wl
In[1]:= TotalVariationFilter[[image], 0.3]

Out[1]= [image]
```

---

Total variation filtering on noisy data:

```wl
In[1]:=
data = Table[Sin[i ^ 2 + i] + RandomReal[{-.2, .3}], {i, 0, Pi, 0.01}];
result = TotalVariationFilter[data];

In[2]:= ListLinePlot[#, Axes -> False]& /@ {data, result}

Out[2]= {[image], [image]}
```

### Scope (9)

#### Data (6)

Filter a 2D array:

```wl
In[1]:=
TotalVariationFilter[(⁠|   |   |   |   |
| - | - | - | - |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 |⁠)]//MatrixForm

Out[1]//MatrixForm=
(⁠|             |            |            |            |
| ----------- | ---------- | ---------- | ---------- |
| 0.000927695 | 0.0101002  | 0.0163505  | 0.00281229 |
| 0.000605612 | 0.00656526 | 0.658605   | 0.00784903 |
| 0.000613526 | 0.0052335  | 0.00892432 | 0.0102441  |
| 0.000678361 | 0.00541208 | 0.00919074 | 0.0111059  |⁠)
```

---

Filter a ``TimeSeries`` :

```wl
In[1]:=
ts = TemporalData[TimeSeries, {CompressedData["«1188»"], {{0, 1., 0.01}}, 1, {"Continuous", 1}, {"Continuous", 1}, 1, 
  {ValueDimensions -> 1, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}}}, False, 
 10.1];

In[2]:=
filtered = TotalVariationFilter[ts, 0.5];
ListLinePlot[{ts, filtered}, PlotLegends -> {"original data", "filtered"}]

Out[2]= [image]
```

---

Filter an audio signal:

```wl
In[1]:=
a = \!\(\*AudioBox["![Embedded Audio Player](audio://content-tdkn9)"]\);
filtered = TotalVariationFilter[a]//AudioNormalize

Out[1]= [image]

In[2]:= AudioPlot[{a, filtered}]

Out[2]= [image]
```

---

Denoise an image:

```wl
In[1]:= TotalVariationFilter[[image]]

Out[1]= [image]
```

---

``TotalVariationFilter`` works with numerical sparse arrays:

```wl
In[1]:= TotalVariationFilter[SparseArray[1 -> 3, 3]]

Out[1]= {2.74096, 0.150431, 0.149569}
```

---

Filtering of video frames:

```wl
In[1]:= TotalVariationFilter[Video["ExampleData/fish.mp4"], .5]

Out[1]= \!\(\*VideoBox["![Embedded Video Player](video://content-ows6c)"]\)
```

#### Parameters (3)

The default regularization parameter value, assuming additive Gaussian noise, is 0.1:

```wl
In[1]:=
data = Table[Sin[i ^ 2 + i] + RandomReal[NormalDistribution[0, 0.3]], {i, 0, Pi, 0.01}];
{ListLinePlot[data, Axes -> False], 
	ListLinePlot[TotalVariationFilter[data], Axes -> False]}

Out[1]= {[image], [image]}
```

Use a custom regularization value:

```wl
In[2]:=
{ListLinePlot[data, Axes -> False], 
	ListLinePlot[TotalVariationFilter[data, 0.3], Axes -> False]}

Out[2]= {[image], [image]}
```

---

The default regularization value for Laplacian noise is 0.8:

```wl
In[1]:= TotalVariationFilter[[image], Method -> "Laplacian"]

Out[1]= [image]
```

Use a large custom value:

```wl
In[2]:= TotalVariationFilter[[image], 2., Method -> "Laplacian"]

Out[2]= [image]
```

---

Use different regularization parameters:

```wl
In[1]:= TotalVariationFilter[[image], #]& /@ {.02, .2}

Out[1]= {[image], [image]}
```

### Options (4)

#### Method (2)

Salt-and-pepper noise is best removed using the Laplacian method:

```wl
In[1]:= TotalVariationFilter[[image], Method -> "Laplacian"]

Out[1]= [image]
```

---

Use the Poisson method to remove noise from an image captured with low light:

```wl
In[1]:= TotalVariationFilter[[image], Method -> "Poisson"]

Out[1]= [image]
```

#### MaxIterations (2)

Filtering of a 1D array using different values of ``MaxIterations`` :

```wl
In[1]:=
data = Table[Sin[i ^ 2 + i] + RandomReal[NormalDistribution[0, 0.3]], {i, 0, Pi, 0.01}];
ListLinePlot[TotalVariationFilter[data, 0.3, MaxIterations -> #], Axes -> False]& /@ {1, 10, 30}

Out[1]= {[image], [image], [image]}
```

---

Denoise a grayscale image:

```wl
In[1]:=
i = [image];
TotalVariationFilter[i, 0.2, MaxIterations -> 10]

Out[1]= [image]
```

Use a larger number of iterations:

```wl
In[2]:= TotalVariationFilter[i, 0.2, MaxIterations -> 100]

Out[2]= [image]
```

### Applications (5)

Denoise a color image:

```wl
In[1]:= TotalVariationFilter[[image], 1, Method -> "Laplacian", MaxIterations -> 100]

Out[1]= [image]
```

---

Use the Poisson method to remove noise from an image captured with low light:

```wl
In[1]:= TotalVariationFilter[[image], 0.35, Method -> "Poisson"]

Out[1]= [image]
```

---

Remove Gaussian color noise from an image:

```wl
In[1]:=
i = [image];
TotalVariationFilter[i, .06, MaxIterations -> 100]

Out[1]= [image]
```

---

Use a ``TotalVariationFilter`` to remove smaller stars from an astronomical image:

```wl
In[1]:= TotalVariationFilter[[image], .1]

Out[1]= [image]
```

---

Unsharp masking using ``TotalVariationFilter`` :

```wl
In[1]:=
i = [image];
2i - TotalVariationFilter[i, 1]

Out[1]= [image]
```

## See Also

* [`WienerFilter`](https://reference.wolfram.com/language/ref/WienerFilter.en.md)
* [`MedianFilter`](https://reference.wolfram.com/language/ref/MedianFilter.en.md)
* [`MeanShiftFilter`](https://reference.wolfram.com/language/ref/MeanShiftFilter.en.md)
* [`PeronaMalikFilter`](https://reference.wolfram.com/language/ref/PeronaMalikFilter.en.md)

## Related Guides

* [Image Restoration](https://reference.wolfram.com/language/guide/ImageRestoration.en.md)
* [Linear and Nonlinear Filters](https://reference.wolfram.com/language/guide/LinearAndNonlinearFilters.en.md)
* [Image Filtering & Neighborhood Processing](https://reference.wolfram.com/language/guide/ImageFilteringAndNeighborhoodProcessing.en.md)
* [Image Processing & Analysis](https://reference.wolfram.com/language/guide/ImageProcessing.en.md)
* [Video Computation: Update History](https://reference.wolfram.com/language/guide/VideoComputation-UpdateHistory.en.md)
* [Image Computation for Microscopy](https://reference.wolfram.com/language/guide/ImageComputationForMicroscopy.en.md)
* [Audio Processing](https://reference.wolfram.com/language/guide/AudioProcessing.en.md)

## History

* [Introduced in 2010 (8.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn80.en.md) \| [Updated in 2012 (9.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn90.en.md) ▪ [2014 (10.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn100.en.md) ▪ [2016 (11.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn110.en.md) ▪ [2018 (11.3)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn113.en.md) ▪ [2025 (14.3)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn143.en.md)