【发布时间】:2011-08-01 03:24:18
【问题描述】:
到处搜索有关将图像转换为亮度 (B&W) 或在不改变亮度的情况下调整饱和度的大量信息。但是如何修改亮度本身呢?例如,如何使用 5x5 矩阵增加红色通道亮度?最终这将在 C 中使用,但同样的数学应该适用于 java 或 flash。
【问题讨论】:
标签: c# objective-c image-processing image-manipulation
到处搜索有关将图像转换为亮度 (B&W) 或在不改变亮度的情况下调整饱和度的大量信息。但是如何修改亮度本身呢?例如,如何使用 5x5 矩阵增加红色通道亮度?最终这将在 C 中使用,但同样的数学应该适用于 java 或 flash。
【问题讨论】:
标签: c# objective-c image-processing image-manipulation
我相信你改变所有三个颜色值都是一样的......
要缩放 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,
};
【讨论】:
对于从谷歌来到这里的任何人,这里是缩放亮度的矩阵:
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。
【讨论】: