A Review of Free/Libre Open Source Raw Processors, Part 2
This article compares interpolated output from Darktable, Photivo, RawTherapee, and my floating point version of dcraw. All post-interpolation image enhancements are disabled, so the comparisons focus strictly on the raw processors' capabilities qua raw processor. In addition, there are notes on the Darktable, Photivo, and RawTherapee user interfaces.
Written November 2013.
Reviewing raw processors
My personal goal for writing this review was to see if any of today's high-powered, multi-functional free and open source raw processors might be a suitable replacement for my command-line only floating point version of dcraw. What I'm looking for is radiometrically correct output that's at least as good as what my floating point dcraw produces, plus the convenience of a gui and also access to basic raw file repair options (eg dark frame subtraction, chromatic aberration repair, hot pixel repair) that my floating point dcraw doesn't have.
Part 1 of this review of free and open source raw processors examines Darktable, the digiKam raw processor, Photivo, RawTherapee, Rawstudio, UFRaw, and my floating point dcraw "by the specs", looking at:
- Raw processing bit depth
- Output file formats and bit depths
- White balance options
- Ways to track and avoid clipped pixels
- Options related to producing radiometrically correct output
Based on my findings in Part 1, I eliminated the digiKam raw processor, Rawstudio, and UFRaw from further consideration. As a very important aside, please don't conclude that these three raw processors are not excellent raw processors, because in fact they are. They just don't have the feature set that I want. The feature set that you want from a raw processor might well be completely different from the feature set that I want.
Part 2 of my raw processor review (this page) compares actual interpolated output produced by the following four raw processors:
- Darktable (1.2.3)
- Photivo (pre20121212)
- RawTherapee (4.0.11)
- my floating point version of dcraw, which includes the AMAZE interpolation algorithm; all references to dcraw on this page refer to my floating point version of dcraw
This page was written in November 2013 and updated in February 2014. Open source software changes rapidly, so some or all of the results presented here might not be valid for future releases of Darktable, Photivo, and RawTherapee. As always, you should make your own tests and draw your own conclusions.
Photographer John Widdall wrote to me about a similar review of raw processors that he recently wrote. As we've covered an overlapping set of raw processors and we have different cameras, I suggested to him that we both present screenshots showing how the various raw processing algorithms perform so that readers could have an idea of how the different raw processing algorithms handle images from different cameras.
John already put comparison images up on his website. And he's included very valuable insights into how a camera's lens and sensor affect the resulting raw file. So do read his excellent raw processor reviews! And I will try really hard to get my own comparison images up ASAP.
Automatic repair of hot/dead pixels and chromatic aberration
Sample raw files needing repair
Automatic hot and dead pixel removal
Darktable, Photivo, and RawTherapee have very different user interfaces for repairing hot and dead pixels. In order from the least to the most complicated interface:
- RawTherapee has a check box labeled "Hot/Dead pixel filter", located on the Demosaicing tab.
- RawTherapee's "Hot/Dead pixel filter" is either on or off, with no user settings.
- Checking the RawTherapee "Hot/Dead pixel filter" box eliminated all visibly hot pixels in the Pinhole flower test image.
- Photivo has a slider labeled "Badpixel reduction" located on the Camera tab.
- The slider range is from 0.000 (completely off) to 1.000 (full strength).
- I had to push the slider to 0.800 before I saw any hot pixels disappear. So for the Pinhole flower test image I set the "Badpixel reduction" slider all the way to 1.000, full strength.
- Photivo eliminated most of the hot hot pixels, but didn't quite remove all of the clump of hot pixels indicated by the magenta circle.
- Darktable's "hot pixels" module is located in the "correction" group and has several user-settable input sliders and boxes:
- The "threshold" and "strength" sliders from 0.0000 to 1.0000. A threshold of 1.000 deactivates the hot pixels module, regardless of the strength.
- In addition to the sliders there is a checkbox labeled "detect by 3 neighbors". There is also a checkbox labeled "mark fixed pixels", which draws a short bright line through the hot pixels that will be repaired, and, as a very nice additional touch, a readout tells you how many pixels are fixed using the current settings.
- With the "detect by 3 neighbours" box unchecked, there was one clump of hot pixels in the Pinhole flower image (circled in magenta in the image above), that Darktable mitigated but did not completely fix, even with the strength slider at the maximum and the threshold at the minimum.
- Checking the "detect by 3 neighbours" box, setting the threshold to 0.000, and setting the strength to around 0.650 succesfully repaired that last clump of hot pixels, along with 13,513 other hot pixels. Less extreme settings repaired correspondingly fewer hot pixels. It will take further experimenting with a variety of raw files to determine how useful having so many hot pixel repair user options is in practice.
At some point it gets really hard (visually and mathematically) to tell hot pixels from noise. The Pinhole flower raw file gets close to that line, but I think doesn't cross it, so it makes a good hot pixel test image. The hope, of course, is that the hot pixels are all detected and repaired, without adversely affecting the surrounding pixels. It seems to me that the Darktable and RawTherapee renderings are very slightly more faithful to the grainy, noisy floating point dcraw output (except, of course, without the hot pixels) than the perhaps slightly smoother Photivo rendering; the Pinhole flower needs noise reduction, but noise reduction in theory is separate from hot pixel repair.
Automatic chromatic aberration repair
One problem with raw processor reviews is that the reviewer necessarily only uses a small number of images (time being limited), and possibly only from one camera. I only have one lens that shows chromatic aberration, and as my camera is not full frame and my lens is designed for a full frame camera, I just don't have much of a chromatic aberration problem.
However, I solicited a test image from a newer, full-frame camera, shot with a lens that has a serious problem with chromatic aberration. The results were quite different from what is presented below. For this full-frame camera+lens RawTherapee did a much better job of removing chromatic aberration, and in fact Darktable and Photivo made a mess of it. I'll be posting test images soon.
The crops below (from my own camera, not from the full frame camera with the lens with the serious chromatic aberration problem) are from the Industrial Building image shown above. This image suffers from chromatic aberration, especially evident along the door frame in the uncorrected floating point dcraw output:
Chromatic aberration repair sometimes has the unwanted side effect of messing up the central portions of the repaired image:
Automatic aberration correction seems iffy at best, regardless of which raw processor you might use. If I were making a print of the Industrial building, I'd use the Darktable or Photivo automatically corrected output for the edges where the chromatic aberration is obvious, and blend in the uncorrected image for the central parts of the image.
Noisy raw files (not yet written!)
Is there really a 32-bit floating point advantage? (not yet written!)
User interface likes and dislikes (in progress)
How well does a raw processor render a raw file? How well does it handle raw file repair options like chromatic aberration correction or hot pixel repair? These kinds of questions can be given reasonably objective answers.
The question of useability is much more subjective and is mostly determined by the user interface. What one person finds ideal, another person might find completely unworkable.
This article is a work in progress and there are a lot more notes below on Darktable than on Photivo and RawTherapee. In actual fact, I use both Darktable and RawTherapee for image processing, pretty much equally, depending on the image.
Darktable user interface
- I really appreciate the fact that Darktable has a panel that shows exactly what modules are in the active pipe. It takes a lot of clicking to make sure the Photivo and RawTherapee settings are exactly what I want them to be.
- Gimp 2.9 from git works nicely with Darktable's 32-bit floating point OpenEXR output
I don't like clipped pixels. But it's nice to have the interpolated image file as bright as possible, without causing additional pixels to clip. So for me, one fairly time-consuming part of processing a raw file is (or was!) getting the exposure compensation exactly right.
With Darktable's 32-bit floating point OpenEXR output, getting the exposure compensation right is not so important, IF you are planning to open the interpolated image with an image editor that supports 32-bit floating point processing and the OpenEXR file format:
Darktable's 32-bit floating point OpenEXR output opens up interesting possibilities for image editing, assuming you also have an image editor that can handle OpenEXR images and doesn't automatically clip image values that are less than 0 or greater than 1. Gimp 2.9 from git happens to fit that description. One immediately obvious benefit of combining Darktable OpenEXR output with Gimp from git as your image editor is you don't have to worry so much about getting the exposure compensation exactly right while working on your raw file. Another benefit, for me at least, is several fewer clicks when opening an image for editing with Gimp, because the OpenEXR output is already at 32-bit floating point precision.
- By default Darktable has a very dark color scheme. Many people love dark themes, but the stark contrast between the dark background and the white lettering and colorful icons actually hurt my eyes.
I don't like the default Darktable dark color scheme, but I figured out how to change it: I opened the file ".config/darktable/darktable.gtkrc" and replaced all occurences of "#212121" with "#494949". It's a ridiculously small change but it made a huge difference to my comfort level. Now that the background is a lighter shade of gray, I think the Darktable interface is quite attractive.
- It's not obvious how to select a custom camera input profile or output color space. It's also not obvious how to select your monitor profile, if you don't have it installed as the system monitor profile.
To select a custom ICC profile, first you must copy it to the right location. Darktable only looks in two places for ICC profiles: ".config/darktable/color/in" and ".config/darktable/color/out". You have to restart Darktable before it will find new profiles, but again, it only looks in these two folders, which is a very good thing, imho (there are a lot of ICC profiles on my computer, most of which are not relevant for raw processing, so it's nice to have a short, customized list to look through when selecting a profile).
- I don't like having to switch to the lighttable tab to save a processed image. And when trying to save an interpolated image file, I find the "export selected" dialog hard to use.
- Out of the box, Darktable has a lot of active-by-default raw file repair and image enhancing modules. It's not obvious how to disable them and keep them disabled.
A little poking around the Darktable user's manual plus a couple of questions to the Darktable user forums produced answers to the question of how to only activate the modules I really want to use. The moral of the story (and this goes for Rawtherapee and Photivo as well): don't judge a raw processor until you are very comfortable with the interface.
- The same setting controls the width of the lighttable settings panel and the darktable settings panel. If width is wide enough for the lighttable settings panel (wide enough to comfortably name a file upon export), the darktable settings panel takes up too much screen real estate.naming is a pia.
- Is there a way to show a file name on the light table view? When I'm actively working on an image I might have ten or more small variations of a file all in the same folder, and without the file name it's impossible to tell one from the other.
Photivo user interface
RawTherapee user interface
- Generally speaking, I find the RawTherapee user interface to be intuitively obvious and immediately comfortable. By comparison, the Darktable and Photivo interfaces required (and still require) some real effort on my part to get comfortable enough to write this second part of my raw processor review.
RawTherapee seems to require rechoosing my custom preset every time I open a raw file, and also seems to require rechoosing my input profile.
Update: the answer was right under my nose! As a kind person in the RawTherapee forum pointed out, "Preferences > Image Processing > Default Image Processing Parameters". The moral of the story is you really can't make an informed judgement about a raw processor without first becoming knowledgeable about and comfortable with the user interface.
One problem with writing anything about open source software is it changes really fast. The Rawtherapee code has been patched to fix the problem illustrated below. This is only a problem when using UniWB or other white balance that is far from the "as shot" white balance. Adding screenshots new pictures showing the patched Rawtherapee 4.12 results is on my to-do list. The short answer is RawTherapee 4.12 doesn't have this problem and the 4.12 interpolation results closely match the Darktable, Photivo, and floating point dcraw results.
I was pleasantly surprised to find that at 400% magnification, the Darktable and Photivo renderings are visually indistinguishable from my floating point dcraw rendering. At higher magnifications, the Photivo rendering is slightly different along the edges. It isn't until I push the magnification all the way to the ridiculously pixel-peeping 1600% that the Darktable and floating point dcraw renderings show any visible (and still insignificant, if there even is such a thing as a signficant difference at 1600% magnification).
The only time differences that are visible only at extreme magnification makes a real difference is if you plan on viewing images at extreme magnification. If you are blowing up a crop from a larger image, maybe it matters. If all you are doing is pixel-peeping . . . hmm, well, being a pixel-peeper myself, maybe we should both find better ways to spend our time.
Darktable is my new raw processor of choice for two reasons: Darktable output is almost a pixel for pixel match to the output from my floating point dcraw, except that Darktable allows outputting a 32-bit floating point OpenEXR image and Darktable provides repair options that my floating point dcraw doesn't have.
I also use RawTherapee, partly because I'm very comfortable with the RawTherapee user interface and partly because for some images RawTherapee does a better job than Darktable. I'll be adding example images for both raw processors as I find the time.
I don't use Photivo very often. I'm not comfortable with the user interface and so far I haven't found any Photivo-specific raw processing advantage that sways me to use Photivo enough to get comfortable with the user interface.
Three points to remember: First, all the raw processors considered on this page can produce excellent results. Second, you won't get the best possible results from any raw processor until you take the time to become comfortable with and knowlegeable about the user interface. Third, Darktable, Photivo, and RawTherapee all do a whole lot more than just interpolate and repair raw files. Each of these raw processor also has a vast and varied array of post-interpolation image enhancing algorithms, none of which are covered by this review.
Notes on comparing output from four very different raw processors
Each test raw file was processed with my floating point dcraw, Darktable, Photivo, and RawTherapee as follows:
- White Balance:
I matched the white balance RGB multipliers exactly for dcraw, Darktable, and Photivo. I had to rely on presets for RawTherapee because RawTherapee doesn't provide RGB multipliers as a white balance option.
- The highlight recovery mode was set to clip.
- The interpolation algorithm was set to AMaZE and except as explicitly noted otherwise, all other raw processing options were disabled. Likewise, all post-interpolation image enhancing algorithms were disabled.
- Exposure compensation: Equivalent exposure compensation setting were used for all four raw processors, to the extent possible; here are the equivalent settings for zero raw exposure compensation:
- Darktable: exposure/exposure=0.00
- Photivo: Camera/Manual WP left at the default value.
- RawTherapee: Raw White & Black Points/White Point Linear Corr. Factor=1.00
- My floating point dcraw automatically adjusts exposure compensation based on the image RGB values so as to avoid blowing any pixels that weren't already blown in the raw file. I adjusted the dcraw output in Gimp 2.9 (high bit depth) from git using levels to make it match output from the other three raw processors.
- Input, output, and working space profiles:
- My floating point dcraw only outputs raw color. A camera profile must be assigned upon opening the interpolated image.
- For Photivo and RawTherapee I set the input and output profiles to a linear gamma version of sRGB to avoid issues with clipping from bounded mode ICC profile conversions, then assigned my custom camera profile upon opening the interpolated image.
- For the sake of consistency, for Darktable I also set the input and output profiles to a linear gamma version of sRGB and assigned my custom camera profile upon opening the image. However, Darktable doesn't need this "work around" because Darktable doesn't by default do any bounded mode ICC profile conversions.
- For Photivo and RawTherapee, I set the working space to ProPhotoRGB. Darktable doesn't ask you to pick a working space.
- Output image bit depth and file format: For all four raw processors I output the interpolated image at the highest bit depth that was offered:
- Darktable was set to output 32-bit floating point OpenEXR images.
- Photivo was set to output 16-bit pngs because at this point in time Gimp 2.9 from git is unable to open Photivo's tiffs.
- RawTherapee was set to output 16-bit tiffs.
- My floating point dcraw only outputs 16-bit tiffs.
After interpolating a test raw file with all four raw processors, I opened the interpolated image files with Gimp 2.9 from git (which offers 32-bit floating point image editing), assigned my custom camera input profile, converted the 16-bit dcraw, Photivo, and RawTherapee images to 32-bit floating point, and pulled the images into a multi-layer Gimp xcf file.