skip to main content

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:

  1. Raw processing bit depth
  2. Output file formats and bit depths
  3. White balance options
  4. Ways to track and avoid clipped pixels
  5. 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.

Comparing algorithms

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

Test images needing raw file repair.
  • Left: Pinhole flower image: 15-second exposure, high ISO (and still 2 stops underexposed) with lots of noise and lots of hot pixels. Of course in this small image you can't actually see the hot pixels. But the locations of the more obvious hot pixels are indicated by the white circles; the magenta circle shows the location of the most problematic clump of hot pixels (Photivo couldn't remove all of them).
  • Right: Crop from a low ISO, only slightly underexposed daylight photograph of an Industrial building, showing chromatic aberration along the door frame, obvious even in this small image.
  • My testing and evaluation were done on the "direct from the raw processor" images. For display on the web, the very underexposed Pinhole flower image was given +1.5 additional stops Levels correction in Gimp, plus curves were used to brighten the midtones even further. The Industrial building image was given a small Levels adjustment.

    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.
      1. RawTherapee's "Hot/Dead pixel filter" is either on or off, with no user settings.
      2. 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.
      1. The slider range is from 0.000 (completely off) to 1.000 (full strength).
      2. 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.
      3. 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:
      1. 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.
      2. 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.
      3. 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.
      4. 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.
    100% magnification crop from the Pinhole flower image, showing the difficult to remove hot pixel from the upper left corner of the image. My floating point dcraw doesn't have any raw file repair options, so the dcraw crop (top row) shows the hot pixels. Photivo (second row) missed the brightest hot pixel. Darktable and RawTherapee (third and fourth rows) both did a good job of removing the hot pixels.

    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:

    100% magnification crop showing chromatic aberration in the the upper right corner of the Industrial building's metal door frame.

    It's not easy to tell from the crop, but the grayer and brighter portions of the white metal door frame are at right angles to each other. The floating point dcraw version shows the uncorrected chromatic aberrations. Darktable, Photivo, and RawTherapee versions show the results of auto-correcting the chromatic aberration. The Darktable and Photivo output are essentially identical. The RawTherapee output retains a hint of blue along the transition from the brighter sunlit interior portion and the grayer outer portions of the door frame.

    Chromatic aberration repair sometimes has the unwanted side effect of messing up the central portions of the repaired image:

    These 100% crops are from some bright yellow lettering on a big metal sign in the center of the image (the sign isn't shown in the Industrial building crop at the beginning of this section).

    The floating point dcraw rendering (extreme left) isn't corrected for chromatic aberration. It shows neutral black-to-yellow gradations from the central portion of the black lettering to the yellow background. Compared to the floating point dcraw rendering, the Darktable, Photivo, and RawTherapee rendering show increasing amounts of a greenish discoloration to the top and right of the black lettering. The greenish color is an artifact caused by automatic chromatic aberration correction.

    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

    Like

    1. 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.
    2. 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:

      Exporting as OpenEXR means you don't have to worry so much about getting the exposure compensation exactly right.
      1. Top row: There are no blown pixels in the original raw file. After opening the raw file with Darktable, I deliberately added 2 stops of positive exposure compensation. Exporting as a 16-bit integer file would have left the interpolated image with irretrievably blown highlights. Not so with 32-bit floating point OpenEXR output.
      2. Bottom left: Upon opening the OpenEXR file with Gimp 2.9 from git, the image looks drastically overexposed, with lots of blown pixels.
      3. Bottom right: Because the OpenEXR file format can carry RGB values that are less than 0 and greater than 1, a Levels correction in Gimp restored all the seemingly blown pixels.

      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.

    Dislike

    1. 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.

    2. 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).

    3. 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.
    4. 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.

    5. 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.
    6. 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

    Like

    Dislike

    RawTherapee user interface

    Like

    1. 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.

    Dislike

    1. 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.

    Pixel peeping

    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.

    Test images shot in direct sunlight: Left: Apple Orchard; Right: Virginia Creeper.

    Both images were shot in direct sunlight on a very clear day (early afternoon for the Apple Orchard image, very early morning for the Virginia Creeper image). Both images have reasonably saturated colors in objects that are crisply focused (blades of grass, leaves, berries). These are low ISO, properly exposed images with a full dynamic range from deep shadow all the way up to specular highlights that are just barely clipped.

    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.

    Conclusion

    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:

    1. 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.

    2. Demosaicing:
      • 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.
    3. 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.
    4. 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.
    5. 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.