Converting a color image to black and white

OK, I got a little bit fed up with software “pseudo reviews”, so let’s talk about photography for a change… Oh! wait…

The case for black and white

Black and white was the first type of photography available and even with color becoming widely used, B&W still has this “something” that makes it invaluable. Sebastiao Salgado said in a recent interview “my photography is black and white. I don’t even know where I stored the few color slides I shot years ago”.

So while color photography focuses and on, well, colors and tints, B&W strongly reveals composition and lines of force. So in the digital age, B&W still has a crucial role to play in photography – the purpose of this entry is to see how to obtain the best result in converting a color file to B&W.

The problem

Obviously, the files we get from our camera is in color and needs conversion. So here is a color (Red-Green-Blue) file:


And here is the desaturated version standard from The Gimp:


But that is not the end of the story. Here is the red channel…


here is the green channel…


… and here is the blue channel


Just for fun, here is the light channel (from hue / saturation / light decomposition)


So when we talk about converting an image to B&W, there are really several possibilities with very different results.

So what do we do?

Basically, there are two main ways to get a good result. For high quality, let’s forget the decompose option since we don’t know what it exactly does.

  • Using the Light channel: you use this channel as your B&W starting point. You can then post-process it as normal with curves, local contrast USM and so on. This method needs a bit more curves adjustments than mixing channels but its advantage is less noise (so it supports more curves adjustment, precisely)
  • Mixing RGB channels: you combine different proportions of the red green and blue channels to a B&W image.

The Gimp 2.4 offers a “channel mixer” which you can use to blend your channels and check the output “live”. Since a digital sensor captures 25% of its pixels in blue, 25% in red and 50% in green (through a bayer filter) the blue and red channels are more noise prone than the green. So even if it is tempting to put a lot of the red channel since it generally gives the most dramatic result, noise can become an issue with too much red.

Hence a general rule of thumb is to use green to 70-80% the rest of red; blue is generally too unnatural and can be ignored. So here is what our example would look like in The Gimp channel mixer:


Make sure you check the “monochrome” option, obviously🙂

The Gimp allows values from -200 to +200 for each channel. I don’t really see what to do with negative values; in most cases, you want to make sure the addition of R+G+B = 100%, say red 20% green 80% blue 0%. If you tick “preserve luminosity”, you will get a 100% output no matter what – so red 0% green 0% blue 1% will in effect be 100% blue. I know that is a bit confusing but (dare I say?) don’t hesitate to experiment.

8bits / channel thing bites again, and badly

Now the problem is that The Gimp only processes images at 8bits / channel and B&W really is… one channel. So your B&W picture is really processed in The Gimp with 256 levels from its pitch dark to pure white nuances. Add to it a bit of curves adjustment and you are left with 220 levels. Not good at all.

As you now know, Cinepaint is the solution that allows 16bits / channel on Linux – about 65000 nuances per channel, what we need to keep all the B&W richness. However, Cinepaint being a bit more “primitive” than The Gimp, it doesn’t offer a channel mixer. You have the solution to decompose the image to its red, green and blue components as three separate (B&W) images, which you can then copy / paste to three different layers. By playing with the transparency of these layers (between 0% and 100%), you have a very nice channel mixer substitute. A bit of a pain to set up, but very usable.

So my 2 cents would be: play around with The Gimp to see how your image works in B&W and once you are happy with the mix values, just fire Cinepaint to get the final version. It is absolutely critical for good B&W output.

Since a B&W image can be stunning it deserves the best possible quality.

5 Responses to Converting a color image to black and white

  1. sam says:

    What about Krita and Digikam, both can work in 16bits. Could you use them for B&W?

  2. jcornuz says:

    Hi Sam !

    I had a quick look at Krita – I didn’t find a channel mixer; I don’t use Digikam. Most program have a “desaturate” option which produces a B&W output, but doesn’t allow as much control as a proper channel mixer.

    The fact that both Krita and Digikam work in 16 bits leaves more room for further post-processing on the B&W image, which is a good thing.

    As always, take one picture, try to convert it with The Gimp, Digikam and Krita and check the differences, which output you like best, which software you feel most comfortable with, and so on.

    Take care,


  3. Hi, I wrote a command line utility for converting a JPEG original file to a 16bpp grayscale PGM file with very accurate double precision computation at each step (even while converting from YCbCr color-space to RGB); the tool is highly customizable (it uses the Scheme language for controling some curve), and I am quite happy with its output (I wrote it for myself). Please, have a look at the following page: and look at the very bottom of the page. Though the page is written in french, the tool has a manual page in english. You will need libjpeg and libguile for compiling it. Best regards, TB.

  4. jcornuz says:

    Hi Thomas,

    I went through your webpage. Interesting stuff – I’ll try to download, compile and do a few tests. I think it is hard to know how to best do B&W and evaluation is not easy. So thanks for your input.

    Take care,


  5. Piotr says:

    Lenny ppc no longer ships with cinepaint, and I didn’t feel like compiling it myself. However I did have recompiled 16-bit ImageMagick and played along the lines you described. Here’s a script which resembles gimp’s channel mixer. I have not played with various IM compose methods, so there’s probably plenty of room for experiments.

    convert $1 -separate sep
    composite sep-1 sep-0 -"$command" "$a"x"$b" sep01
    composite sep-2 sep01 -"$command" "$c" $outfile

    command may be either “blend” or “dissolve”, play with different values of a,b,c in the range 0..100 .

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: