Analog grain simulation on grayscale images, inspired by http://www.ipol.im/pub/art/2017/192/
Although the dynamic range of analog film cannot be matched, its texure can be mimicked in post-production. However the usual noise distributions don't render film noise (grain) convincingly:
We add white circles to fixed-size black patches (5x5), preserving the mean of the original pixel:

The code can be run in noise_image.py. The mix parameter allows the user to control the intensity of the grain, there is a live preview in the notebook.
The whole process takes about 30s.












