After a little break from our presentation of new Rawstudio features in v2.0, we continue from the last entry about Sharpening to Noise Reduction.
If sharpening is an art, Noise Reduction is even more so – and even more controversial. Let me make something clear – this filter is not intended to be noise removal, but noise reduction. This is a very important distinction when looking at this working with this tool. If your intention is to remove the noise from the image, you will most certainly destroy the image, and for that you will have to go somewhere else.
I’m personally quite ambivalent about noise reduction – you cannot remove noise without also removing details, so it was important for me to find an algorithm that allowed to remove noise while still retaining detail. A lot of filters use a threshold-based approach to distinguish between details and noise. I often find this approach is quite displeasing, since it often creates to distinct edges between detail and “flat” areas.
An important aspect was that we wanted to include a Noise Reduction tool, that was both powerful and easy to control. We decided that two controls were needed for the best user control, “ordinary” (light) de-noise and colour de-noise. We have found that the amount of de-noising each user prefer in these two areas differ a lot, so we had to have two sliders. All other internal filter settings are calculated from these values.
In the video world, I come from there is about 50 noise reduction filters, just for the single app, I know so very well. I even started out my video programming adventure by programming a noise reduction filter. As noted in the sharpening part above, we chose to base our work on the FFT3DFilter, which provides one of the best 2D noise removal available, when the time-dimension filtering is turned off.
The noise reduction is done in a gamma 2.0 corrected YCbCr color space, converted from Prophoto RGB, so we do the de-noising separately for colour and light, which is very common for photo development software. Visually colour noise is often more disturbing, since it gives “wrong” colours for a given area. Light noise is visually less disturbing, and looks a lot more like ordinary photo grain, which we are lot more used to looking at. Here are some examples of different noise types:
We use FFTW3 for the actual FFT-transformation, and use SSE/SSE2/SSE3 code for filtering the image. The de-noiser is of course fully multithreaded. There are special 64bit versions of the heavy calculations, so it should be even faster if you run on a 64 bit system. The filter calculates noise removal and sharpening in blocks of 128×128 pixels, but with a 24 pixel overlap of each block, so we calculate a block of 128×128 pixels for each 80×80 output block. We also mirror the borders to avoid artifacts here.
Let’s look at a few real-world examples:
Here we see a typical “smart blur” filter. Details killed in the skin, colour artifacts still remain. You can of course convert your image to Lab or similar, and do separate denoising for colour and light.
A more “extreme” example:
Some of you might notice that vertical banding artifacts from the camera becomes a bit more visible, but overall the noise is a lot less dominating. The image has perhaps had a tiny bit too much noise removed, but again that is up to your personal taste.
We feel that we have found a good solution that will work for a lot of different situations, where you want to reduce the noise of you camera, when you are forced to turn up the ISO to get the shot you need. We think we allow for noise reduction with sacrificing the quality of your photos by introducing disturbing artifacts.
Next time we will have a look at perhaps the biggest single feature in the new Rawstudio 2.0: Our completely re-written Colour management engine using DNG Color Profiles (DCP).