着色灰度图像

时间:2011-09-22 20:28:21

标签: c++ image graphics image-processing colors

我有一个灰度图像和一些颜色,用RGB三元组表示。我需要使用这个三元组为灰度图像着色。

左图代表我们拥有的和正确的东西。 现在在程序中我有一些功能,其中输入是源图像的R,G和B值以及应当用作着色值的RGB值颜色。 我无法决定如何使用彩色RGB增加或减少源RGB以获得正确的颜色调色板。

语言是C ++,但它并不那么重要。 提前谢谢。

2 个答案:

答案 0 :(得分:9)

其他答案建议将灰度值乘以目标RGB颜色。这没关系,但问题是它会改变图片的整体亮度。例如,如果你选择一个深绿色的阴影,整个图像会变暗。

我认为RGB颜色模型不是最适合这种情况。另一种方法是单独选择颜色,没有相关的亮度,然后在保留每个像素的原始亮度的同时着色图像。

算法将是这样的:

  • 根据两个值(Hue和Saturation)选择目标颜色。色调决定了颜色的色调(绿色,红色等),饱和度决定了颜色的纯度(纯度越低,颜色变为灰色越多)。
  • 现在,对于灰度图像中的每个像素,计算HLS颜色模型中的新像素,其中H和S是目标色调和饱和度,L是像素的灰度值。
  • 将此HLS颜色转换为RGB并保存到新图片。

有关将HLS转换为RGB的算法,请参阅this pagethis page

答案 1 :(得分:0)

从概念上讲,您将获取原始图像中每个像素的灰度值,并将其用作绿色值的百分比。因此,如果像素具有灰度值87,则彩色图像中的等效像素将为:

colorized_red = (87 / 255) * red_component(green_shade);
colorized_green = (87 / 255) * green_component(green_shade);
colorized_blue = (87 / 255) * blue_component(green_shade);