Rado
Rado

Reputation: 782

ImageMagick: Exact remap of greyscale values to RGB ones

I'm using ImageMagick 6.8 and I have LUT color table created in text format:

# ImageMagick pixel enumeration: 848,1,255,srgb
0,0:   (0  , 0  , 0  )    #000000
1,0:   (226, 226, 224)    #E2E2E0
2,0:   (48 , 74 , 0  )    #304A00
# ... 
# few hundred more colors

Which has one colour per grayscale value (between 0 and 848 in my use case).

So, I want to convert a grayscale image to RGB one, using this LUT without any fancy gamma corrections, colour space remaps, interpolations and etc. Just straight replacement. How to do it?

Current issues start since the beginning:

Trying to convert lut.txt lut.png with various options always give me more colours than they are actually. In the LUT, there are 540 unique colours, but inspecting the generated PNG, or even identify lut.txt reports 615! This means that the LUT is not interpreted straight at all.

On the other hand, even if I succeed to read the LUT exactly, or probably avoid converting it to PNG, there comes another problem. Using -clut maps the whole greyscale range (0-65535) to the LUT, so I guess I have to normalize it first. But this screws up the greyscales input to begin with.

P.S. An answer which might be useful here is, if there is image format with bigger than 8-bit indexed palette. Then that text LUT be used as its palette and the greyscale raster as its pixel values.

Upvotes: 1

Views: 1342

Answers (1)

fmw42
fmw42

Reputation: 53202

In Imagemagick, use -clut to process a grayscale image with a colored look-up table image to colorize the grayscale image.

First create a 3-color color table LUT image with red, green and blue hex colors. I show an enlarged version.

convert xc:"#ff0000" xc:"#00ff00" xc:"#0000ff" +append colortable.gif


enter image description here

Here is the input - a simple gradient that I will colorize.

enter image description here

Now apply the color table image to the gradient using -clut.

convert gradient.png colortable.gif -clut gradient_colored.png


enter image description here

The default is a linear interpolation. But if you only want to see the 3 colors, then use -interpolate nearest-neighbor.

convert gradient.png colortable.gif -interpolate nearest-neighbor -clut gradient_colored2.png


enter image description here

Upvotes: 3

Related Questions