20

我原来的问题

我读到将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正确”?

基于答案和其他研究的持续发现

似乎使用哪些亮度系数是一些争论的主题。各种组合和转灰度算法有不同的结果。以下是在电视标准等领域使用的一些预设:

  • ITU-R BT.601 (NTSC?) 定义的系数是0.299r + 0.587g + 0.114b
  • ITU-R BT.709(更新)定义的系数是0.2126r + 0.7152g + 0.0722b
  • 三分之二的系数 ,(1/3)(rgb)等价于s = 0

这篇科学文章详细介绍了各种灰度技术及其对各种图像的结果,以及对 119 人的主观调查。

但是,当将图像转换为灰度时,为了获得“最佳”艺术效果,几乎可以肯定不会使用这些预定义系数,而是调整每个通道的贡献以产生特定图像的最佳输出。

4

4 回答 4

10

尽管存在这些变换系数,但没有什么可以约束您使用它们。只要每个像素的总强度不变,每个通道的贡献可以是任何值,范围从 0 到 100%。

将图像转换为灰度的摄影师使用通道混合器来调整每个通道的电平(RGB 或 CMYK)。在您的图像中,有许多红色和绿色,因此可能需要(取决于您的意图)使这些通道在灰度强度中的表现比蓝色更高。

这就是图像的“科学”转换与波段的“艺术”组合的区别。

另一个考虑因素是每个波段中值的动态范围,并试图将它们保留在灰度图像中。例如,增强阴影和/或高光可能需要增加蓝色波段的贡献。

于 2011-03-15T13:29:51.697 回答
5

关于这个主题的一篇有趣的文章在这里......“因为人眼不能检测亮度与颜色的线性关系”。

http://www.scantips.com/lumin.html

于 2011-03-15T12:41:32.607 回答
3

看起来这些系数来自旧的 CRT 技术,并不能很好地适应当今的显示器,来自颜色常见问题解答

系数 0.299、0.587 和 0.114 正确计算了具有荧光粉的监视器的亮度,这些荧光粉在 1953 年引入 NTSC 电视时是同时代的。它们仍然适用于计算将在下面第 11 节讨论的视频亮度。但是,这些系数不能准确计算现代显示器的亮度。

但是,找不到正确的转换系数。

另请参阅RGB 到单色转换

于 2011-03-15T12:40:47.070 回答
3

在 HSL/HSV 中使用s = 0并转换为 RGB 会导致R = G = B,所以与做r_old * 1/3 + g_old * 1/3 + b_old * 1/3.

要了解原因,请查看描述转换 HSV->RGB 的Wikipedia 页面。饱和度s将为 0,因此CX将是。你最终会R_1,G_1,B_1得到(0,0,0),然后添加m到最终的 RGB 值中,从而得到(m,m,m)= (V,V,V)。HSL 相同,结果将是(m,m,m)= ( L,L,L)。

编辑:好的,只是发现上面不是完整的答案,尽管这是一个很好的起点。RGB 值将完全相同,要么 要么LV但它仍然取决于最初的计算方式L和计算方式,再次参见Wikipedia。似乎您用于转换的程序/公式使用了解决方案或其他两个(hexcone/bi-hexcone)之一。V1/3 * R + 1/3 * G + 1/3 * B

所以毕竟,使用 HSL/HSV 只是意味着您必须决定更早使用哪个公式,稍后转换为 RGB 灰度值只是隔离最后一个组件。

于 2011-03-15T12:44:23.527 回答