Normal view

Users Guide to High Bit Depth GIMP 2.9.2, Part 2


Users Guide to High Bit Depth GIMP 2.9.2, Part 2

Part 2: Radiometrically correct editing, unbounded ICC profile conversions, and unclamped editing

This is Part 2 of a two-part guide to high bit depth editing in GIMP 2.9.2 with Elle Stone. The first part of this article can be found here: Part 1.

Contents

  1. Using GIMP 2.9.2 for radiometrically correct editing
    1. Linearized sRGB channel values and radiometrically correct editing
    2. Using the “Linear light” option in the “Image/Precision” menu
    3. A note on interoperability between Krita and GIMP
  2. GIMP 2.9.2’s unbounded floating point ICC profile conversions (handle with care!)
  3. Using GIMP 2.9.2’s floating point precision for unclamped editing
    1. High bit depth GIMP’s unclamped editing: a whole realm of new editing possibilities
    2. If the thought of working with unclamped RGB data is unappealing, use integer precision
  4. Looking to the future: GIMP 3.0 and beyond

Radiometrically correct editing

Linearized sRGB channel values and radiometrically correct editing

One goal for GIMP 2.10 is to make it easy for users to produce radiometrically correct editing results. “Radiometrically correct editing” reflects the way light and color combine out there in the real world, and so requires that the relevant editing operations be done on linearized RGB.

Like many commonly used RGB working spaces, the sRGB color space is encoded using perceptually uniform RGB. Unfortunately colors simply don’t blend properly in perceptually uniform color spaces. So when you open an sRGB image using GIMP 2.9.2 and start to edit, in order to produce radiometrically correct results, many GIMP 2.9 editing operations will silently linearize the RGB channel information before the editing operation is actually done.

GIMP 2.9.2 editing operations that automatically linearize the RGB channel values include scaling the image, Gaussian blur, UnSharp Mask, Channel Mixer, Auto Stretch Contrast, decomposing to LAB and LCH, all of the LCH blend modes, and quite a few other editing operations.

GIMP 2.9.2 editing operations that ought to, but don’t yet, linearize the RGB channels include the all-important Curves and Levels operations. For Levels and Curves, to operate on linearized RGB, change the precision to “Linear light” and use the Gamma hack. However, the displayed histogram will be misleading.

The GIMP 2.9.2 editing operations that automatically linearize the RGB channel values do this regardless of whether you choose “Perceptual gamma (sRGB)” or “Linear light” precision. The only thing that changes when you switch between the “Perceptual gamma (sRGB)” and “Linear light” precisions is how colors blend when painting and when blending different layers together.

(Well, what the Gamma hack actually does changes when you switch between the “Perceptual gamma (sRGB)” and “Linear light” precisions, but the way it changes varies from one operation to the next, which is why I advise to not use the Gamma hack unless you know exactly what you are doing.)

Using the “Linear light” option in the “Image/Precision” menu

normal-blend-perceptual-vs-linear-cyan-background
Large soft disks painted on a cyan background.
  1. Top row: Painted using “Perceptual gamma (sRGB)” precision. Notice the darker colors surrounding the red and magenta disks, and the green surrounding the yellow disk: those are “gamma” artifacts.
  2. Bottom row: Painted using “Linear Light” precision. This is how light waves blend to make colors out there in the real world.
normal-blend-perceptual-vs-linear
Circles painted on a red background.
  1. Top row: Painted using “Perceptual gamma (sRGB)” precision. The dark edges surrounding the paint strokes are “gamma” artifacts.
  2. Bottom row: Painted using “Linear Light” precision. This is how light waves blend to make colors out there in the real world.

In GIMP 2.9.2, when using the Normal, Multiply, Divide, Addition, and Subtract painting and Layer blending:

  • For radiometrically correct Layer blending and painting, use the “Image/Precision” menu to select the “Linear light” precision option.
  • When “Perceptual gamma (sRGB)” is selected, layers and colors will blend and paint like they blend in GIMP 2.8, which is to say there will be “gamma” artifacts.

The LCH painting and Layer blend modes will always blend using Linear light precision, regardless of what you choose in the “Image/Precision” menu.

What about all the other Layer and painting blend modes? The concept of “radiometrically correct” doesn’t really apply to those other blend modes, so choosing between “Perceptual gamma (sRGB)” and “Linear light” depends entirely on what you, the artist or photographer, actually want to accomplish. Switching back and forth is time-consuming so I tend to stay at “Linear light” precision all the time, unless I really, really, really want a blend mode to operate on perceptually uniform RGB.

A note on interoperability between Krita and GIMP

Many digital artists and photographers are switching to linear gamma image editing. Let’s say you use Krita for digital painting in a true linear gamma sRGB profile, specifically the “sRGB-elle-V4-g10.icc” profile that is supplied with recent Krita installations, and you want to export your image from Krita and open it with GIMP 2.9.2.

Upon opening the image, GIMP will automatically detect that the image is in a linear gamma color space, and will offer you the option to keep the embedded profile or convert to the GIMP built-in sRGB profile. Either way, GIMP will automatically mark the image as using “Linear light” precision.

For interoperability between Krita and GIMP, when editing a linear gamma sRGB image that was exported to disk by Krita:

  1. Upon importing the Krita-exported linear gamma sRGB image into GIMP, elect to keep the embedded “sRGB-elle-V4-g10.icc” profile.
  2. Keep the precision at “Linear light”.
  3. Then assign the GIMP built-in Linear RGB profile (“Image/Color management/Assign”). The GIMP built-in Linear RGB profile is functionally exactly the same as Krita’s supplied “sRGB-elle-V4-g10.icc” profile (as are the GIMP built-in sRGB profile and Krita’s “sRGB-elle-V4-srgbtrc.icc” profile).

Once you’ve assigned the GIMP built-in Linear RGB profile to the imported linear gamma sRGB Krita image, then feel free to change the precision back and forth between “Linear light” and “Perceptual gamma (sRGB)”, as suits your editing goal.

When you are finished editing the image that was imported from Krita to GIMP:

  1. Convert the image to one of the “Perceptual gamma (sRGB) precisions (“Image/Precision”).
  2. Convert the image to the Krita-supplied “sRGB-elle-V4-g10.icc” profile (“Image/Color management/Convert”).
  3. Export the image to disk and import it into Krita.

If your Krita image is in a color space other than sRGB, I would suggest that you simply not try to edit non-sRGB images in GIMP 2.9.2 because many GIMP 2.9.2 editing operations do depend on hard-coded sRGB color space parameters.

GIMP 2.9.2’s unbounded floating point ICC profile conversions (handle with care!)

Compared to most other RGB color spaces, the sRGB color space gamut is very small. When shooting raw, it’s incredibly easy to capture colors that exceed the sRGB color space.

srgb-inside-prophoto-3-views
The sRGB (the gray blob) and ProPhotoRGB (the multicolored wire-frame) color spaces as seen from different viewing angles inside the CIELAB reference color space. (Images produced using ArgyllCMS and View3DScene).

Every time you convert saturated colors from larger gamut RGB working spaces to GIMP’s built-in sRGB working space using floating point precision, you run the risk of producing out of gamut RGB channel values. Rather than just explaining how this works, it’s better if you experiment and see for yourself:

  1. Download this 16-bit integer ProPhotoRGB png, “saturated-colors.png“.
  2. Open “saturated-colors.png” with GIMP 2.9.2. GIMP will report the color space profile as “LargeRGB-elle-V4-g18.icc” — this profile is functionally equivalent to ProPhotoRGB.
  3. Immediately change the precision to 32-bit floating point precision (“Image/Precision/32-bit floating point) and check the “Perceptual gamma (sRGB)” option.
  4. Using the Color Picker Tool, make sure the Color Picker is set to “Use info Window” in the Tools dialog. Then eye-dropper the color squares, and make sure to set one of the columns in the Color Picker info Window to “Pixel”. The red square will eye-dropper as (1.000000, 0.000000, 0.000000). The cyan square will eyedropper as (0.000000, 1.000000, 1.000000), and so on. All the channel values will be either 1.000000 or 0.000000.
  5. While still at 32-bit floating point precision, and still using the “Perceptual gamma (sRGB)” option, convert “saturated-colors.png” to GIMP’s built-in sRGB.
  6. Eyedropper the color squares again. The red square will now eyedropper as approximately (1.363299, -2.956852, -0.110389), the cyan square will eyedropper as approximately (-13.365499, 1.094588, 1.003746), and so on.
  7. For extra credit, change the precision from 32-bit floating point “Perceptual gamma (sRGB)” to 32-bit floating point “Linear light” and eye-dropper the colors again. I will leave it to you as an exercise to figure out why the eye-droppered RGB “Pixel” values change so radically when you switch back and forth between “Perceptual gamma (sRGB)” and “Linear light”.

Where did the funny RGB channel values come from? At floating point precision, GIMP uses LCMS2 to do unbounded ICC profile conversions. This allows an RGB image to be converted from the source to the destination color space without clipping otherwise out of gamut colors. So instead of clipping the RGB channels values to the boundaries of the very small sRGB color gamut, the sRGB color gamut was effectively “unbounded”.

When you do an unbounded ICC profile conversion from a larger color space to sRGB, all the otherwise out of gamut colors are encoded using at least one sRGB channel value that is less than zero. And you might get one or more channel values that are greater than 1.0. Figure 11 below gives you a visual idea of the difference between bounded and unbounded ICC profile conversions:

red-flower-clipping-prophoto-to-srgb
Unbounded (unclipped floating point) and bounded (clipped integer) conversions of a very colorful red flower from the original ProPhotoRGB color space to the much smaller sRGB color space. (Images produced using ArgyllCMS and View3DScene).

  • Top row: Unbounded (unclipped floating point) and bounded (clipped integer) conversions of a very colorful red flower from the original ProPhotoRGB color space to the much smaller sRGB color space. The unclipped flower is on the left and the clipped flower is on the right.
  • Middle and bottom rows: the unclipped and clipped flower colors in the sRGB color space. The unclipped colors are shown on the left and the clipped colors are shown on the right:
    • The gray blobs are the boundaries of the sRGB color gamut.
    • The middle row shows the view inside CIELAB looking straight down the LAB Lightness axis.
    • The bottom row shows the view inside CIELAB looking along the plane formed by the LAB A and B axes.
The unclipped sRGB colors shown on the left are all encoded using at least one sRGB channel value that is less than zero, that is, using a negative RGB channel value.

When converting saturated colors from larger color spaces to sRGB, not clipping would seem to be much better than clipping. Unfortunately a whole lot of RGB editing operations don’t work when performed on negative RGB channel values. In particular, multiplying such colors produces meaningless results, which of course applies not just to the Multiply and Divide blend modes (division and multiplications are inverse operations), but to all editing operations that involve multiplication by a color (other than gray, which is a special case).

So here’s one workaround you can use to clip the out of gamut channel values: Change the precision of “saturated-colors.png” from 32-bit floating point to 32-bit integer precision (“Image/Precision/32-bit integer”). This will clip the out of gamut channel values (integer precision always clips out of gamut RGB channel values). Depending on your monitor profile’s color gamut, you might or might not see the displayed colors change appearance; on a wide-gamut monitor, the change will be obvious.

When switching to integer precision, all colors are clipped to fit within the sRGB color gamut. Switching back to floating point precision won’t restore the clipped colors.

As an important aside (and contrary to a distressingly popular assumption), when doing a normal “bounded” conversion to sRGB, using “Perceptual intent” does not “keep all the colors”. The regular and linear gamma sRGB working color space profiles are matrix profiles, which don’t have perceptual intent tables. When you ask for perceptual intent and the destination profile is a matrix profile, what you get is relative colorimetric intent, which clips.

Using GIMP 2.9.2’s floating point precision for unclamped editing

High bit depth GIMP’s unclamped editing: a whole realm of new editing possibilities

I’ve warned you about the bad things that can happen when you try to multiply or divide colors that are encoded using negative sRGB channel values. However, out of gamut sRGB channel values can also be incredibly useful.

GIMP 2.9.2 does provide a number of “unclamped” editing operations from which the clipping code in the equivalent GIMP 2.8 operation has been removed. For example, at floating point precision, the Levels upper and lower sliders, Unsharp Mask, Channel Mixer and “Colors/Desaturate/Luminance” do not clip out of gamut RGB channel values (however, Curves does clip). Also the Normal, Lightness, Chroma, and Hue blend modes do not clip out of gamut channel values.

Unclamped editing opens up a whole realm of new editing possibilities. Quoting from Autumn colors: An Introduction to High Bit Depth GIMP’s New Editing Capabilities:

Unclamped editing operations might sound more arcane than interesting, but especially for photographers this is a really big deal:

  • Automatically clipped RGB data produces lost detail and causes hue and saturation shifts.
  • Unclamped editing operations allow you, the photographer, to choose when and how to bring the colors back into gamut.
  • Of interest to photographers and digital artists alike, unclamped editing sets the stage for (and already allows very rudimentary) HDR scene-referred image image editing.

Having used high bit depth GIMP for quite a while now, I can’t imagine going back to editing that is constrained to only using clipped RGB channel values. The Autumn colors tutorial provides a start-to-finish editing example making full use of unclamped editing and the LCH blend modes, with a downloadable XCF file so you can follow along.

If the thought of working with unclamped RGB data is unappealing, use integer precision

If working with unclamped RGB channel data is simply not something you want to do, then use integer precision for all your image editing. At integer precision all editing operations clip. This is a function of integer encoding and so happens regardless of whether the particular editing function includes or doesn’t include clipping code.

Looking to the future: GIMP 3.0 and beyond

Even though GIMP 2.10 hasn’t yet been released, high bit depth GIMP is already an amazing image editor. GIMP 3.0 and beyond will bring many more changes, including the port to GTK+3 (for GIMP 3.0), full color management for any well-behaved RGB working space (maybe by 3.2?), plus extended LCH processing with HSV strictly for use with legacy files. Also users will eventually have the ability to choose “Perceptual” encodings other than the sRGB TRC.

If you would like to see GIMP 3.0 and beyond arrive sooner rather than later, GIMP is coded, documented, and maintained by volunteers, and GIMP needs more developers. If you are not a programmer, there are many other ways you can contribute to GIMP development.

All text and images ©2015 Elle Stone, all rights reserved.

Happy Birthday GIMP!


Happy Birthday GIMP!

Also, wallpapers and darktable 2.0 creeps even closer!

I got busy building a birthday present for a project I work with and all sort of neat things happened in my absence! The Ubuntu Free Culture Showcase chose winners for it’s wallpaper contest for Ubuntu 15.10 ‘Wily Werewolf’ (and quite a few community members were among those chosen).

The darktable crew is speeding along to a 2.0 release with a new RC2 being released.

Also, a great big HAPPY 20th BIRTHDAY GIMP! I made you a present. I hope it fits and you like it! :)

Ubuntu Wallpapers

Back in early September I posted on discuss about the Ubuntu Free Culture Showcase that was looking for wallpaper submissions from the free software community to coincide with the release of Ubuntu 15.10 ‘Wily Werewolf’. The winners were recently chosen from among the submissions and several of our community members had their images chosen!

The winning entries from our community include:

Moss inflorescence by carmelo75
Moss inflorescence
The first winner is from PhotoFlow creator Andrea Ferrero
Light my fire, evening sun by Dariusz Duma
Light my fire, evening sun
by Dariusz Duma
Sitting Here, Making Fun by Philipp Haegi
Sitting Here, Making Fun
by Mimir
Tranquil by Pat David
Tranquil
by Pat David

A big congratulations to you all for some amazing images being chosen! If you’re running Ubuntu 15.10, you can grab the ubuntu-wallpapers package to get these images right here!

darktable 2.0 RC2

Hot on the heels of the prior release candidate, darktable now has an RC2 out. There are many minor bugfixes from the previous RC1, such as:

  • high iso fix for exif data of some cameras
  • various macintosh fixes (fullscreen)
  • fixed a deadlock
  • updated translations

The preliminary changelog from the 1.6.x series:

  • darktable has been ported to gtk-3.0
  • new thumbnail cache replaces mipmap cache (much improved speed, less crashiness)
  • added print mode
  • reworked screen color management (softproof, gamut check etc.)
  • removed dependency on libraw
  • removed dependency on libsquish (solves patent issues as a side effect)
  • unbundled pugixml, osm-gps-map and colord-gtk
  • text watermarks
  • color reconstruction module
  • raw black/white point module
  • delete/trash feature
  • addition to shadows&highlights
  • more proper Kelvin temperature, fine-tuning preset interpolation in WB iop
  • noiseprofiles are in external JSON file now
  • monochrome raw demosaicing (not sure whether it will stay for release, like Deflicker, but hopefully it will stay)
  • aspect ratios for crop&rotate can be added to conf (ae36f03)
  • navigating lighttable with arrow keys and space/enter
  • pdf export – some changes might happen there still
  • brush size/hardness/opacity have key accels
  • the facebook login procedure is a little different now
  • export can upscale
  • we no longer drop history entries above the selected one when leaving dr or switching images
  • text/font/color in watermarks
  • image information now supports gps altitude
  • allow adding tone- and basecurve nodes with ctrl-click
  • new “mode” parameter in the export panel
  • high quality export now downsamples before watermark and frame to guarantee consistent results
  • lua scripts can now add UI elements to the lighttable view (buttons, sliders etc…)
  • a new repository for external lua scripts was started.

More information and packages can be found on the darktable github repository.

Remember, updating from the currently stable 1.6.x series is a one-way street for your edits (no downgrading from 2.0 back to 1.6.x).

GIMP Birthday

All together now…

Happy Birthday to GIMP! Happy Birthday to GIMP!

GIMP Wilber Big Icon

This past weekend GIMP celebrated it’s 20th anniversary! It was twenty years ago on November 21st that Peter Mattis announced the availability of the “General Image Manipulation Program” on comp.os.linux.development.apps.

Twenty years later and GIMP doesn’t look a day older than a 1.0 release! (Yes, there’s a double entendre there).

To celebrate, I’ve been spending the past couple of months getting a brand new website and infrastructure built for the project! Just in case anyone was wondering where I was or why I was so quiet. I like the way it turned out and is shaping up so go have a look if you get a moment!

There’s even an official news post about it on the new site!

GIMP 2.8.16

To coincide with the 20th anniversary, the team also released a new stable version in the 2.8 series: 2.8.16. Head over to the downloads page to pick up a copy!!

New PhotoFlow Tutorial

Still working hard and fast on PhotoFlow, Andreas took some time to record a new video tutorial. He walks through some basic usage of the program, in particular opening an image, adding layers and layer masks, and saving the results. Have a look and if you have a moment give him some feedback!

Andreas is working on PhotoFlow at a very fast pace, so expect some more news about his progress very soon!

News from the World of Tomorrow


News from the World of Tomorrow

And more awesome updates!

Some awesome updates from the community and activity over on the forums! People have been busy doing some really neat things (that really never fail to astound me). The level of expertise we have floating around on so many topics is quite inspiring.


darktable 2.0 Release Candidate

Towards a Better darktable!

A nice Halloween weekend gift for the F/OSS photo community from darktable: a first Release Candidate for a 2.0 release is now available!

Houz made the announcement on the forums this past weekend and includes some caveats. (Edits will be preserved going up, but it won’t be possible to downgrade back to 1.6.x).

Preliminary notes from houz (and Github):

  • darktable has been ported to gtk-3.0
  • new thumbnail cache replaces mipmap cache (much improved speed, less crashiness)
  • added print mode
  • reworked screen color management (softproof, gamut check etc.)
  • text watermarks
  • color reconstruction module
  • raw black/white point module
  • delete/trash feature
  • addition to shadows&highlights
  • more proper Kelvin temperature, fine-tuning preset interpolation in WB iop
  • noiseprofiles are in external JSON file now
  • monochrome raw demosaicing (not sure whether it will stay for release, like Deflicker, but hopefully it will stay)
  • aspect ratios for crop&rotate can be added to conf (ae36f03)
  • navigating lighttable with arrow keys and space/enter
  • pdf export – some changes might happen there still
  • brush size/hardness/opacity have key accels
  • the facebook login procedure is a little different now
  • export can upscale
  • we no longer drop history entries above the selected one when leaving dr or switching images
  • text/font/color in watermarks
  • image information now supports gps altitude
  • allow adding tone- and basecurve nodes with ctrl-click
  • we renamed mipmaps to thumbnails in the preferences
  • new “mode” parameter in the export panel
  • high quality export now downsamples before watermark and frame to guarantee consistent results
  • lua scripts can now add UI elements to the lighttable view (buttons, sliders etc…)
  • a new repository for external lua scripts was started.


G’MIC 1.6.7

Because apparently David Tschumperlé doesn’t sleep, a new release of G’MIC was recently announced as well! This release includes a really neat new patch-based texture resynthesizer that David has been playing with for a while now.

G'MIC Syntexturize Patch
Re-synthesizing an input texture to an output of arbitrary size.

It will build an output texture of arbitrary size based on an input texture (and can result in some neat looking peppers apparently).

Speaking of G’MIC…

G’MIC for Adobe After Effects and Premier Pro

Yes, I know it’s Adobe. Still, I can’t help but think that this might be an awesome way to introduce some people to the amazing work being done by so many F/OSS creators.

Tobias Fleischer announced on this post that he has managed to get G’MIC working with After Effects and Premier Pro. Even some of the more intensive filters like skeleton and Rodilius appear to be working fine (if a bit sluggish)!

Adobe After Effects G'MIC

PhotoFlow

You might remember PhotoFlow as the project that creator Andrea Ferrero used when writing his Blended Panorama Tutorial from a few months ago. What you might not realize is that Andrea has also been working at a furious pace improving PhotoFlow (indeed it feels like every few days he is announcing new improvements - almost as fast as G’MIC!).

PhotoFlow Perspective Correction Original PhotoFlow Perspective Correction Corrected
Example of PhotoFlow perspective correction.

His latest release was announced a few days ago as 0.2.3. He’s incorporated some nice new improvements in this version:

  • the additon of the LMMSE demosaicing method, directly derived from the algorithm implemented in RawTherapee
  • an impulse noise (also known as salt&pepper) reduction tool, again derived from rawTherapee. It effectively reduces isolated bright and dark pixels.
  • a perspective correction tool, derived from Darktable. It can simultaneously correct horizontal and vertical perspective as well as tilting, and works interactively.

Head on over to the PhotoFlow Blog to check things out!

LightZone 4.1.3 Released

We don’t hear as often from folks using LightZone, but that doesn’t mean they’re not working on things! In fact, Doug Pardee just stopped by the forums a while ago to announce a new release is available, 4.1.3. (Bonus fun - read that topic to see the Revised BSD License go flying right over my head!)

Head over to [their announcement] to see what they’re up to. [their announcement]: http://lightzoneproject.org/content/september-27-2015-lightzone-v413-now-available

Rapid Photo Downloader

We also had the developer of Rapid Photo Downloader, Damon Lynch, stop by the forums to solicit feedback from users just the other day. A nice discussion ensued and is well worth reading (or even contributing to!).

Damon is working hard on the next release of RPD (apparently the biggest update since the projects inception in 2007!), so go show some support and provide some feedback for him.

RawTherapee Forum

RawTherapee Logo

The RawTherapee team is testing out having a forum over here on discuss as well (we welcomed the G’MIC community a little while ago). This is currently an alternate forum for the project (which may become the official forum in the future). The category is quiet as we only just set it up, so drop by and say hello!

Speaking of RawTherapee…

Lede Image

I want to thank Morgan Hardwood (LondonLight.org) for providing us a wonderful view of Röstånga, Sweden as a background image on the main page.

Rostanga by Morgan Hardwood LondonLight.org
Röstånga by Morgan Hardwood cba

Users Guide to High Bit Depth GIMP 2.9.2, Part 1


Users Guide to High Bit Depth GIMP 2.9.2, Part 1

Part 1: New high bit depth precision options, new color space algorithms, and new color management options

Contents

  1. Introduction: high bit depth GIMP 2.9.2
    1. Purpose of this guide
    2. Useful links: the official GIMP website, builds for Windows and MAC, building GIMP on Linux
    3. Editing in sRGB vs editing in other color spaces
    4. A note about the “Gamma hack” that’s provided for many editing operations
  2. New high bit depth precision options
    1. Menu for choosing the image precision
    2. Which precision should you choose for editing?
    3. Using the image precision options when exporting an image to disk
  3. New color management options
    1. GIMP 2.9.2 automatically detects camera DCF information
    2. Black point compensation
  4. New and updated algorithms for converting to Luminance, LAB, and LCH
    1. Converting sRGB images from Color to Black and White using Luma and Luminance
    2. Decomposing from sRGB to LAB
    3. LCH: the actually usable replacement for the entirely inadequate color space known as “HSV”

Introduction: high bit depth GIMP 2.9.2

Purpose of this guide

As announced on the GIMP users and developers mailing lists, the recent (November 26, 2015) GIMP 2.9.2 release is the first development release in the GIMP 2.9.x series leading to GIMP 2.10. The release announcement summarizes the many code changes that were made to port the old GIMP code over to GEGL’s high bit depth processing.

This user’s guide to high bit depth GIMP 2.9.2 introduces you to some of high bit depth GIMP’s new editing capabilities that are made possible by GEGL’s high bit depth processing. The guide also points out a few “gotchas” that you should be aware of. Please keep in mind that GIMP 2.9 really is a development branch, so many things don’t yet work exactly like they will work when GIMP 2.10 is released.

Useful links: the official GIMP website, builds for Windows and MAC, building GIMP on Linux

High bit depth GIMP is a work in progress. If you read the release notes for GIMP 2.9.2, you already know that the primary goal for the GIMP 2.10 release is full “Geglification” of the GIMP code base.

Editing in sRGB vs editing in other color spaces

For best results when using GIMP 2.9.2, only edit sRGB images.

GIMP 2.8 has hard-coded sRGB parameters that make many editing operations produce wrong results for images that are in RGB working spaces other than sRGB. GIMP 2.9.2 still has these hard-coded sRGB parameters. Almost certainly GIMP 2.10 also will have these same hard-coded sRGB parameters.

Full support for editing images in other RGB working spaces won’t happen at least until GIMP 3.0, and maybe not until some time after GIMP 3.0. The next big change for GIMP will be the change-over from GTK+2 to GTK+3, which is a pretty critical step to make as GTK+2 is on the verge of being retired. GIMP development is a volunteer effort, porting GIMP over to GEGL has required an enormous amount of work, and porting from GTK+2 to GTK+3 isn’t exactly a trivial task. More GIMP developers would help a lot, so if you have any coding skills, please consider volunteering.

If you really do want to edit in color spaces other than sRGB “right now”, and you are comfortable building GIMP from git, my patched version of GIMP 2.9 is hard-coded to use the much larger Rec.2020 color space, and it should be obvious how to modify the patches for other RGB working spaces.

A note about the “Gamma hack” that’s provided for many editing operations

Desaturate dialog with Gamma hack

A “Gamma hack” option is provided by many GIMP 2.9.2 editing operations. This option sits next to some text that says “(temp hack, please ignore)”. Unless you know exactly what you are doing, you really are better off not using the Gamma hack.

New high bit depth precision options

Menu for choosing the image precision

As shown by the screenshot below, GIMP 2.9.2 offers six different image precisions:

  • Three integer precisions: 8-bit integer, 16-bit integer, and 32-bit integer.
  • Three floating point precisions: 16-bit floating point, 32-bit floating point, and 64-bit floating point.
Precision Menu
Menu for choosing the image precision.
(The “Perceptual gamma (sRGB)” and “Linear light” switches are explained in Part 2 of this article, under “Radiometrically correct editing”).

Which precision should you choose for editing?

If you have a fast computer with a lot of RAM, I recommend that you always promote your images to 32-bit floating point before you begin editing. Here’s why:

  1. Regardless of which precision you choose, all babl/GEGL/GIMP internal processing is done at 32-bit floating point. Read that sentence three times.
  2. There seems to be a small speed penalty for not using 32-bit floating point precision.
  3. The Precision menu options dictate how much memory is used to store in RAM the results of internal calculations:
    • Choosing 32-bit floating point precision allows you to take full advantage of GEGL’s 32-bit floating point processing.
    • If you are working on a lower-RAM machine, performance will benefit from using 16-bit floating point or integer precision, but of course the price is a loss in precision as new editing operations use the results of previous edits as stored in memory.
    • On very low RAM systems, performance will benefit even more from using 8-bit integer precision. But if you use 8-bit integer precision, you are throwing away most of the advantages of working with a high bit depth image editor.
    • 64-bit precision is made available mostly to accommodate importing and exporting very high bit precision images for scientific editing. You don’t gain any computational precision from using 64-bit precision for actual editing. If you choose 64-bit precision for editing, all you are really doing is wasting system RAM resources.

As discussed in Part 2 of this article, “Using GIMP 2.9.2’s floating point precision for unclamped editing” (and depending on your editing style and goals), instead of 32-bit floating point precision, sometimes you might prefer using 16-bit or 32-bit integer precision. But making full use of all of high bit depth GIMP’s new editing capabilities does require using floating point precision.

Sometimes people assume that floating point is “more precise” than integer, but this isn’t actually true: At any given bit-depth, integer precision is more precise than floating point precision, but uses about the same amount of RAM:

  • 16-bit integer precision is more precise than 16-bit floating point precision, and the two precisions use about the same amount of RAM.
  • 32-bit integer is more precise than 32-bit floating point precision, and the two precisions use about the same amount of RAM.

GEGL/GIMP’s internal processing uses 32-bit floating point precision, so both of GIMP’s 32-bit precisions actually provide the same degree of precision.

Using the image precision options when exporting an image to disk

The precision menu options have another extremely important use beside dictating the precision with which the results of editing operations are held in RAM. When you export the image to disk, the precision options allow you to change the bit depth of the exported image.

For example, some image editors can’t read floating point tiffs. So if you want to export an image as a tiff file that will be opened in another image editor that can only read 8-bit and 16-bit integer tiffs, and your GIMP XCF layer stack is currently using 32-bit floating point precision, you might want to change the XCF layer stack precision to 16-bit integer before exporting the tiff.

After exporting the image, don’t forget to hit “UNDO” (“Edit/Undo . . . “, or else just use the CNTL-Z keyboard shortcut) to get back to 32-bit floating point precision (or whatever other precision you were using).

New color management options

GIMP 2.9.2 automatically detects camera DCF information

For reasons only the camera manufacturers know, instead of embedding a proper ICC profile in camera-saved jpegs, usually they embed “DCF” and “maker note” information. Whenever a camera manufacturer offers the option to embed a color space that isn’t officially supported by the DCF/Exif standards, each manufacturer feels free to improvise with new tags.

GIMP 2.9.2 does detect and assign the correct color space for most camera-saved jpegs. Like all editing software, GIMP has to play “catch up” with new tags for new color spaces offered by new camera models.

Tell your camera manufacturer that you want proper ICC profiles embedded in your camera-saved jpegs.

Black point compensation

Unlike GIMP 2.8, GIMP 2.9 does offer black point compensation as an explicit option, and it’s enabled by default.

GIMP 2.9.2 color management preferences GIMP 2.8 color management preferences
GIMP 2.9 offers black point compensation as an explicit option. As an aside, GIMP 2.8 actually did offer black point compensation, but in a very round-about way: In GIMP 2.8, if you used the default “Perceptual intent” for the Display rendering intent, then black point compensation was disabled. And if you chose “Relative colorimetric” for the Display rendering intent, then black point compensation was enabled.

Even though black point compensation is checked by default in GIMP 2.9.2, whether you should use black point compensation partly depends on the color management settings provided by the other imaging software that you routinely use. For example, Firefox doesn’t provide for black point compensation. As far as I can tell, neither does RawTherapee or darktable. If one of your goals is to make sure that images look the same as displayed in various softwares, you need to make sure all the relevant color management settings match.

What is black point compensation? LCD monitors can’t display “zero light”. There’s always some minimum amount of light coming from the screen. Fill your screen with a solid black image, turn out all the lights and close the doors and curtains, and you’ll see what I mean.

Black point compensation compensates for the fact that RGB working spaces like sRGB allow you to produce colors (for example solid black) that are darker than your monitor can actually display. GIMP uses the LCMS black point compensation algorithm, which very sensibly scales the image tonality so that “solid black” in the image file maps to “darkest dark” in the monitor profile’s color gamut.

Zero non-zero black points
Non-zero and zero black points (images produced using icc_examin and ArgyllCMS).

However, depending on your monitor profile, using or not using black point compensation might not make any difference at all. The only time black point compensation makes a difference is if the Monitor profile you choose in “Preferences/Color management” actually does have a “higher than zero” black point.

Why some monitor profiles do and some don’t have “higher than zero” black points is beyond the scope of this tutorial. Suffice it to say that a very accurate LCD monitor profile will always have a higher than zero black point. But sometimes, and especially for consumer-grade monitors, a very accurate monitor profile will make displayed images look worse than they will when using a less accurate monitor profile.

New and updated algorithms for converting to Luminance, LAB, and LCH

Converting sRGB images from Color to Black and White using Luma and Luminance

Under “Colors/Desaturate”, GIMP 2.8 offers three options for converting an sRGB image to black and white: Lightness, Luminosity, and Average:

  1. The “Lightness” option adds the lowest and highest RGB channel values and divides the result by two.
  2. The “Luminosity” option is equal to (the Red channel times 0.213) plus (the Green channel times 0.715) plus (the Blue channel times 0.072).
  3. The “Average” option sums all three RGB channel values and divides the result by three.

GIMP 2.9.2 still offers all three options for converting an sRGB image to black and white. But the “Luminosity” option has been renamed Luma, which is the technically correct term (though various image editors use the term “Luminosity” in various incorrect ways.

Also GIMP 2.9.2’s “Luma” option uses slightly different multipliers for calculating Luma, being (the Red channel times 0.222) plus (the Green channel times 0.717) plus (the Blue channel times 0.061). The GIMP 2.8 multipliers were wrong and the GIMP 2.9 multipliers are correct.

Since I know you won’t be able to get any sleep until someone tells you why the multipliers for calculating Luma were changed, the GIMP 2.9 multipliers have been Bradford-adapted from D65 to D50, which is required for use in an ICC profile color-managed editing application (at least until the next version of the ICC specs is released and people figure out how to deal with the new freedom to use non-D50 reference white points).

GIMP 2.9.2 also offers a fourth option for converting sRGB images to black and white, which is “Luminance”. “Luminance” is short for relative luminance. Luminance is calculated using the same channel multipliers that are used to calculate Luma. The mathematical difference between calculating Luma and Luminance is as follows:

  • Luma is calculated using RGB channel values that are encoded using the sRGB TRC.
  • Luminance is calculated using linearized RGB channel values, producing a radiometrically correct and physically meaningful conversion from color to black and white.

Of the various options in the “Colors/Desaturate” menu, “Luminance” is the only physically meaningful way to convert from color to black and white.

The Red, Blue, and Green Luma and Luminance channel multipliers are specific to the sRGB color space. These channel multipliers are actually the “Y” components of the sRGB ICC profile’s XYZ primaries. As you might expect, different RGB working spaces have different “Y” values, and so the GIMP 2.9.2 conversions to Luma and Luminance only produce correct results for sRGB images.

GIMP 2.9 sRGB Luminance and Luma conversions to black and white
Click to compare sRGB Luminance and Luma conversions to black and white:
1. “Colors/Desaturate/Luminance” conversion to black and white 2. “Colors/Desaturate/Luma” conversion to black and white

Decomposing from sRGB to LAB

Decomposing to LAB does use hard-coded sRGB parameters and so will produce wrong results in other RGB working spaces.

In GIMP 2.8, decomposing an sRGB image to LAB produced flatly wrong results. In GIMP 2.9.2, decomposing an sRGB image to LAB does produce mathematically correct results. But if you use “drag and drop” to pull the decomposed grayscale layers over to your sRGB layer stack, there is still a small error in the resulting RGB layer. Figure 3 below illustrates the problem:

RGB Glass Color LAB L Mathematically Correct
Decomposing to LAB and retrieving the LAB Lightness (“L”) channel
Click the links below the image to see the original color image and the results of decomposing to LAB plus “dragging and dropping the L channel” in GIMP 2.8 vs GIMP 2.9. 1. Mathematically correct conversion to LAB Lightness 2. GIMP 2.9.2 decompose to LAB + drag and drop (a little wrong) 3. GIMP 2.8 decompose to LAB + drag and drop (not done on linearized RGB, so results are very wrong) 4. The original color layer that was decomposed to LAB 5. Difference between the LAB and sRGB companding curves (the reason why “drag and drop” in GIMP 2.9 produces slightly wrong results)

Assuming you start with an image in the regular sRGB color space, then:

  • In GIMP 2.9.2, decomposing a layer to LAB in GIMP 2.9 produces mathematically correct results.

    However, dragging the resulting grayscale channels back to the RGB XCF color stack results in a slightly wrong result. This is because the dropped grayscale layer(s), which don’t have an embedded ICC profile, are assumed to be encoded using the sRGB companding curve (Tone Reproduction Curve, “TRC”), when really they are encoded using the LAB companding curve. This is a color management problem that can be solved by enabling GIMP to do grayscale color management (all that’s needed is a little developer time — did I mention that GIMP really does need more developers?).

    As an incredibly important aside, a mathematically correct conversion from sRGB to LAB Lightness and back to sRGB produces exactly the same thing as using GIMP 2.9.2’s “Colors/Desaturate/Luminance” option to change an sRGB image from color to black and white.

  • In GIMP 2.8, decomposing a layer to LAB produces wildly mathematically incorrect results, and dragging the resulting channel(s) back to the RGB XCF color stack also produces wildly mathematically incorrect results. So older GIMP tutorials on using the LAB Lightness channel to convert an image to black and white won’t produce anywhere near the same results when using GIMP 2.9/GIMP 2.10.

If you’d like to know more about “LAB Lightness to black and white”, the following two-part article untangles the massive amounts of confusion regarding converting an RGB image to black and white using the LAB Lightness channel:

  1. LAB Lightness to black and white using GIMP 2.8.
  2. LAB Lightness to black and white using GIMP 2.9 and PhotoShop (the typical PhotoShop tutorial on using the LAB Lightness channel to convert to black and white does produce mathematically incorrect results).

LCH: the actually usable replacement for the entirely inadequate color space known as “HSV”

LCH calculations do use hard-coded sRGB parameters, and so will produce wrong results in other RGB working spaces.

HSV (“Hue/Saturation/Value”) is a sad little color space designed for fast processing on slow computers, way back in the stone age of digital processing. HSV is OK for picking colors from a color wheel. But it’s really wretched for just about any other editing application, because despite the fact that “HSV” stands for “Hue/Saturation/Value”, you actually can’t adjust color and tonality separately in the HSV color space.

“LCH” stands for “Lightness, Chroma, Hue”. LCH is mathematically derived from the CIELAB reference color space, which in turn is a perceptually uniform transform of the CIEXYZ reference color space. Unlike HSV, LCH is a physically meaningful color space that allows you to edit separately for color and tonality.

Very roughly speaking:

  • LCH Lightness corresponds to HSV Value.
  • LCH Chroma corresponds to HSV Saturation.
  • LCH Hue corresponds to HSV Hue (the names are the same, but the two blend modes are based on very different mathematics).
  • LCH Color is a combination of LCH Chroma and Hue, and corresponds to HSV Color, which is a combination of HSV Hue and Saturation (again, the names are the same, but the two blend modes are based on very different mathematics).

LCH blend modes and painting are a game-changing addition to high bit depth GIMP editing capabilities. If you’d like to see examples of what you can do with LCH, that you can’t even come close to doing with HSV, I’ve written a couple of tutorials on using GIMP’s LCH color space capabilities:

  1. A tutorial on GIMP’s very awesome LCH Blend Modes, which shows how to use GIMP’s new LCH blend modes to repair a badly damaged image, and then to colorize a black and white rendering of the image.
  2. Autumn colors: An Introduction to High Bit Depth GIMP’s New Editing Capabilities, which shows how to use GIMP’s new LCH blend modes to edit separately for color and tonality.
Compare LCH vs HSV when restoring color.
Restoring color to a damaged image: LCH Color blend mode vs the HSV Color blend mode: The LCH Color blend mode produces smooth, believable color transitions. The HSV Color blend mode produces very splotchy results.
LCH vs HSV when changing color.
Changing an image’s color: LCH Color blend mode vs HSV Color blend mode: The LCH Color blend mode changes the image color without modifying the image tonality, whereas the HSV Color blend mode simultaneously changes tonality along with color (HSV blending with blue made the tonality darker, HSV blending with yellow made the tonality lighter).

I’m not an especially skilled programmer. In fact I find writing code to be a painfully slow exercise. But one major reason why I maintain a patched version of high bit depth GIMP is precisely so I can use the LCH color space not just for blending and painting, but also for picking colors and as a replacement for the essentially useless HSV “Hue-Saturation” tool. These particular editing capabilities will eventually make it into an official GIMP release, but I didn’t want to wait for “eventually” to happen.

Click here to go to Part 2 of this guide to GIMP 2.9.2!
Part 2 discusses using GIMP 2.9.2 to do radiometrically correct editing, unbounded ICC profile conversions, and unclamped editing.

All text and images ©2015 Elle Stone, all rights reserved.

Portrait Lighting Cheat Sheets


Portrait Lighting Cheat Sheets

Blender to the Rescue!

Many moons ago I had written about acquiring a YN-560 speedlight for playing around with off-camera lighting. At the time I wanted to experiment with how different modifiers might be used in a portrait setting. Unfortunately, these were lighting modifiers that I didn’t own yet.

I wasn’t going to let that slow me down, though!

If you want to skip the how and why to get straight to the cheat sheets, click here.

Infinite Realities had released a full 3D scan by Lee Perry-Smith of his head that was graciously licensed under a Creative Commons Attribution 3.0 Unported License. For reference, here is a link to the object file and textures (80MB) and the displacement maps (65MB) from the Infinite Realities website.

What I did was to bring the high resolution scan and displacement maps into Blender and manually created my lights with modifiers in a virtual space. Then I could simply render what a particular light/modifier would look like with a realistic person being lit in any way I wanted.

Blender View Lighting Setup

This leads to all sorts of neat freedom to experiment with things to see how they might come out. Here’s another look at the lede image:

Blender Lighting Samples
Various lighting setups test in Blender.

I had originally intended to make a nice bundled application that would allow someone to try all sorts of different lighting setups, but my skill in Blender only go so far. My skills at convincing others to help me didn’t go very far either. :)

So, if you’re ok with navigating around Blender already, feel free to check out my original blog post to download the .blend file and give it try! Jimmy Gunawan even took it further and modified the .blend to work with Blender cycles rendering as well.

With the power to create a lighting visualization of any scenario I then had to see if there was something cool I could make for others to use…

The Lighting Cheat Sheets

I couldn’t help but generate some lighting cheat sheets to help others use as a reference. I’ve seen some different ones around but I took advantage of having the most patient model in the world to do this with. :)

These were generated by rotating a 20” (virtual) softbox in a circle around the subject at 3 different elevations (0, 30°, and 60°).

Click the caption title for a link to the full resolution files:

Blender Lighting Setup 0 degrees
Softbox 0° Portrait Lighting Cheat Sheet Reference
by Pat David (cba)
Blender Lighting Setup 30 degrees
Softbox 30° Portrait Lighting Cheat Sheet Reference
by Pat David (cba)
Blender Lighting Setup 60 degrees
Softbox 60° Portrait Lighting Cheat Sheet Reference
by Pat David (cba)

Hopefully these might prove useful as a reference for some folks. Share them, print them out, tape them to your lighting setups! :) I wonder if we could get some cool folks from the community to make something neat with them?

Softness and Superresolution


Softness and Superresolution

Experimenting and Clarifying

A small update on how things are progressing (hint: well!) and some neat things the community is playing with.

I have been quiet these past few weeks because I decided I didn’t have enough to do and thought a rebuild/redesign of the GIMP website would be fun, apparently. Well, it _is_ fun and something that couldn’t hurt to do. So I stepped up to help out.

A Question of Softness

There was a thread recently on a certain large social network in a group dedicated to off-camera flash. The thread was started by someone with the comment:

The most important thing you can do with your speed light is to put some rib [sic] stop sail cloth over the speed light to soften the light.

Which just about gave me an aneurysm (those that know me and lighting can probably understand why). Despite some sound explanations about why this won’t work to “soften” the light, there was a bit of back and forth about it. To make matters worse, even after over 100 comments, nobody bothered to just go out and shoot some sample images to see it for themselves.

So I finally went out and shot some to illustrate and I figured they would be more fun if they were shared (I did actually post these on our forum).

I quickly set a lightstand up with a YN560 on it pointed at my garden statue. I then took a shot with bare flash, one with diffusion material pulled over the flash head, and one with a 20” diy softbox attached.

Here’s what the setup looked like with the softbox in place:

Soft Light Test - Softbox Setup
Simple light test setup (with a DIY softbox in place).

Remember, this was done to demonstrate that simply placing some diffusion fabric over the head of a speedlight does nothing to “soften” the resulting light:

Softness test image bare flash
Bare flash result. Click to compare with diffusion material.

This shows clearly that diffusion material over the flash head does nothing to affect the “softness” of the resulting light.

For a comparison, here is the same shot with the softbox being used:

Softness test image softbox
Same image with the softbox in place. Click to compare with diffusion material.

I also created some crops to help illustrate the difference up close:

Softness test crop #1
Click to compare: Bare Flash With Diffusion With Softbox
Softness test crop #1
Click to compare: Bare Flash With Diffusion With Softbox

Hopefully this demonstration can help put to rest any notion of softening a light through close-set diffusion material (at not-close flash-to-subject distances). At the end of the day, the “softness” quality of a light is a function of the apparent size of the light source relative to the subject. (The sun is the biggest light source I know of, but it’s so far it’s quality is quite harsh.)

A Question of Scaling

On discuss, member Mica asked an awesome question about what our workflows are for adding resolution (upsizing) to an image. There were a bunch of great suggestions from the community.

One I wanted to talk about briefly I thought was interesting from a technical perspective.

Both Hasselblad and Olympus announced not too long ago the ability to drastically increase the resolution of images in their cameras that used a “sensor-shift” technology to shift the sensor by a pixel or so while shooting multiple frames, then combing the results into a much larger megapixel image (200MP in the case of Hasselblad, and 40MP in the Olympus).

It turns out we can do the same thing manually by burst shooting a series of images while handholding the camera (the subtle movement of our hand while shooting provides the requisite “shift” to the sensor). Then we simply combine the images, upscale, and average the results to get a higher resolution result.

The basic workflow uses Hugin align_image_stack, Imagemagick mogrify, and G’MIC mean blend script to achieve the results.

  1. Shoot a bunch of handheld images in burst mode (if available).
  2. Develop raw files if that’s what you shot.
  3. Scale images up to 4x resolution (200% in width and height). Straight nearest-neighbor type of upscale is fine.
    • In your directory of images, create a new sub-directory called resized.
    • In your directory of images, run mogrify -scale 200% -format tif -path ./resized *.jpg if you use jpg’s, otherwise change as needed. This will create a directory full of upscaled images.
  4. Align the images using Hugin’s align_image_stack script.
    • In the resized directory, run /path/to/align_image_stack -a OUT file1.tif file2.tif ... fileX.tif The -a OUT option will prefix all your new images with OUT.
    • I move all of the OUT* files to a new sub-directory called aligned.
  5. In the aligned directory, you now only need to mean average all of the images together.
    • Using Imagemagick: convert OUTfile*.tif -evaluate-sequence mean output.bmp
    • Using G’MIC: gmic video-avg.gmic -avg \" *.tif \" -o output.bmp

I used 7 burst capture images from an iPhone 6+ (default resolution 3264x2448). This is the test image:

Superresolution test image
Sample image, red boxes show 100% crop areas.

Here is a 100% crop of the first area:

Superresolution crop #1 example
100% crop of the base image, straight upscale.
Superresolution crop #1 example result
100% crop, super resolution process result.

The second area crop:

Superresolution crop #2 example
100% crop, super resolution process result.
Superresolution crop #2 example result
100% crop, super resolution process result.

Obviously this doesn’t replace the ability to have that many raw pixels available in a single exposure, but if the subject is relatively static this method can do quite well to help increase the resolution. As with any mean/median blending technique, a nice side-effect of the process is great noise reduction as well…

Not sure if this warrants a full article post, but may consider it for later.

Freaky Details (Calvin Hollywood)


Freaky Details (Calvin Hollywood)

Replicating Calvin Hollywood's Freaky Details in GIMP

German photographer/digital artist/photoshop trainer Calvin Hollywood has a rather unique style to his photography. It’s a sort of edgy, gritty, hyper-realistic result, almost a blend between illustration and photography.

Calvin Hollywood Examples

As part of one of his courses, he talks about a technique for accentuating details in an image that he calls “Freaky Details”.

Here is Calvin describing this technique using Photoshop:

In my meandering around different retouching tutorials I came across it a while ago, and wanted to replicate the results in GIMP if possible. There were a couple of problems that I ran into for replicating the exact same workflow:

  1. Lack of a “Vivid Light” layer blend mode in GIMP
  2. Lack of a “Surface Blur” in GIMP

Those problems have been rectified (and I have more patience these days to figure out what exactly was going on), so let’s see what it takes to replicate this effect in GIMP!

Replicating Freaky Details

Requirements

The only extra thing you’ll need to be able to replicate this effect is G’MIC for GIMP.

You don’t technically need G’MIC to make this work, but the process of manually creating a Vivid Light layer is tedious and error-prone in GIMP right now. Also, you won’t have access to G’MIC’s Bilateral Blur for smoothing. And, seriously, it’s G’MIC - you should have it anyway for all the other cool stuff it does!

Summary of Steps

Here’s the summary of steps we are about to walk through to create this effect in GIMP:

  1. Duplicate the background layer.
  2. Invert the colors of the top layer.
  3. Apply “Surface Blur” to top layer.
  4. Set top layer blend mode to “Vivid Light”.
  5. New layer from visible.
  6. Set layer blend mode of new layer to “Overlay”, hide intermediate layer.

There are just a couple of small things to point out though, so keep reading to be aware of them!

Detailed Steps

I’m going to walk through each step to make sure it’s clear, but first we need an image to work with!

As usual, I’m off to Flickr Creative Commons to search for a CC licensed image to illustrate this with. I found an awesome portrait taken by the U.S. National Guard/Staff Sergeant Christopher Muncy:

New York National Guard, on Flickr
New York National Guard by U.S. National Guard/Staff Sergeant Christopher Muncy on Flickr (cb).
Airman First Class Anthony Pisano, a firefighter with the New York National Guard’s 106th Civil Engineering Squadron, 106th Rescue Wing conducts a daily equipment test during a major snowstorm on February 17, 2015.
(New York Air National Guard / Staff Sergeant Christopher S Muncy / released)

This is a great image to test the effect, and to hopefully bring out the details and gritty-ness of the portrait.

1./2. Duplicate background layer, and invert colors

So, duplicate your base image layer (Background in my example).

Layer → Duplicate
(Shift-Ctrl-D,Shift-⌘-D)

I will usually name the duplicate layer something descriptive, like “Temp” ;).

Next we’ll just invert the colors on this “Temp” layer.

Colors → Invert

So right now, we should be looking at this on our canvas:

GIMP Freaky Details Inverted Image
The inverted duplicate of the base layer.
GIMP Freaky Details Inverted Image Layers
What the Layers dialog should look like.

Now that we’ve got our inverted “Temp” layer, we just need to apply a little blur.

3. Apply “Surface Blur” to Temp Layer

There’s a couple of different ways you could approach this. Calvin Hollywood’s tutorial explicitly calls for a Photoshop Surface Blur. I think part of the reason to use a Surface Blur vs. Gaussian Blur is to cut down on any halos that will occur along edges of high contrast.

There are three main methods of blurring this layer that you could use:

  1. Straight Gaussian Blur (easiest/fastest, but may halo - worst results)

    Filters → Blur → Gaussian Blur

  2. Selective Gaussian Blur (closer to true “Surface Blur”)

    Filters → Blur → Selective Gaussian Blur

  3. G’MIC’s Smooth [bilateral] (closest to true “Surface Blur”)

    Filters → G’MIC → Repair → Smooth [bilateral]

I’ll leave it as an exercise for the reader to try some different methods and choose one they like. (At this point I personally pretty much just always use G’MIC’s Smooth [bilateral] - this produces the best results by far).

For the Gaussian Blurs, I’ve had good luck with radius values around 20% - 30% of an image dimension. As the blur radius increases, you’ll be acting more on larger local contrasts (as opposed to smaller details) and run the risk of halos. So just keep an eye on that.

So, let’s try applying some G’MIC Bilateral Smoothing to the “Temp” layer and see how it looks!

Run the command:

Filters → G’MIC → Repair → Smooth [bilateral]

GIMP Freaky Details G'MIC Bilateral Filter
The values I used in this example for Spatial/Value Variance.

The values you want to fiddle with are the Spatial Variance and Value Variance (25 and 20 respectively in my example). You can see the values I tried for this walkthrough, but I encourage you to experiment a bit on your own as well!

Now we should see our canvas look like this:

GIMP Freaky Details G'MIC Bilateral Filter Result
Our “Temp” layer after applying G’MIC Smoothing [bilateral]
GIMP Freaky Details Inverted Image Layers
Layers should still look like this.

Now we just need to blend the “Temp” layer with the base background layer using a “Vivid Light” blending mode…

4./5. Set Temp Layer Blend Mode to Vivid Light & New Layer

Now we need to blend the “Temp” layer with the Background layer using a “Vivid Light” blending mode. Lucky for me, I’m friendly with the G’MIC devs, so I asked nicely, and David Tschumperlé added this blend mode for me.

So, again we start up G’MIC:

Filters → G’MIC → Layers → Blend [standard] - Mode: Vivid Light

GIMP Freaky Details Vivid Light Blending
G’MIC Vivid Light blending mode, pay attention to Input/Output!

Pay careful attention to the Input/Output portion of the dialog. You’ll want to set the Input Layers to All visibles so it picks up the Temp and Background layers. You’ll also probably want to set the Output to New layer(s).

When it’s done, you’re going to be staring at a very strange looking layer, for sure:

GIMP Freaky Details Vivid Light Blend Mode
Well, sure it looks weird out of context…
GIMP Freaky Details Vivid Light Blend Mode Layers
The layers should now look like this.

Now all that’s left is to hide the “Temp” layer, and set the new Vivid Light result layer to Overlay layer blending mode…

6. Set Vivid Light Result to Overlay, Hide Temp Layer

We’re just about done. Go ahead and hide the “Temp” layer from view (we won’t need it anymore - you could delete it as well if you wanted to).

Finally, set the G’MIC Vivid Light layer output to Overlay layer blend mode:

GIMP Freaky Details Final Blend Mode Layers
Set the resulting G’MIC output layer to Overlay blend mode.

The results we should be seeing will have enhanced details and contrasts, and should look like this (mouseover to compare the original image):

GIMP Freaky Details Final
Our final results (whew!)
(click to compare to original)

This technique will emphasize any noise in an image so there may be some masking and selective application required for a good final effect.

Summary

This is not an effect for everyone. I can’t stress that enough. It’s also not an effect for every image. But if you find an image it works well on, I think it can really do some interesting things. It can definitely bring out a very dramatic, gritty effect (it works well with nice hard rim lighting and textures).

The original image used for this article is another great example of one that works well with this technique:

GIMP Freaky Details Alternate Final
After a Call by Mark Shaiken on Flickr. (cbna)

I had muted the colors in this image before applying some Portra-esque color curves to the final result..

Finally, a BIG THANK YOU to David Tschumperlé for taking the time to add a Vivid Light blend mode in G’MIC.

Try the method out and let me know what you think or how it works out for you! And as always, if you found this useful in any way, please share it, pin it, like it, or whatever you kids do these days…

This tutorial was originally published here.

Addendum

For those looking for a faster/easier way to achieve this effect, it has now been integrated as a filter into G’MIC. (Again, thanks to David Tschumperlé!)

Notes from the dark(table) Side


Notes from the dark(table) Side

A review of the Open Source Photography Course

We recently posted about the Open Source Photography Course from photographer Riley Brandt. We now also have a review of the course as well.

This review is actually by one of the darktable developers, houz! He had originally posted it on discuss as a topic but I think it deserves a blog post instead. (When a developer from a favorite project speaks up, it’s usually worth listening…)

Here is houz’s review:


The Open Source Photography Course Review

by houz

Author houz headshot

It seems that there is no topic to discuss The Open Source Photography Course yet so let’s get started.

Disclaimer

First of all, as a darktable developer I am biased so take everything I write with a grain of salt. Second, I didn’t pay for my copy of the videos but Riley was kind enough to provide a free copy for me to review. So add another pinch of salt. I will therefore not tell you if I would encourage you to buy the course. You can have my impressions nevertheless.

Review

I won’t say anything about the GIMP part, not because it wouldn’t know how to use that software but it’s relatively short and I just didn’t notice anything to comment on. It’s solid basics of how to use GIMP and the emphasis on layer masks is really important in real world usage.

Now for the darktable part, I have to say that I liked it a lot. It showcases a viable workflow and is relatively complete – not by explaining every module and becoming the audio book of the user manual but by showing at least one tool for every task. And as we all know, in darktable there are many ways to skin a cat, so concentrating on your favourites is a good thing.

What I also appreciate is that Riley managed to cut the single topics to manageable chunks of around 10 minutes or less so you can easily watch them in your lunch break and have no problem to come back to one topic later and easily find what you are looking for.

Before this starts to sound like an advertisement I will just point out some small nitpicking things I noticed while watching the videos. Most of these were not errors in the videos but are just extra bits of information that might make your workflow even smoother, so it’s more of an addendum than an erratum.

  • When going through your images on lighttable you can either zoom in till you only see a single image (alt-1 is a shortcut for that) or hold the z key pressed. Both are shown in the videos. The latter can quickly become tedious since releasing z just once bring you back to where you were. There are however two more keyboard shortcuts that are not assigned by default under views>lighttable: ‘sticky preview’ and ‘sticky preview with focus detection’. Both work just like normal z and ctrl-z, just without the need to keep the key pressed. You can assign a key to these, for example by reusing z and ctrl-z.
  • Color labels can be set with F1 .. F5, similar to rating.
  • Basecurve and tonecurve allow very fine up/down movement of points with the mouse wheel. Hover over a node and scroll.
  • Gaussian in shadows&highlights tends to give stronger halos than bilateral in normal use, see the darktable blog for an example.
  • For profiled denoising better use ‘HSV color’ instead of ‘color’ and ‘HSV lightness’ instead of ‘lightness’, see the user manual for details.
  • When using the mouse wheel to zoom the image you can hold ctrl to get it smaller than fitting to the screen. That’s handy to draw masks over the image border.
  • When moving the triangles in color zones apart you actually widen the scope of affected values since the curve gets moved off the center line on a wider range.
  • Also color zones: You can also change reds and greens in the same instance, no need for multiple instances. Riley knows that and used two instances to be able to control the two changes separately.
  • When loading sidecar files from lighttable, you can even treat a JPEG that was exported from darktable like an XMP file and manually select that since the JPEGs get the processing data embedded. It’s like a backup of the XMP with a preview. Caveat: When using LOTS of mask nodes (mostly with the brush mask) the XMP data might get too big so it’s no longer possible to embed in the JPEG, but in general it works.
  • The collect module allows to store presets so you can quickly access often used search rules. And since presets only store the module settings and not the resulting image set these will be updated when new images are imported.
  • In neutral density you can draw a line with the right mouse button, similar to rotating images.
  • Styles can also be created from darkroom, there is a small button next to the history compression button.

So, that’s it from me. Did you watch the videos, too? What was your impression? Do you have any remarks?

Color Curves Matching


Color Curves Matching

Sample points and matching tones

In my previous post on Color Curves for Toning/Grading, I looked at the basics of what the Curves dialog lets you do in GIMP. I had been meaning to revisit the subject with a little more restraint (the color curve in that post was a little rough and gross, but it was for illustration so I hope it served its purpose).

This time I want to look at the use of curves a little more carefully. You’d be amazed at the subtlety that gentle curves can produce in toning your images. Even small changes in your curves can have quite the impact on your final result. For instance, have a look at the four film emulation curves created by Petteri Sulonen (if you haven’t read his page yet on creating these curves, it’s well worth your time):

Dot Original Headshot
Original
Dot Portra NC400 Film
Portraesque (Kodak Portra NC400 Film)
Dot Fuji Provia Film
Proviaesque (Fujichrome Provia)
Dot Fuji Velvia Film
Velviaesque (Fujichrome Velvia)
Dot crossprocessed C41 Film
Crossprocess (E6 slide film in C-41 neg. processing)

I can’t thank Petteri enough for releasing these curves for everyone to use (for us GIMP users, there is a .zip file at the bottom of his post that contains these curves packaged up). Personally I am a huge fan of the Portraesque curve that he has created. If there is a person in my images, it’s usually my go-to curve as a starting point. It really does generate some wonderful skin tones overall.

The problem in generating these curves is that one has to be very, very familiar with the characteristics of the film stocks you are trying to emulate. I never shot Velvia personally, so it is hard for me to have a reference point to start from when attempting to emulate this type of film.

What we can do, however, is to use our personal vision or sense of aesthetic to begin toning our images to something that we like. GIMP has some great tools for helping us to become more aware of color and the effects of each channel on our final image. That is what we are going to explore…

Disclaimer I cannot stress enough that what we are approaching here is an entirely subjective interpretation of what is pleasing to our own eyes. Color is a very complex subject and deserves study to really understand. Hopefully some of the things I talk about here will help pique your interest to push further and experiment!
There is no right or wrong, but rather what you find pleasing to your own eye.

Approximating Tones

What we will be doing is using Sample Points and the Curves dialog to modify the color curves in my image above to emulate something else. It could be another photograph, or even a painting.

I’ll be focusing on the skin tones, but the method can certainly be used for other things as well.

Dot Original Headshot
My wonderful model.

With an image you have, begin considering what you might like to approximate the tones on. For instance, in my image above I want to work on the skin tones to see where it leads me.

Now find an image that you like, and would like to approximate the tones from. It helps if the image you are targeting already has tones somewhat similar to what you are starting with (for instance, I would look for another Caucasian image with similar tones to start from, as opposed to Asian). Keeping tones at least similar will reduce the violence you’ll do to your final image.

So for my first example, perhaps I would like to use the knowledge that the Old Masters already had in regards to color, and would like to emulate the skin tones from Vermeer’s Girl with the Pearl Earring.

Johannes Vermeer Girl with the Pearl Earring
Johannes Vermeer - The Girl With The Pearl Earring (1665)

In GIMP I will have my original image already opened, and will then open my target image as a new layer. I’ll pull this layer to one side of my image to give me a view of the areas I am interested in (faces and skin).

Vermeer setup GIMP

I will be using Sample Points extensively as I proceed. Read up on them if you haven’t used them before. They are basically a means of giving you real-time feedback of the values of a pixel in your image (you can track up to four points at one time).

I will put a first sample point somewhere on the higher skin tones of my base image. In this case, I will put one on my models forehead (we’ll be moving it around shortly, so somewhere in the neighborhood is fine).

GIMP first sample point

Ctrl + Left Click in the ruler area of your main window (shown in green above), and drag out into your image. There should be crosshairs across your entire image screen showing you where you are dragging.

When you release the mouse button, you’ve dropped a Sample Point onto your image. You can see it in my image above as a small crosshair with the number 1 next to it.

GIMP should open the sample points dialog for you when you create the first point, but if not you can access it from the image menu under:

Windows → Dockable Dialogs → Sample Points

Sample points dialog

This is what the dialog looks like. You can see the RGB pixel data for the first sample point that I have already placed. As you place more sample points, they will each be reflecting their data on this dialog.

You can go ahead and place more sample points on your image now. I’ll place another sample point, but this time I will put it on my target image where the tones seem similar in brightness.

Sample point placed

What I’ll then do is change the data being shown in the Sample Points dialog to show HSV data instead of Pixel data.

Sample points dialog with 2 points

Now, I will shoot for around 85% value on my source image, and try to find a similar value level in similar tones from my target image as well. Once you’ve placed a sample point, you can continue to move it around and see what types of values it gives you. (If you use another tool in the meantime, and can no longer move just the sample point - you can just select the Color Picker Tool to be able to move them again).

Move the points around your skin tones until you get about the same Value for both points.

Once you have them, make sure your original image layer is active, then start up the curves dialog.

Colors → Curves…

Now here is something really handy to know while using the Curves dialog: if you hover your mouse over your image, you’ll notice that the cursor is a dropper - you can click and drag on an area of your image, and the corresponding value will show up in your curves dialog for that pixel (or averaged area of pixels if you turn that on).

So click and drag to about the same pixel you chose in your original image for the sample point.

Curve base
Curves dialog with a value point (217) for my sampled pixel.

Here is what my working area currently looks like:

GIMP workspace for sample point color matching

I have my curves dialog open, and an area around my sample point chosen so that the values will be visible in the dialog, my images with their associated sample points, and the sample points dialog showing me the values of those points.

The basic idea now is to adjust my RGB channels to get my original image sample point (#1) to match my target image sample point (#2).

Because I selected an area around my sample point with the curves dialog open, I will know roughly where those values need to be adjusted. Let’s start with the Red channel.

First, set the Sample Points dialog back to Pixel to see the RGBA data for that pixel.

GIMP Sample point Red Green Blue matching

We can now see that to match the pixel colors we will need to make some adjustments to each channel. Specifically,

the Red channel will have to come down a bit (218 → 216),

the Green down some as well (188 → 178),

and Blue much more (171 → 155).

You may want to resize your Curves dialog window larger to be able to more finely control the curves. If we look at the Red channel in my example, we would want to adjust the curve down slightly at the vertical line that shows us where our pixel values are:

Color Curve Adjustment Red

We can adjust the red channel curve along this vertical axis (marked x:217) until our pixel red value matches the target (216).

Then just change over to the green channel and do the same:

Color Curve Adjustment Green

Here we are adjusting the green curve vertically along the axis marked x:190 until our pixel green value matches the target (178).

Finally, follow the same procedure for the blue channel:

Color Curve Adjustment Blue

As before, we adjust along the vertical axis x:173 until our blue channel matches the target (155).

At this point, our first sample point pixel should be the same color as from our target.

The important thing to take away from this exercise is to be watching your image as you are adjusting these channels to see what types of effects they produce. Dropping the green channel should have seen a slight addition of magenta to your image, and dropping the blue channel should have shown you the addition of a yellow to balance it.

Watch your image as you make these changes.

Don’t hit OK on your curves dialog yet!

You’ll want to repeat this procedure, but using some sample points that are darker than the previous ones. Our first sample points had values of about 85%, so now let’s see if we can match pixels down below 50% as well.

Without closing your curves dialog, you should be able to click and drag your sample points around still. So I would set your Sample Points dialog to show you HSV values again, and now drag your first point around on your image until you find some skin that’s in a darker value, maybe around 40-45%.

Once you do, try to find a corresponding value in your target image (or something close at least).

I managed to find skin tones with values around 45% in both of my images:

Color CUrve Skin Dark Color Curve Sking Dark RGB

In these darker tones, I can see that the adjustments I will have to make are for:

Red down a bit (116 → 114),

Green bumped up some (60 → 73),

Blue slightly down (55 → 53).

With the curves dialog still active, I then click and drag on my original image until I am in the same area as my sample point again. This give me my vertical line showing me the value location in my curves dialog, just as before:

Dark tones red
Red down to 114.
Dark tones green
Green up to 73.
Dark tones blue
Blue down to 53.

At this point you should have something similar to the tones of your target image. Here is my image after these adjustments so far:

Results so far GIMP Matching
Effects of the curves so far (click to compare to original).

Once you’ve got things in a state that you like, it would be a good idea to save your progress. At the top of the Curves dialog there is a “+” symbol. This will let you add the current settings to your favorites. This will allow you to recall these settings later to continue working on them.

However, you’re results might not quite look right at the moment. So why not?

Well, the first problem is that Sample Points will only allow you to sample a single pixel value. There’s a chance that the pixels you pick are not truly representative of the correct skin tones in that range (for instance you may have inadvertently clicked a pixel that represents the oil paint cracks in the image). It would be nice if there were an option for Sample Points to allow an adjustable sample radius (if there is an option I haven’t found it yet).

The second issue is that similar value points might be very different colors overall. Hopefully your sources will be nice for you to pick in areas that you know are relatively consistent and representative of the tones you want, but it’s not always a guarantee.

If the results are not quite what you want at the moment, you can do what I will sometimes do and go back to the beginning…

While still keeping the curves dialog open you can pull your sample points to another location, and match the target again. Try choosing another sample point with a similar value as the first one. This time instead of adding new points the curve as you make adjustments, just drag the existing points you previously placed.

It’s an Iterative Process

Depending on how interested you are in tweaking your resulting curve, you may find yourself going around a couple of times. That’s ok.

Iterative flowchart

I would recommend keeping your curves to having two control points at first. You want your curves to be smooth across the range (any abrupt changes will do strange things to your final image).

If you are doing a couple of iterations, try modifying existing points on your curves instead of adding new ones. It may not be an exact match, but it doesn’t have to be. It only needs to look nice to your eyes.

There won’t be a perfect solution for a perfect color matching between images, but we can produce pleasing curves that emulate the results we are looking for.

In Conclusion

I personally have found the process of doing this with different images to be quite instructive in how the curves will affect my image. If you try this out and pay careful attention to what is happening while you do it, I’m hopeful you will come away with a similar appreciation of what these curves will do.

Most importantly, don’t be constrained by what you are targeting, but rather use it as a stepping off point for inspiration and experimentation for your own expression!

I’ll finish with a couple of other examples…

Dot Botticelli Birth of Venus
Sandro Botticelli - The Birth of Venus) (click to compare to original)
Fa Presto - St. Michael (click to compare original)

And finally, as promised, here’s the video tutorial that steps through everything I’ve explained above:

From a request, I’ve packaged up some of the curves from this tutorial (Pearl Earring, St. Michael, the previous Orange/Teal Hell, and another I was playing with from a Norman Rockwell painting): Download the Curves (7zip .7z)

New Discuss Categories and Logging In


New Discuss Categories and Logging In

Software, Showcase, and Critiques. Oh My!

Hot on the heels of our last post about welcoming G’MIC to the forums at discuss.pixls.us, I thought I should speak briefly about some other additions I’ve recently made.

These were tough for me to finally make a decision about. I want to be careful and not get crazy with over-categorization. At the same time, I do want to make good logical breakdowns for people that is still intuitive.

Here is what the current category breakdown looks like for discuss:

  • PIXLS.US
    The comment/posts from articles/blogposts here on the main site.
  • Processing
    Processing and managing images after they’ve been captured.
  • Capturing
    Capturing an image and the ways we go about doing it.
  • Showcase
  • Critique
  • Meta
    Discussions related to the website or the forum itself.
    • Help!
      Help with the website or forums.
  • Software
    Discussions about various software in general.

Along with the addition of the Software category (and the G’MIC subcategory), I decided that the Help! category would make more sense under the Meta category. That is, the Help! section is for website/forum help, which is more of a Meta topic (hence moving it).

Software

As we’ve already seen, there is now a Software category for all discussions about the various software we use. The first sub-category to this is of course, the G’MIC subcategory.

F/OSS Project Logos

If there is enough interest in it, I am open to creating more sub-categories as needed to support particular software projects (GIMP, darktable, RawTherapee, etc…). I will wait until there is some interest before adding more categories here.

Showcase

This category had some interest from members and I agree that it’s a good idea. It’s intended as a place for members to showcase the works they’re proud of and to hopefully serve as a nice example of what we’re capable of producing using F/OSS tools.

A couple of examples from the Showcase category so far:

Filmulator Output Example, by Carlo Vaccari
New Life, Filmulator Output Sample, by CarVac
Mairi Troisieme, by Pat David
Mairi Troisième by Pat David (cbna)

There may be a use of this category later for storing submissions for a rotating lede image on the main page of the site.

Critique

This is intended as a place for members to solicit advice and critiques on their works from others. It took me a little work to come up with an initial take on the overall description for the category.

I can promise that I will do my best to give honest and constructive feedback to anyone that asks in this category. I also promise to do my best to make sure that no post goes un-answered here (I know how beneficial feedback has been to me in the past, so it’s the least I could do to help others out in return).

Discuss Login Options

I also bit the bullet this week and finally caved to sign up for a Facebook account. The only reason was because I had to have a personal account to get an API key to allow people to log in using their FB account (with OAuth).

dicuss.pixls.us login options
We can now use Google, Facebook, Twitter, and Yahoo! to Log In.

On the other hand, we now accept four different methods of logging in automatically along with signing up for a normal account. I have been trying to make it as frictionless as possible to join the conversation and hopefully this most recent addition (FB) will help in some small way.

Oh, and if you want to add me on Facebook, my profile can be found here. I also took the time to create a page for the site here: PIXLS.US on Facebook.

Basic Color Curves


Basic Color Curves

An introduction and simple color grading/toning

Color has this amazing ability to evoke emotional responses from us. From the warm glow of a sunny summer afternoon to a cool refreshing early evening in fall. We associate colors with certain moods, places, feelings, and memories (consciously or not).

Volumes have been written on color and I am in no ways even remotely qualified to speak on it. So I won’t.

Instead, we are going to take a look at the use of the Curves tool in GIMP. Even though GIMP is used to demonstrate these ideas, the principles are generic to just about any RGB curve adjustments.

Your Pixels and You

First there’s something you need to consider if you haven’t before, and that’s what goes into representing a colored pixel on your screen.

PIXLS.US House Zoom Example
Open up an image in GIMP.
PIXLS.US House Zoom Example
Now zoom in.
PIXLS.US House Zoom Example
Nope - don’t be shy now, zoom in more!
PIXLS.US House Zoom Example
Aaand there’s your pixel. So let’s investigate what goes into making your pixel.

Remember, each pixel is represented by a combination of 3 colors: Red, Green, and Blue. In GIMP (currently at 8-bit), that means that each RGB color can have a value from 0 - 255, and combining these three colors with varying levels in each channel will result in all the colors you can see in your image.

If all three channels have a value of 255 - then the resulting color will be pure white. If all three channels have a value of 0 - then the resulting color will be pure black.

If all three channels have the same value, then you will get a shade of gray (128,128,128 would be a middle gray color for instance).

So now let’s see what goes into making up your pixel:

GIMP Color Picker Pixel View
The RGB components that mix into your final blue pixel.

As you can see, there is more blue than anything else (it is a blue-ish pixel after all), followed by green, then a dash of red. If we were to change the values of each channel, but kept ratio the same between Red, Green, and Blue, then we would keep the same color and just lighten or darken the pixel by some amount.

Curves: Value

So let’s leave your pixel alone for the time being, and actually have a look at the Curves dialog. I’ll be using this wonderful image by Eric from Flickr.

Hollow Moon by Eric qsimple Flickr
Hollow Moon by qsimple/Eric on Flickr. (cbna)

Opening up my Curves dialog shows me the following:

GIMP Base Curves Dialog

We can see that I start off with the curve for the Value of the pixels. I could also use the drop down for “Channel” to change to red, green or blue curves if I wanted to. For now let’s look at Value, though.

In the main area of the dialog I am presented with a linear curve, behind which I will see a histogram of the value data for the entire image (showing the amount of each value across my image). Notice a spike in the high values on the right, and a small gap at the brightest values.

GIMP Base Curves Dialog Input Output

What we can do right now is to adjust the values of each pixel in the image using this curve. The best way to visualize it is to remember that the bottom range from black to white represents the current value of the pixels, and the left range is the value to be mapped to.

So to show an example of how this curve will affect your image, suppose I wanted to remap all the values in the image that were in the midtones, and to make them all lighter. I can do this by clicking on the curve near the midtones, and dragging the curve higher in the Y direction:

GIMP Base Curves Dialog Push Midtones

What this curve does is takes the values around the midtones, and pushes their values to be much lighter than they were. In this case, values around 128 were re-mapped to now be closer to 192.

Because the curve is set Smooth, there will be a gradual transition for all the tones surrounding my point to be pulled in the same direction (this makes for a smoother fall-off as opposed to an abrupt change at one value). Because there is only a single point in the curve right now, this means that all values will be pulled higher.

Hollow Moon Example Pushed Midtones
The results of pushing the midtones of the value curve higher (click to compare to original).

Care should be taken when fiddling with these curves to not blow things out or destroy detail, of course. I only push the curves here to illustrate what they do.

A very common curve adjustment you may hear about is to apply a slight “S” curve to your values. The effect of this curve would be to darken the dark tones, and to lighten the light tones - in effect increasing global contrast on your image. For instance, if I click on another point in the curves, and adjust the points to form a shape like so:

GIMP Base Curves Dialog S shaped curve
A slight “S” curve

This will now cause dark values to become even darker, while the light values get a small boost. The curve still passes through the midpoint, so middle tones will stay closer to what they were.

Hollow Moon Example S curve applied
Slight “S” curve increases global contrast (click for original).

In general, I find it easiest to visualize in terms of which regions in the curve will effect different tones in your image. Here is a quick way to visualize it (that is true for value as well as RGB curves):

GIMP Base Curves darks mids lights zones

If there is one thing you take away from reading this, let it be the image above.

Curves: Colors

So how does this apply to other channels? Let’s have a look.

The exact same theory applies in the RGB channels as it did with values. The relative positions of the darks, midtones, and lights are still the same in the curve dialog. The primary difference now is that you can control the contribution of color in specific tonal regions of your image.

Value, Red, Green, Blue channel picker.

You choose which channel you want to adjust from the “Channel” drop-down.

To begin demonstrating what happens here it helps to have an idea of generally what effect you would like to apply to your image. This is often the hardest part of adjusting the color tones if you don’t have a clear idea to start with.

For example, perhaps we wanted to “cool” down the shadows of our image. “Cool” shadows are commonly seen during the day in shadows out of direct sunlight. The light that does fall in shadows is mostly reflected light from a blue-ish sky, so the shadows will trend slightly more blue.

To try this, let’s adjust the Blue channel to be a little more prominent in the darker tones of our image, but to get back to normal around the midtones and lighter.

Boosting blues in darker tones
Pushing up blues in darker tones (click for original).

Now, here’s a question: If I wanted to “cool” the darker tones with more blue, what if I wanted to “warm” the lighter tones by adding a little yellow?

Well, there’s no “Yellow” curve to modify, so how to approach that? Have a look at this HSV color wheel below:

The thing to look out for here is that opposite your blue tones on this wheel, you’ll find yellow. In fact, for each of the Red, Green, and Blue channels, the opposite colors on the color wheel will show you what an absence of that color will do to your image. So remember:

RedCyan GreenMagenta BlueYellow

What this means to you while manipulating curves is that if you drag a curve for blue up, you will boost the blue in that region of your image. If instead you drag the curve for blue down, you will be removing blues (or boosting the Yellows in that region of your image).

So to boost the blues in the dark tones, but increase the yellow in the lighter tones, you could create a sort of “reverse” S-curve in the blue channel:

Boost blues in darks, boost yellow in high tones (click for original).

In the green channel for instance, you can begin to introduce more magenta into the tones by decreasing the curve. So dropping the green curve in the dark tones, and letting it settle back to normal towards the high tones will produce results like this:

Suppressing the green channel in darks/mids adds a bit of magenta
(click for original).

In isolation, these curves are fun to play with, but I think that perhaps walking through some actual examples of color toning/grading would help to illustrate what I’m talking about here. I’ll choose a couple of common toning examples to show what happens when you begin mixing all three channels up.

Color Toning/Grading

Orange and Teal Hell

I use the (cinema film) term color grading here because the first adjustment we will have a look at to illustrate curves is a horrible hollywood trend that is best described by Todd Miro on his blog.

Grading is a term for color toning on film, and Todd’s post is a funny look at the prevalence of orange and teal in modern film palettes. So it’s worth a look just to see how silly this is (and hopefully to raise awareness of the obnoxiousness of this practice).

The general thought here is that caucasian skin tones trend towards orange, and if you have a look at a complementary color on the color wheel, you’ll notice that directly opposite orange is a teal color.

Screenshot from Kuler borrowed from Todd.

If you don’t already know about it, Adobe has online a fantastic tool for color visualization and palette creation called Kuler Adobe Color CC. It lets you work on colors based on some classic rules, or even generate a color palette from images. Well worth a visit and a fantastic bookmark for fiddling with color.

So a quick look at the desired effect would be to keep/boost the skin tones into a sort of orange-y pinkish color, and to push the darker tones into a teal/cyan combination. (Colorists on films tend to use a Lift, Gamma, Gain model, but we’ll just try this out with our curves here).

Quick disclaimer - I am purposefully exaggerating these modifications to illustrate what they do. Like most things, moderation and restraint will go a long ways towards not causing your viewers eyeballs to bleed. Remember - light touch!

So I know that I want to see my skin tones head into an orange-ish color. In my image the skin tones are in the upper mids/low highs range of values, so I will start around there.

What I’ve done is put a point around the low midtones to anchor the curve closer to normal for those tones. This lets me fiddle with the red channel and to isolate it roughly to the mid and high tones only. The skin tones in this image in the red channel will fall toward the upper end of the mids, so I’ve boosted the reds there. Things may look a little weird at first:

If you look back at the color wheel again, you’ll notice that between red and green, there is a yellow, and if you go a bit closer towards red the yellow turns to more of an orange. What this means is that if we add some more green to those same tones, the overall colors will start to shift towards an orange.

So we can switch to the green channel now, put a point in the lower midtones again to hold things around normal, and slightly boost the green. Don’t boost it all the way to the reds, but about 2/3rds or so to taste.

This puts a little more red/orange-y color into the tones around the skin. You could further adjust this by perhaps including a bit more yellow as well. To do this, I would again put an anchor point in the low mid tones on the blue channel, then slightly drop the blue curve in the upper tones to introduce a bit of yellow.

Remember, we’re experimenting here so feel free to try things out as we move along. I may consider the upper tones to be finished at the moment, and now I would want to look at introducing a more blue/teal color into the darker tones.

I can start by boosting a bit of blues in the dark tones. I’m going to use the anchor point I already created, and just push things up a bit.

Now I want to make the darker tones a bit more teal in color. Remember the color wheel - teal is the absence of red - so we will drop down the red channel in the lower tones as well.

And finally to push a very slight magenta into the dark tones as well, I’ll push down the green channel a bit.

If I wanted to go a step further, I could also put an anchor point up close to the highest values to keep the brightest parts of the image closer to a white instead of carrying over a color cast from our previous operations.

If your previous operations also darkened the image a bit, you could also now revisit the Value channel, and make modifications there as well. In my case I bumped the midtones of the image just a bit to brighten things up slightly.

Finally to end up at something like this.

After fooling around a bit - disgusting, isn’t it?
(click for original).

I am exaggerating things here to illustrate a point. Please don’t do this to your photos. :)

If you’d like to download the curves file of the results we reached above, get it here:
Orange Teal Hell Color Curves

Conclusion

Remember, think about what the color curves represent in your image to help you achieve your final results. Begin looking at the different tonalities in your image and how you’d like them to appear as part of your final vision.

For even more fun - realize that the colors in your images can help to evoke emotional responses in the viewer, and adjust things accordingly. I’ll leave it as an exercise for the reader to determine some of the associations between colors and different emotions.

Welcome G'MIC


Welcome G'MIC

Moving G'MIC to a modern forum

Anyone who’s followed me for a while likely knows that I’m friends with G’MIC (GREYC’s Magic for Image Computing) creator David Tschumperlé. I was also able to release all of my film emulation presets on G’MIC for everyone to use with David’s help and we collaborated on a bunch of different fun processing filters for photographers in G’MIC (split details/wavelet decompose, freaky details, film emulation, mean/median averaging, and more).

David Tschumperle beauty dish GMIC
David, by Me (at LGM2014)

It’s also David that helped me by writing a G’MIC script to mean average images for me when I started making my amalgamations (Thus moving me away from my previous method of using Imagemagick):

Mad Max Fury Road Trailer 2 - Amalgamation
Mad Max Fury Road Trailer 2 - Amalgamation

So when the forums here on discuss.pixls.us were finally up and running, it only made sense to offer G’MIC its own part of the forums. They had previously been using a combination of Flickr groups and gimpchat.com. These are great forums, they were just a little cumbersome to use.

You can find the new G’MIC category here. Stop in and say hello!

I’ll also be porting over the tutorials and articles on work we’ve collaborated on soon (freaky details, film emulation).

Congratulations


Congratulations

To the winners of the Open Source Photography Course Giveaway

I compiled the list of entries this afternoon across the various social networks and let random.org pick an integer in the domain of all of the entries…

So a big congratulations goes out to:

Denny Weinmann (Facebook, @dennyweinmann, Google+ )
and
Nathan Haines (@nhaines, Google+)

I’ll be contacting you shortly (assuming you don’t read this announcement here first…)! I will need a valid email address from you both in order to send your download links. You can reach me at pixlsus@pixls.us.

Thank you to everyone who shared the post to help raise awareness! The lessons are still on sale until August 1st for $35USD over on Riley’s site.

The Open Source Photography Course


The Open Source Photography Course

A chance to win a free copy

Photographer Riley Brandt recently released his Open Source Photography Course. I managed to get a little bit of his time to answer some questions for us about his photography and the course itself. You can read the full interview right here:

A Q&A with Photographer Riley Brandt

As an added bonus just for PIXLS.US readers, he has gifted us a nice surprise!

Did Someone Say Free Stuff?

Riley went above and beyond for us. He has graciously offered us an opportunity for 2 readers to win a free copy of the course (one in an open format like WebM/VP8, and another in a popular format like MP4/H.264)!

For a chance to win, I’m asking you to share a link to this post on:

with the hashtag #PIXLSGiveAway (you can click those links to share to those networks). Each social network counts as one entry, so you can triple your chances by posting across all three.

Next week (Monday, 2015-07-20 Wednesday, 2015-07-22 to give folks a full week), I will search those networks for all the posts and compile a list of people, from which I’ll pick the winners (using random.org). Make sure you get that hashtag right! :)

Some Previews

Riley has released three nice preview videos to give a taste of what’s in the courses:

A Q&A with Photographer Riley Brandt


A Q&A with Photographer Riley Brandt

On creating a F/OSS photography course

Riley Brandt is a full-time photographer (and sometimes videographer) at the University of Calgary. He previously worked for the weekly (Calgary) local magazine Fast Forward Weekly (FFWD) as well as Sophia Models International, and his work has been published in many places from the Wall Street Journal to Der Spiegel (and more).

Riley Brandt Logo

He recently announced the availability of The Open Source Photography Course. It’s a full photographic workflow course using only free, open source software that he has spent the last ten months putting together.

Riley has graciously offered two free copies for us to give away!
For a chance to win, see this blog post.

Riley Brandt Photography Course Banner

I was lucky enough to get a few minutes of Riley’s time to ask him a few questions about his photography and this course.

A Chat with Riley Brandt

Tell us a bit about yourself!

Hello, my name is Riley Brandt and I am a professional photographer at the University of Calgary.

At work, I get to spend my days running around a university campus taking pictures of everything from a rooster with prosthetic legs made in a 3D printer, to wild students dressed in costumes jumping into freezing cold water for charity. It can be pretty awsome.

Outside of work, I am a supporter of Linux and open source software. I am also a bit of a film geek.

Univ. Calgary Prosthetic Rooster
[ed. note: He’s not kidding - That’s a rooster with prosthetic legs…]

I see you were trained in photojournalism. Is this still your primary photographic focus?

Though I definitely enjoy portraits, fashion and lifestyle photography, my day to day work as a photographer at a university is very similar to my photojournalism days.

I have to work with whatever poor lighting conditions I am given, and I have to turn around those photos quickly to meet deadlines.

However, I recently became an uncle for the first time to a baby boy, so I imagine I will be expanding into new born and toddler photography very soon :)

Riley Brandt Environment Portrait Sample
Environmental Portrait by Riley Brandt

How long have you been a photographer?

Photography started as a hobby for me when I was living the Czech Republic in the late 90s and early 2000s. My first SLR camera was the classic Canon AE1 (which I still have).

I didn’t start to work as a full time professional photographer until I graduated from the Journalism program at SAIT Polytechnic in 2008.

What type of photography do you enjoy doing the most?

In a nutshell, I enjoy photographing people. This includes both portraits and candid moments at events.

I love meeting someone with an interesting story, and then trying to capture some of their personality in an image.

At events, I’ve witnessed everything from the joy of someone meeting an astronaut they idolize, to the anguish of a parent at graduation collecting a degree instead of their child who was killed. Capturing genuine emotion at events is challenging, and overwhelming at times, but is also very gratifying.

It would be hard for me to choose between candids or portraits. I enjoy them both.

Riley Brandt Portraits
Portraits by Riley Brandt

How would you describe your personal style?

I’ve been told several times that my images are very “clean”. Which I think means I limit the image to only a few key elements, and remove any major distractions.

If you had to choose your favorite image from your portfolio, what would it be?

I don’t have a favorite image in my collection.

However, at the end of a work week, I usually have at least one image that I am really happy with. A photo that I will look at again when I get home from work. An image that I look forward to seeing published. Those are my favorites.

Has free-software always been the foundation of your workflow?

Definitely not. I started with Adobe software, and still use it (and other non-free software) at work. Though hopefully that will change.

I switched to free software for all my personal work at home, because all my computers at home run Linux.

I also dislike at lot of Adobe’s actions as a company, ie: horrible security and switching to a “cloud” version of their software which is really just a DRM scheme.

There many significant reasons to not run non-free software, but what really motivated my switch initially was simply that Adobe never released a Linux version of their software.

What is your normal OS/platform?

I guess I am transitioning from Ubuntu to Fedora (both GNU/Linux). My main desktop is still running Ubuntu Gnome 14.04. But my laptop is running Fedora 21.

Ubuntu doesn’t offer an up to date version of the Gnome desktop environment. It also doesn’t use the Gnome Software Centre or many Gnome apps. Fedora does. So my desktop will be running Fedora in the near future as well.

Riley Brandt Summer Days Riley Brandt Summer Days
Lifestyle by Riley Brandt

What drove you to consider creating a free-software centric course?

Because it was so difficult for me to transition from Adobe software to free software, I wanted to provide an easier option for others trying to do the same thing.

Instead of spending weeks or months searching through all the different manuals, tutorials and websites, someone can spend a weekend watching my course and be up and running quickly.

Also, it was just a great project to work on. I got to combine two of my passions, Linux and photography.

Is the course the same as your own approach?

Yes, it’s the same way I work.

I start with fundamentals like monitor calibration and file management. Then onto basics like correcting exposure, color, contrast and noise. After that, I cover less frequently used tools. It’s the same way I work.

The course focuses heavily on darktable for RAW processing - have you also tried any of the other options such as RawTherapee?

I originally tried digiKam because it looked like it had most of the features I needed. However, KDE and I are like oil and water. The user interface felt impenetrable to me, so I moved on.

I also tried RawTherapee, but only briefly. I got some bad results in the beginning, but that was probably due to my lack of familiarity with the software. I might give it another go one day.

Once darktable added advanced selective editing with masks, I was all in. I like the photo management element as well.

Riley Brandt Portraits

Have you considered expanding your (course) offerings to include other aspects of photography?

Umm.. not just yet. I first need to rest :)

If you were to expand the current course, what would you like to focus on next?

It’s hard to say right now. Possibly a more in depth look at GIMP. Or a series where viewers watch me edit photos from start to finish.

It took 10 months to create this course, will you be taking a break or starting right away on the next installment? :)

A break for sure :) I spent most of my weekends preparing and recording a lesson for the past year. So yes, first a break.

Some parting words?

I would like to recommend the Desktop Publishing course created by GIMP Magazine editor Steve Czajka for anyone who is trying to transition from Adobe InDesign to Scribus.

I would also love to see someone create a similar course for Inkscape.

The Course

Riley Brandt Photography Course Banner

The Open Source Photography Course is available for order now at Riley’s website. The course is:

  • Over 5 hours of video material
  • DRM free
  • 10% of net profits donated back to FOSS projects
  • Available in open format (WebM/VP8) or popular (H.264), all 1080p
  • $50USD

He has also released some preview videos of the course:

From his site is a nice course outline to get a feel for what is covered:

Course Outline

Chapter 1. Getting Started

  1. Course Introduction
    Welcome to The Open Source Photography Course
  2. Calibrate Your Monitor
    Start your photography workflow the right way by calibrating your monitor with dispcalGUI
  3. File Management
    Make archiving and searching for photos easier by using naming conventions and folder organization
  4. Download and Rename
    Use Rapid Photo Downloader to rename all your photos during the download process

Chapter 2. Raw Editing in darktable

  1. Introduction to darktable, Part One
    Get to know darktable’s user interface
  2. Introduction to darktable, Part Two
    Take a quick look at the slideshow view in darktable
  3. Import and Tag
    Import photos into darktable and tag them with keywords, copyright information and descriptions
  4. Rating Images
    Learn an efficient way to cull, rate, add color labels and filter photos in lighttable
  5. Darkroom Overview
    Learn the basics of the darkroom view including basic module adjustments and creating favorites
  6. Correcting Exposure, Part 1
    Correct exposure with the base curves, levels, exposure, and curves modules
  7. Correcting Exposure, Part 2
    See several examples of combining modules to correct an image’s exposure
  8. Correct White Balance
    Use presets and make manual changes in the white balance module to color correct your images
  9. Crop and Rotate
    Navigate through the many crop and rotate options including guides and automatic cropping
  10. Highlights and Shadows
    Recover details lost in the shadows and highlights of your photos
  11. Adding Contrast
    Make your images stand out by adding contrast with the levels, tone curve and contrast modules
  12. Sharpening
    Fix those soft images with the sharpen, equalizer and local contrast modules
  13. Clarity
    Sharpen up your midtones by utilizing the local contrast and equalizer modules
  14. Lens Correction
    Learn how to fix lens distortion, vignetting and chromatic aberrations
  15. Noise Reduction
    Learn the fastest, easiest and best way to clean up grainy images taken in low light
  16. Masks, Part one
    Discover the possibilities of selective editing with the shape, gradient and path tools
  17. Masks, Part Two
    Take you knowledge of masks further in this lesson about parametric masks
  18. Color Zones
    Learn how to limit your adjustments to a specific color’s hue, saturation or brightness
  19. Spot Removal
    Save time by making simple corrections in darktable, instead of opening up GIMP
  20. Snapshots
    Quickly compare different points in your editing history with snapshots
  21. Presets and Styles
    Save your favorite adjustments for later with presets and styles
  22. Batch Editing
    Save time by editing one image, then quickly applying those same edits to hundreds of images
  23. Searching for Images
    Learn how to sort and search through a large collection of images in Lighttable
  24. Adding Effects
    Get creative in the effects group with vignetting, framing, split toning and more
  25. Exporting Photos
    Learn how to rename, resize and convert you RAW photos to JPEG, TIFF and other formats

Chapter 3. Touch Ups in GIMP

  1. Introduction to GIMP
    Install GIMP, then get to know your way around the user interface
  2. Setting Up GIMP, Part 1
    Customize the user interface, adjust a few tools and install color profiles
  3. Setting Up GIMP, Part 2
    Set keyboard shortcuts that mimic Photoshop’s and install a couple of plugins
  4. Touch Ups
    Use the heal tool and the clone tool to clean up your photos
  5. Layer Masks
    Learn how to make selective edits and non-destructive edits using layer masks
  6. Removing Distractions
    Combine layers, a helpful plugin and layer masks to remove distractions from your photos
  7. Preparing Images for the Web
    Reduce file size while retaining quality before you upload your photos to the web
  8. Getting Help and Finding the Community
    Find out which websites, mailing lists and forums to go to for help and friendly discussions

All the images in this post © Riley Brandt.

darktable on Windows


darktable on Windows

Why don't you provide a Windows build?

Due to the heated debate lately, a short foreword:

We do not want to harass, insult or criticize anyone due to his or her choice of operating system. Still, from time to time we encounter comments from people accusing us of ignorance or even disrespect towards Windows users. If any of our statements can be interpreted such, we want to apologize for that – and once more give the full explanation of our lacking Windows support.

The darktable project

darktable is developed and maintained by a small group of people in their spare time, just for fun. We do not have any funds, do not provide travel reimbursements for conferences or meetings, and don’t even have a legal entity at the moment. In other words: None of the developers has ever seen (and most likely will ever see) a single $(INSERT YOUR CURRENCY) for the development of darktable, which is thus a project purely driven by enthusiasm and curiosity.

The development environment

The team is quite mixed, some have a professional background in computing, others don’t. But all love photography and like exploring the full information recorded by the camera themselves. Most new features are added to darktable as an expert for, let’s say GPU computing, steps up and is willing to provide and maintain code for the new feature.

Up till now there is one technical thing that unites all developers: None of them is using Windows as operating system. Some are using Mac OSX, Solaris, etc, but most run some Linux distribution. New flavors of operating systems kept being added to our list with people willing to support their favorite system joining the team.

Also (since this stands out a bit as “commercial operating system”) Mac OS X support arrived in exactly this way. Someone (parafin!) popped up, said: “I like this software, and I want to run darktable on my Mac.”, compiled it on OS X and since then does testing and package building for the Mac OS X operating system. And this is not an easy job. Initially there were just snapshot builds from git, no official releases, not even release candidates – but already the first complaints about the quality arrived. Finally, there was a lot of time invested in working around specific peculiarities of this operating system to make it work and provide builds for every new version of darktable released.

This nicely shows one of the consequences of the project’s organizational (non-) structure and development approach: at first, every developer cares about darktable running on his personal system.

Code contributions and feature requests

Usually feature requests from users or from the community are treated like a brainstorming session. Someone proposes a new feature, people think and discuss about it – and if someone likes the idea and has time to code it, it might eventually come – if the team agrees on including the feature.

But life is not a picnic. You probably wouldn’t pass by your neighbor and demand from him to repair your broken car – just because you know he loves to tinker with his vintage car collection at home.
Same applies here. No one feels comfortable if suddenly request are being made that would require a non-negligible amount of work – but with no return for the person carrying out the work, neither moneywise nor intellectually.

This is the feeling created every time someone just passes by leaving as only statement: “Why isn’t there a Windows build (yet)?”.

Providing a Windows build for darktable

The answer has always been the same: because no one stepped up doing it. None of the passers-by requesting a Windows build actually took the initiative, just downloaded the source code and started the compilation. No one approached the development team with actual build errors and problems encountered during a compilation using MinGW or else on Windows. The only thing ever aired were requests for ready-made binaries.

As stated earlier here, the development of darktable is totally about one’s own initiative. This project (as many others) is not about ordering things and getting them delivered. It’s about starting things, participating and contributing. It’s about trying things out yourself. It’s FLOSS.

One argument that pops up from time to time is: “darktable’s user base would grow immensely with a Windows build!”. This might be true. But – what’s the benefit from this? Why should a developer care how many people are using the software if his or her sole motivation was producing a nice software that he/she could process raw files with?

On the contrary: more users usually means more support, more bug tracker tickets, more work. And this work usually isn’t the pleasing sort, hunting seldom bugs occurring with some rare camera’s files on some other operating system is usually not exactly what people love to spent their Saturday afternoon on.

This argumentation would totally make sense if darktable would be sold, the developers paid and the overall profit would depend on the number of people using the software. No one can be blamed for sending such requests to a company selling their software or service (for your money or your data, whatever) – and it is up to them to make an economical decision on whether it makes sense to invest the time and manpower or not.

But this is different.

Not building darktable on Windows is not a technical issue after all. There certainly are problems of portability, and code changes would be necessary, but in the end it would probably work out. The real problem is (as has been pointed out by the darktable development team many times in the past) the maintenance of the build as well as all the dependencies that the package requires.

The darktable team is trying to deliver a high-quality reliable software. Photographers rely on being able to re-process their old developments with recent versions of darktable obtaining exactly the same result – and that on many platforms, being it CPUs or GPUs with OpenCL. Satisfying this objective requires quite some testing, thinking and maintenance work.

Spawning another build on a platform that not a single developer is using would mean lots and lots of testing – in unfamiliar terrain, and with no fun attached at all. Releasing a half-way working, barely tested build for Windows would harm the project’s reputation and diminish the confidence in the software treating your photographs carefully.

We hope that this reasoning is comprehensible and that no one feels disrespected due to the choice of operating system.

References

That other OS

PhotoFlow Blended Panorama Tutorial


PhotoFlow Blended Panorama Tutorial

Andrea Ferrero has been busy!

After quite a bit of back and forth I am quite happy to be able to announce that the latest tutorial is up: A Blended Panorama with PhotoFlow! This contribution comes from Andrea Ferrero, the creator of a new project: PhotoFlow.

In it, he walks through a process of stitching a panorama together using Hugin and blending multiple exposure options through masking in PhotoFlow (see lede image). The results are quite nice and natural looking!

Local Contrast Enhancement: Gaussian vs. Bilateral

Andrea also runs through a quick video comparison of doing LCE using both a Gaussian and Bilateral blur, in case you ever wanted to see them compared side-by-side:

He started a topic post about it in the forums as well.

Thoughts on the Main Page

Over on discuss I started a thread to talk about some possible changes to the main page of the site.

Specifically I’m talking about the background lede image at the very top of the main page:

I had originally created that image as a placeholder in Blender. The site is intended as a photography-centric site, so the natural thought was why not use photos as a background instead?

The thought is to rotate through images as provided by the community. I’ve also mocked up two version of using an image as a background.

Simple replacement of the image with photos from the community. This is the most popular in the poll on the forum at the moment. The image will be rotated amongst images provided by community members. I just need to make sure that the text shown is legible over whatever the image may be…

Full viewport splash version, where the image fills the viewport. This is not very popular from the feedback I received (thank you akk, ankh, muks, DrSlony, LebedevRI, and others on irc!). I personally like the idea but I can understand why others may not like it.

If anyone wants to chime in (or vote in the poll) then head over to the forum topic and let us know your thoughts!

Also, a big thank you to Morgan Hardwood for allowing us to use that image as a background example. If you want a nice way to support F/OSS development, it just so happens that Morgan is a developer for RawTherapee, and a print of that image is available for purchase. Contact him for details.

A Blended Panorama with PhotoFlow


A Blended Panorama with PhotoFlow

Creating panoramas with Hugin and PhotoFlow

The goal of this tutorial is to show how to create a sort-of-HDR panoramic image using only Free and Open Source tools. To explain my workflow I will use the image below as an example.

This panorama was obtained from the combination of six views, each consisting of three bracketed shots at -1EV, 0EV and +1EV exposure. The three exposures are stitched together with the Hugin suite, and then exposure-blended with enfuse. The PhotoFlow RAW editor is used to prepare the initial images and to finalize the processing of the assembled panorama. The final result of the post-processing is below:

Final result
Final result of the panorama editing (click to compare to simple +1EV exposure)

In this case I have used the brightest image for the foreground, the darkest one for the sky and clouds, and and exposure-fused one for a seamless transition between the two.

The rest of the post will show how to get there…

Before we continue, let me advise you that I’m not a pro, and that the tips and “recommendations” that I’ll be giving in this post are mostly derived from trial-and-error and common sense. Feel free to correct/add/suggest anything… we are all here to learn!

Taking the shots

Shooting a panorama requires a bit of preparation and planning to make sure that one can get the best out of Hugin when stitching the shots together. Here is my personal “checklist”:

  • Manual Focus - set the camera to manual focus, so that the focus plane is the same for all shots
  • Overlap Shots - make sure that each frame has sufficient overlap with the previous one (something between 1/2 and 1/3 of the total area), so that hugin can find enough control points to align the images and determine the lens correction parameters
  • Follow A Straight Line - when taking the shots, try to follow as much as possible a straight line (keeping for example the horizon at the same height in your viewfinder); if you have a tripod, use it!
  • Frame Appropriately - to maximize the angle of view, frame vertically for an horizontal panorama (and vice-versa for a vertical one)
  • Leave Some Room - frame the shots a bit wider than needed, to avoid bad surprises when cropping the stitched panorama
  • Fixed Exposure - take all shots with a fixed exposure (manual or locked) to avoid luminance variations that might not be fully compensated by hugin
  • Bracket if Needed - if you shoot during a sunny day, the brightness might vary significantly across the whole panorama; in this case, take three or more bracketed exposures for each view (we will see later how to blend them in the post-processing)

Processing the RAW files

If you plan to create the panorama starting from the in-camera Jpeg images, you can safely skip this section. On the other hand, if you are shooting RAW you will need to process and prepare all the input images for Hugin. In this case it is important to make sure that the RAW processing parameters are exactly the same for all the shots. The best is to adjust the parameters on one reference image, and then batch-process the rest of the images using those settings.

Using PhotoFlow

Loading and processing a RAW file is rather easy:

  1. Click the “Open” button and choose the appropriate RAW file from your hard disk; the image preview area will show at this point a grey and rather dark image

  2. Add a “RAW developer” layer; a configuration dialog will show up which allows to access and modify all the typical RAW processing parameters (white balance, exposure, color conversion, etc… see screenshots below).

More details on the RAW processing in PhotoFlow can be found in this tutorial.

Once the result is ok the RAW processing parameters need to be saved into a preset. This can be done following a couple of simple steps:

  1. Select the “RAW developer” layer and click on the “Save” button below the layers list widget (at the bottom-right of the photoflow’s window)

  2. A file chooser dialog chooser dialog will pop-up, where one has to choose an appropriate file name and location for the preset and then click “Save”;
    the preset file name must have a “.pfp” extension

The saved preset needs then to be applied to all the RAW files in the set. Under Linux, PhotoFlow comes with an handy script that automates the process. The script is called pfconv and can be found here. It is a wrapper around the pfbatch and exiftool commands, and is used to process and convert a bunch of files to TIFF format. Save the script in one of the folders included in your PATH environment variable (for example /usr/local/bin) and make it executable:

sudo chmod u+x /usr/local/bin/pfconv

Processing all RAW files of a given folder is quite easy. Assuming that the RAW processing preset is stored in the same folder under the name raw_params.pfp, run this commands in your preferred terminal application:

cd panorama_dir
pfconv -p raw_params.pfp *.NEF

Of course, you have to change panorama_dir to your actual folder and the .NEF extension to the one of your RAW fles.

Now go for a cup of coffee, and be patient… a panorama with three or five bracketed shots for each view can easily have more than 50 files, and the processing can take half an hour or more. Once the processing completed, there will be one tiff file for each RAW image, an the fun with Hugin can start!

Assembling the shots

Hugin is a powerful and free software suite for stitching multiple shots into a seamless panorama, and more. Under Linux, Hugin can be usually installed through the package manager of your distribution. In the case of Ubuntu-based distros it can be usually installed with:

sudo apt-get install hugin

If you are running Hugin for the first time, I suggest to switch the interface type to Advanced in order to have full control over the available parameters.

The first steps have to be done in the Photos tab:

  1. Click on Add images and load all the tiff files included in your panorama. Hugin should automatically determine the lens focal length and the exposure values from the EXIF data embedded in the tiff files.

  2. Click on Create control points to let hugin determine the anchor points that will be used to align the images and to determine the lens correction parameters so that all shots overlap perfectly. If the scene contains a large amount of clouds that have likely moved during the shooting, you can try setting the feature matching algorithm to cpfind+celeste to automatically exclude non-reliable control points in the clouds.

  3. Set the geometric parameters to Positions and Barrel Distortion and hit the Calculate button.

  4. Set the photometric parameters to High dynamic range, fixed exposure (since we are going to stitch bracketed shots that have been taken with fixed exposures), and hit the Calculate button again.

At this point we can have a first look at the assembled panorama. Hugin provides an OpenGL-based previewer that can be opened by clicking on the on the GL icon in the top toolbar (marked with the arrow in the above screenshot). This will open a window like this:

If the shots have been taken handheld and are not perfectly aligned, the panorama will probably look a bit “wavy” like in my example. This can be easily fixed by clicking on the Straighten button (at the top of the Move/Drag tab). Next, the image can be centered in the preview area with the Center and Fit buttons.

If the horizon is still not straight, you can further correct it by dragging the center of the image up or down:

At this point, one can switch to the Projection tab and play with the different options. I usually find the Cylindrical projection better than the Equirectangular that is proposed by default (the vertical dimension is less “compressed”). For architectural panoramas that are not too wide, the Rectilinear projection can be a good option since vertical lines are kept straight.

If the projection type is changed, one has to click once more on the Center and Fit buttons.

Finally, you can switch to the Crop tab and click on the HDR Autocrop button to determine the limits of the area containing only valid pixels.

We are now done with the preview window; it can be closed and we can go back to the main window, in the Stitcher tab. Here we have to set the options to produce the output images the way we want. The idea is to blend each bracketed exposure into a separate panorama, and then use enfuse to create the final exposure-blended version. The intermediate panoramas, which will be saved along with the enfuse output, are already aligned with respect to each other and can be combined using different type of masks (luminosity, gradients, freehand, etc…).

The Stitcher tab has to be configured as in the image below, selecting Exposure fused from any arrangement and Blended layers of similar exposure, without exposure correction. I usually set the output format to TIFF to avoid compression artifacts.

The final act starts by clicking on the Stitch! button. The input images will be distorted, corrected for the lens vignetting and blended into seamless panoramas. The whole process is likely to take quite long, so it is probably a good opportunity for taking a pause…

At the end of the processing, few new images should appear in the output directory: one with an “_blended_fused.tif” suffix containing the output of the final enfuse step, and few with an “exposure????.tif” suffix that contain intermediate panoramas for each exposure value.

Blending the exposures

Very often, photo editing is all about getting what your eyes have seen out of what your camera has captured.

The image that will be edited through this tutorial is no exception: the human vision system can “compensate” large luminosity variations and can “record” scenes with a wider dynamic range than your camera sensor. In the following I will attempt to restore such large dynamics by combining under- and over-exposed shots together, in a way that does not produce unpleasing halos or artifacts. Nevertheless, I have intentionally pushed the edit a bit “over the top” in order to better show how far one can go with such a technique.

This second part introduces a certain number of quite general editing ideas, mixed with details specific to their realization in PhotoFlow. Most of what is described here can be reproduced in GIMP with little extra effort, but without the ease of non-destructive editing.

The steps that I followed to go from one to the other can be more or less outlined like that:

  1. take the foreground from the +1EV version and the clouds from the -1EV version; use the exposure-blended Hugin output to improve the transition between the two exposures

  2. apply an S-shaped tonal curve to increase the overall brightness and add contrast.

  3. apply a combination of the a and b channels of the CIE-Lab colorspace in overlay blend mode to give more “pop” to the green and yellow regions in the foreground

The image below shows side-by-side three of the output images produced with Hugin at the end of the first part. The left part contains the brightest panorama, obtained by blending the shots taken at +1EV. The right part contains the darkest version, obtained from the shots taken at -1EV. Finally, the central part shows the result of running the enfuse program to combine the -1EV, 0EV and +1EV panoramas.

Comparison between the +1EV exposure (left), the enfuse output (center) and the -1EV exposure (right)

Exposure blending in general

In scenes that exhibit strong brightness variations, one often needs to combine different exposures in order to compress the dynamic range so that the overall contrast can be further tweaked without the risk of losing details in the shadows or highlights.

In this case, the name of the game is “seamless blending”, i.e. combining the exposures in a way that looks natural, without visible transitions or halos. In our specific case, the easiest thing would be to simply combine the +1EV and -1EV images through some smooth transition, like in the example below.

Simple blending of the +1EV and -1EV exposures

The result is not too bad, however it is very difficult to avoid some brightening of the bottom part of the clouds (or alternatively some darkening of the hills), something that will most likely look artificial even if the effect is subtle (our brain will recognize that something is wrong, even if one cannot clearly explain the reason…). We need something to “bridge” the two images, so that the transition looks more natural.

At this point it is good to recall that the last step performed by Hugin was to call the enfuse program to blend the three bracketed exposures. The enfuse output is somehow intermediate between the -1EV and +1EV versions, however a side-by-side comparison with the 0EV image reveals the subtle and sophisticated work done by the program: the foreground hill is brighter and the clouds are darker than in the 0EV version. And even more importantly, this job is done without triggering any alarm in your brain! Hence, the enfuse output is a perfect candidate to improve the transition between the hill and the sky.

Final result
Enfuse output (click to see 0EV version)

Exposure blending in PhotoFlow

It is time to put all the stuff together. First of all, we should open PhotoFlow and load the +1EV image. Next we need to add the enfuse output on top of it: for that you first need to add a new layer (1) and choose the Open image tool from the dialog that will open up (2)(see below).

Inserting as image from disk as a layer

After clicking the “OK” button, a new layer will be added and the corresponding configuration dialog will be shown. There you can choose the name of the file to be added; in this case, choose the one ending with “_blended_fused.tif” among those created by Hugin:

“Open image” tool dialog

Layer masks: theory (a bit) and practice (a lot)

For the moment, the new layer completely replaces the background image. This is not the desired result: instead, we want to keep the hills from the background layer and only take the clouds from the “_blended_fused.tif” version. In other words, we need a layer mask.

To access the mask associated to the “enfuse” layer, double-click on the small gradient icon next to the name of the layer itself. This will open a new tab with an initially empty stack, where we can start adding layers to generate the desired mask.

How to access the grayscale mask associated to a layer

In PhotoFlow, masks are edited the same way as the rest of the image: through a stack of layers that can be associated to most of the available tools. In this specific case, we are going to use a combination of gradients and curves to create a smooth transition that follows the shape of the edge between the hills and the clouds. The technique is explained in detail in this screencast.

To avoid the boring and lengthy procedure of creating all the necessary layers, you can download this preset file and load it as shown below:

The mask is initially a simple vertical linear gradient. At the bottom (where the mask is black) the associated layer is completely transparent and therefore hidden, while at the top (where the mask is white) the layer is completely opaque and therefore replaces anything below it. Everywhere in between, the layer has a degree of transparency equal to the shade of gray in the mask.

In order to show the mask, activate the “show active layer” radio button below the preview area, and then select the layer that has to be visualized. In the example above, I am showing the output of the topmost layer in the mask, the one called “transition”. Double-clicking on the name of the “transition layer allows to open the corresponding configuration dialog, where the parameters of the layer (a curves adjustment in this case) can be modified. The curve is initially a simple diagonal: output values exactly match input ones.

If the rightmost point in the curve is moved to the left, and the leftmost to the right, it is possible to modify the vertical gradient and the reduce the size of the transition between pure black and pure white, as shown below:

We are getting closer to our goal of revealing the hills from the background layer, by making the corresponding portion of the mask purely black. However, the transition we have obtained so far is straight, while the contour of the hills has a quite complex curvy shape… this is where the second curves adjustment, associated to the “modulation” layer, comes into play.

As one can see from the screenshot above, between the bottom gradient and the “transition” curve there is a group of three layers: an horizontal gradient, a modulation curve and invert operation. Moreover, the group itself is combined with the bottom vertical gradient in grain merge blending mode.

Double-clicking on the “modulation” layer reveals a tone curve which is initially flat: output values are always 50% independently of the input. Since the output of this “modulation” curve is combined with the bottom gradient in grain merge mode, nothing happens for the moment. However, something interesting happens when a new point is added and dragged in the curve: the shape of the mask matches exactly the curve, like in the example below.

The sky/hills transition

The technique introduced above is used here to create a precise and smooth transition between the sky and the hills. As you can see, with a sufficiently large number of points in the modulation curve one can precisely follow the shape of the hills:

The result of the blending looks like that (click the image to see the initial +1EV version):

Final result
Enfuse output blended with the +1EV image (click to see the initial +1EV version)

The sky looks already much denser and saturated in this version, and the clouds have gained in volume and tonal variations. However, the -1EV image looks even better, therefore we are going to take the sky and clouds from it.

To include the -1EV image we are going to follow the same procedure done already in the case of the enfuse output:

  1. add a new layer of type “Open image” and load the -1EV Hugin output (I’ve named this new layer “sky”)

  2. open the mask of the newly created layer and add a transition that reveals only the upper portion of the image

Fortunately we are not obliged to recreate the mask from scratch. PhotoFlow includes a feature called layer cloning, which allows to dynamically copy the content of one layer into another one. Dynamically in the sense that the pixel data gets copied on the fly, such that the destination always reflects the most recent state of the source layer.

After activating the mask of the “sky” layer, add a new layer inside it and choose the “clone layer” tool (see screenshot below).

Cloning a layer from one mask to another

In the tool configuration dialog that will pop-up, one has to choose the desired source layer among those proposed in the list under the label “Layer name”. The generic naming scheme of the layers in the list is “[root group name]/root layer name/OMap/[mask group name]/[maks layer name]”, where the items inside square brackets are optional.

Choice of the clone source layer

In this specific case, I want to apply a smoother transition curve to the same base gradient already used in the mask of the “enfuse” layer. For that we need to choose “enfuse/OMap/gradient modulation (blended)” in order to clone the output of the “gradient modulation” group after the grain merge blend, and then add a new curves tool above the cloned layer:

The final transition mask between the hills and the sky

The result of all the efforts done up to now is shown below; it can be compared with the initial starting point by clicking on the image itself:

Final result
Edited image after blending the upper portion of the -1EV version through a layer mask. Click to see the initial +1EV image.

Contrast and saturation

We are not quite done yet, as the image is still a bit too dark and flat, however this version will “tolerate” some contrast and luminance boost much better than a single exposure. In this case I’ve added a curves adjustment at the top of the layer’s stack, and I’ve drawn an S-shaped RGB tone curve as shown below:

The effect of this tone curve is to increase the overall brightness of the image (the middle point is moved to the left) and to compress the shadows and highlights without modifying the black and white points (i.e. the extremes of the curve). This curve definitely gives “pop” to the image (click to see the version before the tone adjustment):

Final result
Result of the S-shaped tonal adjustment (click the image to see the version before the adjustment).

However, this comes at the expense of an overall increase in the color saturation, which is a typical side effect of RGB curves. While this saturation boost looks quite nice in the hills, the effect is rather disastrous in the sky. The blue as turned electric, and is far from what a nice, saturated blue sky should look like!

However, there is a simple fix to this problem: change the blend mode of the curves layer from Normal to Luminosity. The tone curve in this case only modified the luminosity of the image, but preserves as much as possible the original colors. The difference between normal and lumnosity blending is shown below (click to see the Normal blending). As one can see, the Luminosity blend tends to produce a duller image, therefore we will need to fix the overall saturation in the next step.

Luminosity blend
S-shaped tonal adjustment with Luminosity blend mode (click the image to see the version with Normal blend mode).

To adjust the overall saturation of the image, let’s now add an Hue/Saturation layer above the tone curve and set the saturation value to +50. The result is shown below (click to see the Luminosity blend output).

Saturation boost
Saturation set to +50 (click the image to see the Luminosity blend output).

This definitely looks better on the hills, however the sky is again “too blue”. The solution is to decrease the saturation of the top part through an opacity mask. In this case I have followed the same steps as for the mask of the sky blend, but I’ve changed the transition curve to the one shown here:

Saturation mask

In the bottom part the mask is perfectly white, and therefore a +50 saturation boost is applied. On the top the mask is instead just about 30%, and therefore the saturation is increased of only about +15. This gives a better overall color balance to the whole image:

Saturation boost after mask
Saturation set to +50 through a transition mask (click the image to see the Luminosity blend output).

###Lab blending The image is already quite ok, but I still would like to add some more tonal variations in the hills. This could be done with lots of different techniques, but in this case I will use one that is very simple and straightforward, and that does not require any complex curve or mask since it uses the image data itself. The basic idea is to take the a and/or b channels of the Lab colorspace, and combine them with the image itself in Overlay blend mode. This will introduce tonal variations depending on the color of the pixels (since the a and b channels only encode the color information). Here I will assume you are quite familiar wit the Lab colorspace. Otherwise, here is the link to the Wikipedia page that should give you enough informations to follow the rest of the tutorial.

Looking at the image, one can already guess that most of the areas in the hills have a yellow component, and will therefore be positive in the b channel, while the sky and clouds are neutral or strongly blue, and therefore have b values that are negative or close to zero. The grass is obviously green and therefore negative in the a channel, while the wineyards are brownish and therefore most likely with positive a values. In PhotoFlow the a and b values are re-mapped to a range between 0 and 100%, so that for example a=0 corresponds to 50%. You will see that this is very convenient for channel blending.

My goal is to lighten the green and the yellow tones, to create a better contrast around the wineyards and add some “volume” to the grass and trees. Let’s first of all inspect the a channel: for that, we’ll need to add a group layer on top of everything (I’ve called it “ab overlay”) and then added a clone layer inside this group. The source of the clone layer is set to the a channel of the “backgroud” layer, as shown in this screenshot:

a channel clone
Cloning of the Lab “a” channel of the background layer

A copy of the a channel is shown below, with the contrast enhanced to better see the tonal variations (click to see the original versions):

Saturation boost after mask
The Lab a channel (boosted contrast)

As we have already seen, in the a channel the grass is negative and therefore looks dark in the image above. If we want to lighten the grass we therefore need to invert it, to obtain this:

Saturation boost after mask
The inverted Lab a channel (boosted contrast)

Let’s now consider the b channel: as sursprising as it might seem, the grass is actually more yellow than green, or at least the b channel values in the grass are higher than the inverted a values. In addition, the trees at the top of the hill stick nicely out of the clouds, much more than in the a channel. All in all, a combination of the two Lab channels seems to be the best for what we want to achieve.

With one exception: the blue sky is very dark in the b channel, while the goal is to leave the sky almost unchanged. The solution is to blend the b channel into the a channel in Lighten mode, so that only the b pixels that are lighter than the corresponding a ones end up in the blended image. The result is shown below (click on the image to see the b channel).

b channel lighten blend
b channel blended in Lighten mode (boosted contrast, click the image to see the b channel itself).

And this are the blended a and b channels with the original contrast:

b channel lighten blend
The final a and b mask, without contrast correction

The last act is to change the blending mode of the “ab overlay” group to Overlay: the grass and trees get some nice “pop”, while the sky remains basically unchanged:

ab overlay
Lab channels overlay (click to see the image after the saturation adjustment).

I’m now almost satisfied with the result, except for one thing: the Lab overlay makes the yellow area on the left of the image way too bright. The solution is a gradient mask (horizontal this time) associated to the “ab overlay group”, to exclude the left part of the image as shown below:

overlay blend mask

The final, masked image is shown here, to be compared with the initial starting point:

final result
The image after the masked Lab overlay blend (click to see the initial +1EV version).

The Final Touch

Through the tutorial I have intentionally pushed the editing quite above what I would personally find acceptable. The idea was to show how far one can go with the techniques I have described; fortunatey, the non-destructive editing allows us to go back on our steps and reduce the strength of the various effects until the result looks really ok.

In this specific case, I have lowered the opacity of the “contrast” layer to 90%, the one of the “saturation” layer to 80% and the one of the “ab overlay” group to 40%. Then, feeling that the “b channel” blend was still brightening the yellow areas too much, I have reduced the opacity of the “b channel” layer to 70%.

opacity adjustment
Opacities adjusted for a “softer” edit (click on the image to see the previous version).

Another thing I still did not like in the image was the overall color balance: the grass in the foreground looked a bit too “emerald” instead of “yellowish green”, therefore I thought that the image could profit of a general warming up of the colors. For that I have added a curves layer at the top of the editing stack, and brought down the middle of the curve in both the green and blue channels. The move needs to be quite subtle: I brought the middle point down from 50% to 47% in the greens and 45% in the blues, and then I further reduced the opacity of the adjustment to 50%. Here comes the warmed-up version, compared with the image before:

opacity adjustment
“Warmer” version (click to see the previous version)

At this point I was almost satisfied. However, I still found that the green stuff at the bottom-right of the image attracted too much my attention and distracted the eye. Therefore I darkened the bottom of the image with a slightly curved gradient applied in “soft light” blend mode. The gradient was created with the same technique used for blending the various exposures. The transition curve is shown below: in this case, the top part was set to 50% gray (remember that we blend the gradient in “soft light” mode) and the bottom part was moved a bit below 50% to obtain a slightly darkening effect:

vignetting gradient
Gradient used for darkening the bottom of the image.

It’s done! If you managed to follow me ‘till the end, you are now rewarded with the final image in all its glory, that you can again compare with the initial starting point.

final result
The final image (click to see the initial +1EV version).

It has been a quite long journey to arrive here… and I hope not to have lost too many followers on the way!

Basic Landscape Exposure Blending with GIMP and G'MIC


Basic Landscape Exposure Blending with GIMP and G'MIC

Exploring exposure blending entirely in GIMP

Photographer Ian Hex had previously explored the topic of exposure blending with us by using luminosity masks in darktable. For his first video tutorial he’s revisiting the subject entirely in GIMP and G’MIC.

Have a look and let him know what you think in the forum. He’s promised more if he gets a good response from people - so let’s give him some encouragement!

Interesting Usertest and Incoming


Interesting Usertest and Incoming

A view of someone using the site and contributing

I ran across a neat website the other day for getting actual user feedback when viewing your website: UserTesting. They have a free option called peek that records a short (~5 min.) screencast of a user visiting the site and narrating their impressions.

Peek Logo

You can imagine this to be quite interesting to someone building a site.

It appears the service asks its testers to answer three specific questions (I am assuming this is for the free service mainly):

  • What is your first impression of this web page? What is this page for?
  • What is the first thing you would like to do on this page? Please go ahead and try to do that now. Please describe your experience.
  • What stood out to you on this website? What, if anything, frustrated you about this site? Please summarize your thoughts regarding this website.

Here’s the actual video they sent me (can also be found on their website):

I don’t have much to say about the testing. It was very insightful and helpful to hear someones view coming to the site fresh. I’m glad that my focus on simplicity is appreciated!

It was interesting that the navigation drawer wasn’t used, or found, until the very end of the session. It was also interesting to hear the testers thoughts around scrolling down the main page (is it so rare these days for content to be longer than a single screen - above the fold?).

Exposure Blended Panorama Coming Soon

The creator of new processing project PhotoFlow, Andrea Ferrero, is being kind enough to take a break from coding to write a new tutorial for us: “Exposure Blended Panoramas with Hugin and Photoflow”!

I’ve been collaborating with him on getting things in order to publish and this looks like it’s going to be a fun tutorial!

Submitting

We’ve been talking back and forth trying to find a good workflow for contributors to be able to provide submissions as easily as possible. At the moment I translate any submissions into Markdown/HTML as needed from whatever source the author decides to throw at me. This is less than ideal (but at least it’s nice and easy for authors - which is more important to me than having to port them manually).

Github Submissions

For those comfortable with Git and Github I have created a neat option to submit posts. You can fork my PIXLS.US repository from here:

https://github.com/patdavid/PIXLSUS

Just follow the instructions on that page, and issue a pull request when you’re done. Simple! :) You may want to communicate with me to let me know the status of the submission, in case you’re still working on it, or it’s ready to be published.

Any Old Files

Of course, if you want to submit some content, please don’t feel you have to use Github if you’re not comfortable with it. Feel free to write it any way that works best for you (as I said, my native build files are usually simple Markdown). You can also reach out to me and let me know what you may be thinking ahead of time, as I might be able to help out.

❌