---
kind: concept
slug: image-denoising
title: Image denoising
summary: >-
  Image denoising removes noise from a picture: Gaussian noise at a known level, real sensor noise, or Poisson photon noise. Five cards: MambaIR and GRL disagree on which Gaussian model is best; DGUNet is within 0.1 dB of MambaIR on SIDD and DND; RIDNet, a one-pass blind denoiser, scores 39.23 dB on DnD; WIRE fits a wavelet implicit network to one noisy image, with no training set.
tags: [image-restoration, denoising, low-level-vision]
papers: ["1904.07396", "2402.15648", "2204.13348", "2301.05187", "2303.00748"]
related: [channel-attention, deep-unfolding, image-super-resolution, residual-learning, self-attention, shifted-window-attention, state-space-model]
status: draft
updated_at: 2026-11-01
---

## Overview

Image denoising takes a noisy image and returns a clean estimate of the same
scene. Three settings appear in the cards. In the synthetic Gaussian setting,
Gaussian noise of a known standard deviation σ (on a 0-255 scale) is added to
clean images, and the model is trained and tested on that noise
[arxiv:2402.15648 §4.1]
[code: options/train/mambair/train_MambaIR_ColorDN_level15.yml#L43-L52].
RIDNet also reports Gaussian results, but its card does not state the noise
levels used in training [arxiv:1904.07396 §4.1]. In the real setting, the noisy input is a camera image and the clean target
comes from a paired capture [arxiv:2402.15648 §4.4] [arxiv:2204.13348 §4.4].
In the Poisson setting, photon noise is added to DIV2K images and a network is
fitted to each noisy image on its own; the card describes no separate training
set [arxiv:2301.05187 §4.2].

Five paper cards cover this concept so far. MambaIR and RIDNet each cover the
Gaussian and real settings. GRL covers only the Gaussian setting, with no camera
results. DGUNet covers only the real setting, and its card has no Gaussian
results. WIRE covers only the Poisson setting, and its card has no Gaussian or
camera results. Other denoising methods are not compared here,
and the scores from the four cards come from different papers' tables and
protocols. WIRE's denoising numbers are plotted, not stated in its text.

## Variants

### Gaussian color denoising at known σ (MambaIR)

The network is a restoration backbone that takes the noisy image as input and
adds a convolution output back onto it, so the model learns the residual
[code: basicsr/archs/mambair_arch.py#L679-L683]. It is trained for σ = 15, 25
and 50 [arxiv:2402.15648 tab. 5]. The σ15 model is trained from scratch; the
σ25 and σ50 models start from σ15 weights [arxiv:2402.15648 §4.1]
[code: options/train/mambair/train_MambaIR_ColorDN_level50.yml#L56]. Card:
[MambaIR: A Simple Baseline for Image Restoration with State-Space Model](/papers/2402.15648).

On the paper's own table, MambaIR scores highest on BSD68 and Urban100 at all
three σ values, and on McMaster at all three [arxiv:2402.15648 tab. 5]. Its
Urban100 σ50 score is 30.30 dB against 30.02 dB for Restormer and 29.82 dB for
SwinIR. On Kodak24, Restormer is higher at all three σ values, for example
35.47 dB against 35.42 dB at σ15 [arxiv:2402.15648 tab. 5]. All numbers are
author-reported.

### Gaussian colour denoising with windowed and stripe attention (GRL)

GRL splits each transformer layer into three parallel branches: window
attention on half of the channels, anchored stripe attention on the other
half, and a channel-attention convolution for local detail
[arxiv:2303.00748 §4] [fig. 6]. The stripe branch attends to a small set of
pooled anchors rather than to every token, which keeps its cost down
[arxiv:2303.00748 §3.2]. The paper gives three sizes. On its colour denoising
table, GRL-T has 0.88 M parameters, GRL-S 3.12 M and GRL-B 19.81 M
[arxiv:2303.00748 tab. 4]. On CBSD68 at σ 15, 25 and 50, GRL-B scores 34.45,
31.82 and 28.62 dB, and GRL-T scores 34.30, 31.66 and 28.45 dB
[arxiv:2303.00748 tab. 4]. On Urban100, GRL-S scores 35.24, 33.07 and 30.09 dB,
above the 35.13, 32.96 and 30.02 dB that Restormer reports, with 3.12 M against
Restormer's 26.13 M [arxiv:2303.00748 tab. 4]. All numbers are author-reported.
The card has no camera-noise results for GRL. The released denoising config
trains GRL-T, not GRL-B, with L1 loss, AdamW at 1e-4 for 225k steps and
256-pixel patches [code: config/experiment/dn/grl/grl_p256.yaml#L6-L56]
[code: config/experiment/dn/grl/grl_p256.yaml#L20]. Card:
[GRL: Efficient and Explicit Modelling of Image Hierarchies for Image Restoration](/papers/2303.00748).

### Real-image denoising with MambaIR (SIDD and DND)

The paper describes the same architecture for real denoising, trained with
progressive patch sizes that follow Restormer, with the details not stated
[arxiv:2402.15648 §4.4]. The reported scores are close to the strongest
baselines. On SIDD, MambaIR reaches 39.89 dB against 40.02 dB for Restormer;
on DND it reaches 40.04 dB against 40.03 dB for Restormer [arxiv:2402.15648
tab. 6]. The released real-denoising config uses a different U-Net model and
optimiser (see Contradictions) [code: realDenoising/options/train_MambaIR_RealDN.yml#L26-L30].

### Real-image denoising with an unfolded network (DGUNet)

DGUNet unfolds seven stages of proximal gradient descent. Each stage has a
gradient module and an informative proximal mapping [arxiv:2204.13348 §3.2].
For denoising, the paper trains on 320 SIDD pairs and tests on SIDD and DND
[arxiv:2204.13348 §4.4]. DGUNet scores 39.88 dB on SIDD and 40.04 dB on DND.
DGUNet+, which makes every stage independent, scores 39.91 dB and 40.12 dB
[arxiv:2204.13348 tab. 3]. The text puts DGUNet+ 0.20 dB above MPRNet on SIDD
and 0.32 dB above it on DND [arxiv:2204.13348 §4.4]. The paper does not say
which of its two gradient branches the denoising models use [arxiv:2204.13348
§3.2]. Card: [Deep Generalized Unfolding Networks for Image Restoration](/papers/2204.13348).

### Blind real-image denoising in one pass (RIDNet)

RIDNet is a single-stage denoiser. It predicts the residual, which is added
back to the noisy input, and its body has four enhancement attention modules,
each ending in a channel gate [arxiv:1904.07396 §3.2] [arxiv:1904.07396 §3.2.1].
It is blind, so it needs no noise level set by hand [arxiv:1904.07396 §1].
On DnD sRGB, blind, it reports 39.23 dB and 0.9526 SSIM, against 38.06 dB for
CBDNet [arxiv:1904.07396 tab. 5]. On the Nam and SSID real sets it reports
39.09 dB and 38.71 dB; the SSID figure uses the validation split
[arxiv:1904.07396 tab. 6] [arxiv:1904.07396 §4.3.1]. On Gaussian data it
reports 34.01, 31.37 and 28.14 dB for colour BSD68 at σ15, σ25 and σ50
[arxiv:1904.07396 tab. 4]. The card gives its inference time as about 0.2 s for
a 512 × 512 image, on hardware not stated [arxiv:1904.07396 §3.3]. The official
repository has only a test model and no licence file, so training cannot be
reproduced from it [code: README.md#L37-L38]. Card:
[Real Image Denoising with Feature Attention](/papers/1904.07396).

### Poisson denoising by fitting one image (WIRE)

WIRE is an implicit neural representation: a small MLP that maps coordinates to
values, with a complex Gabor wavelet as its activation [arxiv:2301.05187 §3.2]
[eq. 2]. For denoising, the noisy image is the only data. The input has Poisson
noise with a maximum mean of 30 photons per pixel and a readout count of 2,
which gives an input PSNR of 17.6 dB. The denoising MLP has two hidden layers
of 256 features [arxiv:2301.05187 §4.2]. The network is fitted to the noisy
measurements with Adam and an l2 loss, with no other regularisation
[arxiv:2301.05187 §4]. The paper's text calls the denoised result the highest
of the compared implicit networks, and qualitatively close to deep image prior
(DIP). The bar values are plotted, not stated [arxiv:2301.05187 §4.2] [fig. 6].
It reports denoising reaching a target PSNR about an order of magnitude sooner
in epochs than other implicit networks, on a Kodak experiment
[arxiv:2301.05187 §3.3]. The paper does not state the denoising w0 and s0; its
photon sweep is in [arxiv:2301.05187 §3.4] [fig. 3]. Card:
[WIRE: Wavelet Implicit Neural Representations](/papers/2301.05187).

## When to use which

| Situation | Use | Why |
|---|---|---|
| You fit a model to each noisy image, with Poisson or photon-limited noise, and have no training set | WIRE | Its denoising setting is a per-image fit with Poisson noise. The DIV2K result is plotted and called the highest among compared implicit networks [arxiv:2301.05187 §4.2] [fig. 6]. Its scores are not comparable with the Gaussian or SIDD/DND scores on this page |
| You have paired noisy and clean training images | MambaIR or DGUNet | Both are trained on paired data, in the Gaussian or real setting [arxiv:2402.15648 §4.1] [arxiv:2204.13348 §4.4] |
| Noise is synthetic Gaussian and σ is known or can be set in advance | Gaussian variant (MambaIR σ-specific model, or GRL) | MambaIR is top on most columns of its own Gaussian table [arxiv:2402.15648 tab. 5]. GRL-B's own table is higher on Kodak24, McMaster and Urban100 at all three σ values [arxiv:2303.00748 tab. 4]. The two tables disagree on which model is best (see Contradictions) |
| Need a small Gaussian model, with parameter count as a limit | GRL-S (3.12 M) or GRL-T (0.88 M) | GRL-S is above Restormer on Urban100 at all three σ values, with 3.12 M against Restormer's 26.13 M [arxiv:2303.00748 tab. 4]. GRL-T is 0.15 dB below GRL-B on CBSD68 at σ15 [arxiv:2303.00748 tab. 4]. The cards give no MambaIR parameter count, so its size cannot be compared here |
| Noise comes from a real camera or sensor | A real-image variant, benchmarked on SIDD and DND | Across MambaIR, DGUNet, DGUNet+ and Restormer, the reported scores differ by 0.14 dB on SIDD and 0.09 dB on DND. Restormer's 40.02 dB on SIDD is from [arxiv:2402.15648 tab. 6]. RIDNet's 39.23 dB on DnD is about 0.8 dB lower, but its card is not in the same table (see Contradictions) |
| Want the iterative-solver structure of deep unfolding (see `deep-unfolding`) | DGUNet | Each stage is a gradient step and a proximal step [arxiv:2204.13348 §3.2]. Its denoising scores are close to MambaIR's, not above them [arxiv:2204.13348 tab. 3] |
| Want the highest DND score among the models on these cards | DGUNet+ | 40.12 dB against 40.04 dB for MambaIR and DGUNet [arxiv:2204.13348 tab. 3] [arxiv:2402.15648 tab. 6]. The gap is 0.08 dB, and the two papers' protocols may differ (see Contradictions) |
| Want a blind model that runs in one pass, with no noise-level input and no CUDA-only kernel | RIDNet | Its layers are convolutions, pooling and sigmoid gates [arxiv:1904.07396 §3.2] [arxiv:1904.07396 §3.2.1]. Its DnD score is 39.23 dB, about 0.8 dB below DGUNet+ and MambaIR [arxiv:1904.07396 tab. 5] [arxiv:2204.13348 tab. 3]. The two tables do not share a protocol (see Contradictions) |
| Need a σ25 or σ50 model and already have the σ15 weights | Start from σ15 weights | The released σ25/σ50 configs start from the σ15 model at learning rate 1e-4 for 800k iterations, against 1.6M for σ15 [code: options/train/mambair/train_MambaIR_ColorDN_level50.yml#L56-L76] [code: options/train/mambair/train_MambaIR_ColorDN_level15.yml#L75]. The paper does not state these counts |
| Reproducing DGUNet's denoising results | Follow the code's schedule and say so | The paper states 4e5 iterations and 256x256 patches [arxiv:2204.13348 §4.1]. The denoising config runs 80 epochs with 128x128 patches [code: Denoising/training.yml#L16] [code: Denoising/training.yml#L25] |
| Limited GPU or no CUDA | Check first | The model imports the fused selective-scan kernel from `mamba_ssm` [code: basicsr/archs/mambair_arch.py#L11]. The cards give no non-CUDA variant. DGUNet's cost is not stated in the text; its complexity appears only in a figure [arxiv:2204.13348 fig. 1]. RIDNet keeps 64 channels at full resolution through its modules, so its card warns that memory grows with input size [arxiv:1904.07396 §3.3] |
| Need one number to compare against other papers | Check the metric | MambaIR says Y-channel PSNR, but its colour-denoising test configs compute RGB PSNR (see Contradictions). DGUNet and RIDNet do not name a colour channel [arxiv:2204.13348 §4.1] [arxiv:1904.07396 §4.1] |

## Implementation sketch

Pseudocode for the Gaussian colour model, with the residual output that the
code uses for denoising. Layers are shown at a high level.

```pseudocode
# Denoise a noisy RGB image with a known Gaussian sigma
# (sigma is on the 0-255 scale; training noise is sigma/255 on [0, 1] images)
# [arxiv:2402.15648 §4.1] [code: basicsr/data/paired_image_dataset.py#L105-L112]

def denoise(noisy):                       # noisy: (3, H, W) in [0, 1]
    # shallow 3x3 conv to C channels      [arxiv:2402.15648 §3.2]
    feat = conv3x3(noisy, out=C)
    # stacked residual state-space groups, each with its own residual
    # [arxiv:2402.15648 §3.2] [code: basicsr/archs/mambair_arch.py#L602-L606]
    deep = residual_state_space_groups(feat)
    # final conv, then the long skip from shallow features
    # [arxiv:2402.15648 §3.2]
    feat = conv3x3(deep) + feat
    # the output is the noisy input plus a learned residual
    # [code: basicsr/archs/mambair_arch.py#L679-L683]
    return noisy + conv3x3(feat, out=3)

# Training loss: Charbonnier against the clean target, not against the input
# [arxiv:2402.15648 §3.6] [code: basicsr/losses/losses.py#L109-L116]
def loss(pred, clean):
    diff = pred - clean
    # paper: sqrt(diff^2 + eps^2), eps = 1e-3 [arxiv:2402.15648 eq. 9]
    # code:  sqrt(diff^2 + eps) per element [code: basicsr/losses/losses.py#L24-L26]
    return mean(sqrt(diff * diff + EPS))
```

DGUNet has a different structure. It runs seven stages, each a gradient step
followed by a proximal step, passes features between stages, and sums the
error over all stage outputs [arxiv:2204.13348 §3.2] [arxiv:2204.13348 eq. 10].
Its denoising code, however, trains with Charbonnier loss only (see
Contradictions).

## Contradictions

- **Charbonnier term.** The paper writes `sqrt(‖d‖² + ε²)` with ε = 1e-3
  [arxiv:2402.15648 eq. 9]. The code computes `sqrt(d² + eps)` per element with
  eps = 1e-3, which has an effective ε of about 0.032
  [code: basicsr/losses/losses.py#L24-L26]. The paper's loss equations also
  compare the output with the input; the card notes the target should be the
  ground truth [arxiv:2402.15648 §3.6].
- **Real-denoising architecture.** The paper describes one architecture for
  both Gaussian and real denoising [arxiv:2402.15648 §3.6]. The released
  real-denoising config uses a different U-Net (`MambaIRUNet`, dim 48), L1 loss,
  AdamW, gradient clipping and mixup, with progressive patches from 128 to 384
  over 300k iterations [code: realDenoising/options/train_MambaIR_RealDN.yml#L26-L30]
  [code: realDenoising/options/train_MambaIR_RealDN.yml#L52-L100]. The paper
  does not say which of the two produced its table scores.
- **Colour metric.** MambaIR reports Y-channel PSNR for every table
  [arxiv:2402.15648 §4.1]. The colour-denoising test configs compute RGB PSNR
  with `test_y_channel: false` [code: options/test/mambair/test_MambaIR_ColorDN_level15.yml#L79-L84].
  DGUNet lists PSNR and SSIM without naming a colour channel
  [arxiv:2204.13348 §4.1]. The two papers' SIDD and DND scores may therefore
  use different protocols, and neither paper's table includes the other's
  model [arxiv:2402.15648 tab. 6] [arxiv:2204.13348 tab. 3].
- **Gaussian colour tables, MambaIR against GRL.** Both papers list SwinIR and
  Restormer with identical numbers, which suggests they share a protocol for
  those rows [arxiv:2402.15648 tab. 5] [arxiv:2303.00748 tab. 4]. Neither card
  states the protocol, so this is an inference from the numbers. On BSD68,
  MambaIR is higher than GRL-B at all three σ values: 34.48 against 34.45 dB at
  σ15, 32.24 against 31.82 dB at σ25, and 28.66 against 28.62 dB at σ50
  [arxiv:2402.15648 tab. 5] [arxiv:2303.00748 tab. 4]. On Kodak24, McMaster and
  Urban100, GRL-B is higher at all three σ values, for example 35.54 against
  35.37 dB on Urban100 at σ15 [arxiv:2303.00748 tab. 4]
  [arxiv:2402.15648 tab. 5]. GRL-B does not top every column: Restormer is
  higher on Kodak24 at σ15 (35.47 against 35.43 dB) [arxiv:2303.00748 tab. 4].
- **RIDNet on DnD and SSID.** The RIDNet card gives 39.23 dB on DnD
  [arxiv:1904.07396 tab. 5]. DGUNet's table lists RIDNet at 39.26 dB on DND
  [arxiv:2204.13348 tab. 3]. The RIDNet card's SSID figures, 38.71 dB for
  RIDNet and 30.78 dB for CBDNet, are the same numbers that DGUNet's table gives
  under SIDD [arxiv:1904.07396 tab. 6] [arxiv:2204.13348 tab. 3]. The RIDNet
  card uses SSID's validation split, and the DGUNet card does not say which
  split its SIDD column uses. The cards do not settle which dataset or split
  each column means.
- **BSD68 colour, RIDNet against MambaIR.** RIDNet's colour BSD68 row gives
  34.01 dB at σ15 [arxiv:1904.07396 tab. 4]. MambaIR's table gives 34.48 dB
  [arxiv:2402.15648 tab. 5]. The RIDNet card does not name a colour channel,
  while MambaIR reports Y-channel PSNR [arxiv:2402.15648 §4.1]. The two rows
  are not a like-for-like comparison. The DnCNN rows also differ: 33.89 dB at σ15
  in RIDNet's table [arxiv:1904.07396 tab. 4] against 33.90 dB in MambaIR's
  [arxiv:2402.15648 tab. 5]. The IRCNN and FFDNet rows match in both tables.
- **Denoising loss in DGUNet.** The paper's stated loss is an l2 error summed
  over stages, and only the compressive-sensing code matches it
  [arxiv:2204.13348 §3.3] [arxiv:2204.13348 eq. 10]. The denoising code uses
  Charbonnier loss only, with the output clamped to [0, 1]
  [code: Denoising/train.py#L137].
- **WIRE photon count.** The paper gives a maximum of 30 photons per pixel for
  the denoising input [arxiv:2301.05187 §4.2], and 50 in its sweep
  [arxiv:2301.05187 §3.4]. The denoising script uses 30
  [code: wire_image_denoise.py#L34].

## Papers

- [MambaIR: A Simple Baseline for Image Restoration with State-Space Model](/papers/2402.15648): a restoration backbone with a four-direction Mamba scan; reports Gaussian colour denoising at σ15/25/50 and real denoising on SIDD and DND.
- [Deep Generalized Unfolding Networks for Image Restoration](/papers/2204.13348): a seven-stage unfolded network with learned gradient and proximal modules; reports real denoising on SIDD and DND, alongside deraining, deblurring and compressive sensing.
- [Real Image Denoising with Feature Attention](/papers/1904.07396): a single-stage blind denoiser with four enhancement attention modules and feature attention; reports DnD, Nam and SSID for real noise, and BSD68 and classical images for Gaussian noise.
- [WIRE: Wavelet Implicit Neural Representations](/papers/2301.05187): an implicit network with a complex Gabor wavelet activation; reports per-image denoising of Poisson-noisy images, alongside fitting, super-resolution, CT and NeRF.
- [GRL: Efficient and Explicit Modelling of Image Hierarchies for Image Restoration](/papers/2303.00748): a transformer whose layers run window attention, anchored stripe attention and a channel-attention convolution in parallel; reports Gaussian colour denoising at three sizes, alongside six other restoration tasks.
