forgive me for the lack of knowledge on this, but I'm hoping someone can point me in the right direction.
I'd like to know the best technique for adding noise to RGB channels individually so that magnitude can be varied individually.
What algorithm of noise is the most aesthetically pleasing, or organic looking?
Many thanks.
Answer
Film grain is visible in images and is due to the "analog pixels" that make up the film emulsion. These are crystals of silver halides at various sizes, the volume of which determines the film's "speed".
The larger the crystals covering the film's surface the higher the chance they will capture photons, the lower the spatial resolution they allow to be recorded and vice versa. So, a 400 ASA film is more likely to be used in low light conditions (e.g. natural light in night scenes) than a 50ASA film. However, during development, the 400ASA film will have visibly more "grain" and consequently its spatial resolution will be low.
It is impossible to accurately control the size and distribution of crystals on the film emulsion. That is, "accurately" with respect to the fine control we have with CCD sensors. But they are very small and at huge numbers over a film surface and this is why film resolution is unparalleled.
And that is where the "aesthetic pleasure" of the "noise" is derived from: The volume and spatial distribution of tiny little crystals.
To cut a long story short, if you want to add realistic grain to a digital image, shoot a grey card at varying exposures, develop the film (without adjusting for exposure at the developing machine), scan the negative and then, literally, add it over the top of an image, possibly with a bit of "multiply" to modulate your original image.
Now, obviously, the grey card will produce a grey image. An ideal grey image has identical values in the R,G and B channels. But depending on what you are simulating, that might not be the case. This type of film (B&W) has a single photographic emulsion and responds to total light flux, but this type of film has multiple coatings and therefore it is more likely to "add" some coloration. In other words this second one might have a different "character". In fact, different processes used by different manufacturers lead to films with different characteristics anyway. You will know an ektachrome picture when you see it for example. And this includes the characteristics of the noise.
OK, so the other question is "How do I simulate this?".
Well, if you have to, then the key idea is to take some noise distribution, apply a low pass filter over it and then take this as your "noise overlay". Varying the parameters of the distribution and low pass filter you will achieve different qualities of noise (but this is not "film grain").
So, take a uniform random distribution image, pass it through a low pass convolution matrix (or blurring filter) and you have some noise overlay.
A more aesthetically pleasing result might be achieved by using a pink noise distribution. You can generate this very easily via filtering your uniform noise image (from above) with a spatial filter that has a response of $\frac{1}{f}$, where $f$ is the spatial frequency. This is close to the physical process, from the point of view of the distribution of the volume of the crystals on the film. In other words, fast film, larger crystals, film more sensitive but lower spatial resolution, i.e. higher spatial frequencies (small objects) less likley to be recorded by the film (that is, the top end of $\frac{1}{f}$). But this is not film grain.
Other distributions may be used similarly with different results. If you want to simulate some additional coloration (as noted above), of course, you will need to multiply the R,G,B components of the grayscale noise overlay with different factors depending on what you are trying to achieve (e.g. to simulate tinting).
Hope this helps.
No comments:
Post a Comment