Cássio
Cássio

Reputation: 649

Gray scale image to color

enter image description hereIs there a way to convert a gray-scale image to a colour image?

Here's a few JPG examples

  1. Photo 1
  2. Photo 2
  3. Photo 3

ImageMagick is powerful but doesn't seem capable of converting to a colourful version.

Upvotes: 1

Views: 10278

Answers (4)

sturkmen
sturkmen

Reputation: 3550

take a look at siggraph2016_colorization i did not try it but seems interesting.

They present a novel technique to automatically colorize grayscale images that combines both global priors and local image features.

Colorization Architecture:

Their model consists of four main components: a low-level features network, a mid-level features network, a global features network, and a colorization network. The components are all tightly coupled and trained in an end-to-end fashion. The output of our model is the chrominance of the image which is fused with the luminance to form the output image.

here a sample enter image description here enter image description here

Upvotes: 1

Mark Setchell
Mark Setchell

Reputation: 207385

You cannot accurately re-create the information that is lost by aggregating the three channels together when converting to colour. You can, however, generate a false colour and you can also make some assumptions that may be fairly reasonable for some/many pictures.

Generally, when doing these types of things, you create a LUT (Look-up Table) and use the grey value at each pixel location to look-up a replacement colour. So, if we make a LUT that goes from Red through Green through Blue, the dark tones in your image will be mapped to Red, the midtones to Green and the highlights to Blue. Let's try it:

convert -size 1x1! xc:red xc:lime xc:blue +append -resize 255x1! rainbowCLUT.png

enter image description here

If we now apply that to your image:

convert yourImage.jpg rainbowCLUT.png -clut result.png

enter image description here

Ok, we have now got colour but that is not very realistic. So, to do it better, we need to start making some assumptions. One assumption might be that there is something pretty black in the picture (i.e. a tie, a jacket, some dark hair, or a deep shadow somewhere), another assumption might be that there is probably a white highlight somewhere in the image (i.e. a white background, the whites of an eye) and finally we assume that there is some flesh tone somewhere in the middle. So, let's make a CLUT that looks like that, i.e. it goes from solid black through a flesh tone in the middle to a white highlight:

convert -size 128x1! gradient:black-"rgb(210,160,140)" gradient:"rgb(210,160,140)"-white +append clut.png

enter image description here

(I have put a 1 pixel wide red border around it just so you can see it on StackOverflow's white background)

Now we can apply it to your images:

convert yourImage.jpg -normalize clut.png -clut result.png

enter image description here enter image description here enter image description here

enter image description here enter image description here enter image description here

Note how I also used -normalize to try and make the image fit my assumption that there was a solid black tone in the image and a solid white highlight.

This technique is only an attempt at re-creating something that is no longer in the image so it will not always work. Of course, if you know extra information about your subjects, the lighting and so on, you could build that into the LUT.

Upvotes: 7

Man Person
Man Person

Reputation: 1130

To convert an image to grayscale you just take the average of the r g b value in each pixel and set r g and b to that value. Therefore it is pretty much impossible to convert it back to color. The key word is pretty much, I'm sure someone will eventually invent some complex algorithm that will look at the pixels around it see their averages and maybe make out a conclusion of around what color is in that area maybe, I dunno. But as for now I don't think it's possible to do such a thing unfortunately. Sorry.

Upvotes: 1

Mr Tree
Mr Tree

Reputation: 451

Unfortunately this is not possible. Grayscale images do not contain sufficient information to create a color image. In instances where you see B&W/Grayscale images converted to color, this has been done manually in an application such as photoshop.

You can use imagemagick to apply a filter but you cannot re-introduce color. http://www.imagemagick.org/Usage/color_mods/#level-colors

Upvotes: 2

Related Questions