Mingyang Song

Digital Camera Noise Synthesis

What a camera’s grain actually looks like — measured, and put back on your own photographs.

Playground

Sensor noise is not the white Gaussian speckle that denoising papers used to assume. It is coloured — brighter in the shadows than in the highlights, unequal across R, G and B, and correlated between neighbouring pixels by the camera’s own processing. Pick an image below and it is regrained as one of five smartphones at one of fourteen ISO levels, then drag the divider to compare against the clean original.

What runs here is not the network. The generator is conditioned on camera and ISO and trained adversarially; probing it as a black box reduces its behaviour to two measurable things: how loud the grain is at each clean intensity, and how strongly neighbouring pixels agree, and those are what this page ships: 70 presets of summary statistics, about 180 KB of numbers.

or drop / paste an image — nothing is uploaded

Measured preset

Loading parameters…

Choose an image, or hit Sample.

Synthesising grain…

Every preset is reproduced exactly as measured — there is nothing here to dial in, so what you see is the model’s own answer for that camera at that ISO. Grain ×4 shows the noise field on its own, amplified four times about mid-grey; Seed draws a different realisation of the same distribution.

What the charts show

Both charts redraw for the selected preset, so they are the numbers behind whatever is on the canvas above — change camera or ISO and watch them move.

Intensity vs noise level

Noise standard deviation as a function of clean pixel intensity, per colour channel. Non-monotonic: grain peaks in the shadows-to-midtones and falls off toward the highlights.

Table view

Spatial correlation

Correlation between grain values at increasing pixel distance. Above zero means neighbouring pixels vary together — the grain clumps rather than being pixel-independent.

Table view

The model

nc = kc ∗ ( σc(Ic) · wc )     noisy = clip(I + n, 0, 1) w is unit Gaussian noise, correlated across channels by a 3×3 Cholesky factor; σc is a 17-knot lookup evaluated at the clean intensity; kc is a 9×9 symmetric kernel supplying the spatial correlation, normalised so that Σk² = 1 — convolution then preserves exactly the variance the curve asked for.

Both ingredients are plotted above, and neither is what the textbook model would predict: the curve is not affine in intensity, and the kernel is not a blur. The paper is where they are derived and evaluated.

Citation

📄 A Generative Model for Digital Camera Noise Synthesis
arXiv:2303.09199 · PDF

Reference format
Mingyang Song, Yang Zhang, Tunç O. Aydın, Elham Amin Mansour, and Christopher Schroers. 2023. A Generative Model for Digital Camera Noise Synthesis. arXiv:2303.09199 [cs.CV]. https://arxiv.org/abs/2303.09199
BibTeX
@article{song2023generativecameranoise,
  author  = {Song, Mingyang and Zhang, Yang and Ayd{\i}n, Tun\c{c} O. and Amin Mansour, Elham and Schroers, Christopher},
  title   = {A Generative Model for Digital Camera Noise Synthesis},
  journal = {arXiv preprint arXiv:2303.09199},
  year    = {2023},
  url     = {https://arxiv.org/abs/2303.09199}
}

Citing this page

The playground is not part of the paper — the parametric model, the 70 measured presets and this implementation were made for it. If those are what you used, please cite the page alongside the paper rather than instead of it.

BibTeX
@misc{song2026grainplayground,
  author       = {Song, Mingyang},
  title        = {Digital Camera Noise Synthesis: An Interactive Camera-Grain Playground},
  year         = {2026},
  howpublished = {\url{https://miya9756.github.io/mingyang-song.github.io/projects/grain/}},
  note         = {Accessed: 2026-07-28}
}

Plain BibTeX has no entry type for a web page, so one goes in as @misc with the address in howpublished; \url{} needs \usepackage{hyperref} or \usepackage{url} in your preamble. On biblatex you can use the real @online type instead, with separate url and urldate fields. Either way, set the access date to the day you actually visited.

Datasets

The noise model behind the presets was trained on an open-source smartphone-noise dataset, and the sample photograph comes from a standard test suite. Please cite the original authors:

SIDD — real clean/noisy smartphone pairs; the source of every preset above (G4, GP, IP, N6 and S6 are its five cameras).
Abdelrahman Abdelhamed, Stephen Lin, and Michael S. Brown. 2018. A High-Quality Denoising Dataset for Smartphone Cameras. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR).

Kodak Lossless True Color Image Suite — the Sample image is a crop of kodim16, long used as a reference image for image-processing work.