Noise Reduction
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.
Typical threshold-based artifacts. Large coloured 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:
This is an indoor shot, with ordinary camera noise. Click the image to see in 100% size
This is from another RAW converter, that does de-noising by killing details. We see blurred details (Crop, WB and Saturation does not match completely, but you get the picture)
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.
This is what Rawstudio does, adjusted to my liking. Colour noise is mostly done, a bit of the light noise is removed, but not so much that details are killed.
A more “extreme” example:
This is an ISO6400 shots a gentle sharpen has been applied, but otherwise untouched. Click for 100% view.
This is the same image, with the same amount of sharpening applied, but also with de-noise applied.
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).
Very nice indeed.
Now, next what you could do is attacking the pattern noise Canons and Pentaxes do – maybe one could use the dark pixels of the edges or if not, FFT could certainly be used.
Then the Pentax K20 blue/red-hideous thing of the top/bottom areas would be nice to get rid of properly (http://forums.dpreview.com/forums/read.asp?forum=1036&message=35434875)
For Canon we plan to use the extra black border in a future release for per-line normalisation and/or blacklevel adjustment.
As you may know all Canon (DSLR) cameras has a part of its sensor blocked from receiving any kind of light. Usually this information is used to asses per-line blacklevel. This should eliminate the line artifacts seen in High ISO images.
I will also look into doing the same for Pentax cameras, if they have the information in their RAW files. I don’t know why other manufacturers have not copied this method.
Great stuff, I think you’re on the right track! You can leave the luminance noise for the editor, or implement its reduction as a separate feature – like in my old version of ACR I used to use before I switched to Linux. I also hope you optimise the code so the denoising doesn’t slow down the interface. In this regard, the ACR was wonderful, and nothing I have come across on Linux comes close in speed. A very well known, proprietary Linux RAW converter is very poor in this regard, even on a much faster computer than the Mac I used to run ACR on. So I very much hope you’ll get this right and noise reduction won’t slow things down.