我原来的问题
我读到要将RGB像素转换为灰度RGB,应该使用
r_new = g_new = b_new = r_old * 0.3 + g_old * 0.59 + b_old * 0.11
我也阅读并理解g
具有更高的权重,因为人眼对绿色更敏感。实现这一点,我看到结果与在像Gimp这样的图像编辑器中将图像设置为“灰度”时的结果相同。
在我读这篇文章之前,我想到要将像素转换为灰度,将其转换为HSL或HSV,然后将饱和度设置为零(因此,删除所有颜色)。然而,当我这样做时,我得到了一个完全不同的图像输出,即使它也缺少颜色。
s = 0
与我阅读的“正确”方式完全不同,为什么“不正确”?
基于答案和其他研究的持续发现
看来使用哪种亮度系数是一些争论的主题。各种组合和灰度算法具有不同的结果。以下是电视标准等领域中使用的一些预设:
0.299r + 0.587g + 0.114b
0.2126r + 0.7152g + 0.0722b
(1/3)(rgb)
等同于s = 0
此scientific article详细介绍了各种灰度技术及其各种图像的结果,以及119人的主观调查。
然而,在将图像转换为灰度时,为了达到“最佳”艺术效果,人们几乎肯定不会使用这些预定义的系数,而是调整每个通道的贡献以产生特定图像的最佳输出。 / p>
答案 0 :(得分:10)
虽然存在这些变换系数,但没有任何东西可以帮助你使用它们。只要每个像素的总强度不变,每个通道的贡献可以是任何值,范围从0到100%。
将图像转换为灰度级的摄影师使用通道混合器来调整每个通道的级别(RGB或CMYK)。在你的图像中,有许多红色和绿色,因此可能需要(取决于你的意图)使这些通道在灰度级强度中比蓝色更高。
这就是区分图像的“科学”转换与乐队的“艺术”组合的区别。
另一个考虑因素是每个波段的动态值范围,并尝试将其保留在灰度图像中。例如,提升阴影和/或高光可能需要增加蓝色波段的贡献。
答案 1 :(得分:4)
这里有一篇关于这个主题的有趣文章......“因为人眼不能用颜色线性地检测亮度”。
答案 2 :(得分:3)
看起来这些系数来自旧的CRT技术,并且不适合今天的显示器,Color FAQ:
系数0.299,0.587和 对于具有磷光体的监视器,0.114正确计算的亮度 当代引进 1953年的NTSC电视台。他们是 仍然适合计算视频 亮度将在下面的章节中讨论 然而,这些系数不能精确计算亮度 现代监视器。
无法找到正确的转换系数。
答案 3 :(得分:3)
在HSL / HSV中使用s = 0
并转换为RGB会产生R = G = B
,因此与执行r_old * 1/3 + g_old * 1/3 + b_old * 1/3
相同。
要了解原因,请查看描述转换HSV-> RGB的Wikipedia page。饱和度s
将为0,因此C
和X
也是如此。您最终会R_1,G_1,B_1
为(0,0,0)
,然后将m
添加到最终的RGB值,从而产生(m,m,m)
= (V,V,V)
。对于HSL,结果将是(m,m,m)
=(L,L,L
)。
L
或V
,但仍取决于最初计算L
和V
的方式,请再次参阅Wikipedia 。似乎您用于转换的程序/公式使用1/3 * R + 1/3 * G + 1/3 * B
解决方案或其他两个解决方案(hexcone / bi-hexcone)。
毕竟,使用HSL / HSV只是意味着您必须先决定使用哪个公式,然后转换为RGB灰度值才能隔离最后一个组件。