A couple of comments in my previous entry about noise mentioned GREYCstoration, an opensource software that aims to bring the same quality of denoising than NoiseNinja. It is available either as a Gimp plugin or as a command line utility.
So let’s take a look at this program and see what we can get out of our example image.
GREYCstoration has quite a few options to tweak around as can be seen on their user’s manual.
The Gimp plugin
Using GREYCstoration as a Gimp plugin allows to check what the parameters do (in the preview) and find the optimal ones. Here is what the plug-in window looks like:
In my cases, I didn’t need to tweak a lot, I just changed the Noise scale to 5.0 and choosed to use the Runge Kutta algorithm (I decided it looked a tad better with it). The output quality is good, although the undifferentiated action on chroma and luminance noise gives this water-colored washed out output, which I don’t like very much:
Command line for 16bits
From there, I decided to take my parameters into the command line version, which supports 16bits treatment. The equivalence between the plug-in and the command line version are straightforward:
strength :: -dt
contour preservation :: -p
anisotropy :: -a
noise scale :: -alpha
geometry regularity :: – sigma
spacial step :: -dl
angular step :: -da
approximation :: -fast
iterations :: -iter
interpolation algorithm :: -interp
so my command was:
greycstoration -restore ufraw_0.tif -bits 16 -o test.tif -dt 60 -p 0.7 -a 0.3 -alpha 5 -sigma 2.3 -dl 0.8 -da 30 -fast true -iter 1 -interp 2 -sdt 0
the -sdt 0 bit was to ask GREYCstoration not to do any sharpening on my image.
The processing to approximately for ever and a day to complete. GREYCstoration opens a windows with your image in it and when the processing is done, click on the window and press “S” for save. Check that the result image (test.tif in this case) is saved and then “Q” will quit. The result is the same image than in The Gimp but in 16bits precision.
What about luminance noise?
Call me crazy (if not already done) but I much rather like some luminance noise left than a water-colored image. In talking to the maintainer about my taste for luminance noise, he added an option to differentiate treatment on chroma vs luma noise. You can do that by using the -cbase 1 (0=RGB, 1=YCrCb) -crange 1,2 (0 is luma noise which we want to preserve). By the way, this options is currently only working in the command line version. The result is good, although it is possible to do better:
To get the “better option”, I opened the original image in The Gimp, desaturated it (using Luminance) and picked “color to alpha” to have the white parts of the image transparent. I saved that as PNG – I have to do this part in The Gimp since I haven’t found the “color to alpha” or equivalent in Cinepaint.
I opened the two files (PNG and denoised one) in Cinepaint and added the PNG as a new layer on top of the denoised file – with a transparency value of 0.60. I flattened the image.Because the noise channel makes the whole image a bit darker, I tweaked the curve to give more light in the darkest parts of the image since they are the most affected by the luminance noise that was re-added.
I am really happy with the final result:
Compared to NoiseNinja:
It is good to see that OSS delivers a very good result, comparable to what commercial software offers. However (and as often) it is lacking a bit of polish as it takes quite some time and more operations to get that result. I am however talking with David Tschumperlé (the author of GREYCstoration) to see if there is a way to automate “my” denoising steps.
Noise is rarely a problem for my images so I can very happily live with GREYCstoration if I need denoising. Because of its command line nature, it can be integrated easily in a batch processing of several images with the same noise characteristics.
By the way, David Tschumperlé is looking for a maintainer for The Gimp GREYCstoration plugin, so if you have the right skills and motivation, get in touch with him.