# \[ANN\] TotalVariationImageFiltering.jl

**URL:** <https://discourse.julialang.org/t/ann-totalvariationimagefiltering-jl/136412>\
**Category:** Package Announcements\
**Tags:** package, announcement\
**Created:** [March 26, 2026, 6:58pm UTC](https://discourse.julialang.org/t/ann-totalvariationimagefiltering-jl/136412 "2026-03-26T18:58:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![dopamine](https://avatars.discourse-cdn.com/v4/letter/d/e9a140/32.png) [@dopamine](https://discourse.julialang.org/u/dopamine)\
**Post date:** [March 26, 2026, 6:58pm UTC](https://discourse.julialang.org/t/ann-totalvariationimagefiltering-jl/136412/1 "2026-03-26T18:58:44Z")

</div>

Happy to be sharing `TotalImageVariationImageFiltering.jl`

> **[GitHub - urlicht/TotalVariationImageFiltering.jl: Julia package for total-variation (TV) denoising...](https://github.com/urlicht/TotalVariationImageFiltering.jl)**
>
> Julia package for total-variation (TV) denoising and reconstruction on N-dimensional arrays.

This provides a framework for performing and extending total variation denoising in n-dimensional arrays, with an option to use **CUDA for acceleration**. CUDA acceleration provides multiple orders of magnitude speedup, particularly for larger images or volumes, and batched solving further improves speed and throughput.

- ROF denoising (`L2 + TV`) with a Chambolle-style dual projected-gradient method
- PDHG / Chambolle-Pock for `L2 + TV` and Poisson `KL + TV`
- PDHG primal constraints: non-negativity and box constraints
- Isotropic and anisotropic TV
- Single-image and batched solves
- Optional CUDA acceleration via package extension

I would greatly appreciate any feedback on the math, implementation, and anything else.
