There are many ways to bleach a color image. In fact, there is probably not a single “true” or “right” way to do this, although some methods are more “correct” than others.
I assume your image is in RGB (Red-Green-Blue) format (although BGR is also common).
The easiest way that should work for most photos (but nonetheless for synthetic images) is to simply use the green channel of 3 RGB channels. People are most sensitive to changes in the green part of the spectrum, so the green channel covers most of the visible range and is a good approximation to the grayscale image you want.
The best way to generate grayscale images is to use a weighted average for 3 RGB channels. Choosing equal weights (0.33 * R + 0.33 * G + 0.33 * B) will give a pretty good grayscale image. Other convex weights (non-negative weights, the sum of which is 1) will give different results, some of which can be considered more aesthetically pleasing, and some may take into account perceptual parameters. ( YUV uses these weights : Y = 0.299*R + 0.587*G + 0.114*B )
You can always convert the image to another color space that has only one channel in shades of gray (and 2 "color channels), for example, HSV (V - shades of gray), YUV (Y - shades of gray) or Lab (L is shades of gray ). The differences should not be very large.
The term "desaturation" comes from the HSV space. If you convert the image to HSV, set the S-channel (Saturation) to all zeros and make the image, you will get a 3-channel unsaturated "color" image.
Duplicating these grayscales in RGB will give you a 3-channel unsaturated “color” image, where all 3 RGB channels are identical.
Once you have this 3-channel (RGB) unsaturated image, you can multiply each channel by a separate weight to colorize the image - a sepia image.
Given the gray pixel [v,v,v] , color it like this: [v*a, v*b, v*c] such that 0 <= a,b,c <=1 .
Adi shavit
source share