调整亮度的色彩矩阵是什么?

4

在搜索中,有很多关于将图像转换为亮度(黑白)或调整饱和度而不改变亮度的信息。但是如何修改亮度本身呢?例如,如何使用5x5矩阵增加红色通道的亮度?最终这将在C语言中使用,但同样的数学方法也适用于Java或Flash。

2个回答

2

对于从谷歌跳转过来的任何人,这里是缩放亮度的矩阵:

rl×l + gl + bl    gl×l - gl         bl×l - bl         0
rl×l - rl         gl×l + rl + bl    bl×l - bl         0
rl×l - rl         gl×l - gl         bl×l + rl + gl    0
0                 0                 0                 1

其中

  • l — 亮度倍增器,
  • rl — 红色亮度(sRGB为0.213),
  • gl — 绿色亮度(sRGB为0.715),
  • bl — 蓝色亮度(sRGB为0.072)。

请注意:此矩阵可能会产生超出色域的颜色,因此在需要准确结果时不要使用它。例如,对于1, 0, 0, 1向量和l=2,它将产生1.213, 0.213, 0.213, 1的结果。从技术上讲,此向量具有预期的亮度(0.426),但显示的颜色将约为0.381。


0

我相信你会等量改变所有三个颜色值,所以...

为了缩放RGB颜色,可以使用以下矩阵:

float mat[4][4] = {
    rscale, 0.0,    0.0,    0.0,
    0.0,    gscale, 0.0,    0.0,
    0.0,    0.0,    bscale, 0.0,
    0.0,    0.0,    0.0,    1.0,
};

来自:http://www.graficaobscura.com/matrix/index.html


对不起,我应该解释一下。我已经让颜色矩阵操作在亮度、饱和度、色相、移位和上色方面正常工作了。我只是无法弄清楚如何使其用于亮度。 - Shizam
1
哦,还有上面的矩阵是用于调节亮度的,这类似于亮度,但不完全相同 :) - Shizam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接