当前位置:  开发笔记 > 编程语言 > 正文

将RGB转换为灰度/强度

如何解决《将RGB转换为灰度/强度》经验,为你挑选了5个好方法。

当从RGB转换为灰度时,据说应该应用通道R,G和B的特定权重.这些重量为:0.2989,0.5870,0.1140.

据说,其原因是人类对这三种颜色的感知/敏感性不同.有时也会说这些是用于计算NTSC信号的值.

但是,我没有在网上找到这方面的好参考.这些价值观的来源是什么?

另请参阅以前的这些问题:此处和此处.



1> denis..:

问题中的具体数字来自CCIR 601(参见下面的维基百科链接).

如果您使用稍微不同的数字/不同方法转换RGB - >灰度,在正常光照条件下,您在普通计算机屏幕上看不到多少差异 - 试试吧.

以下是一些关于颜色的更多链接:

维基百科Luma

Bruce Lindbloom的优秀网站

Colin Ware撰写的第4章"信息可视化",isbn 1-55860-819-2; 这个与books.google.com中的 Ware的长链接 可能有效,也可能无效

cambridgeincolor:优秀,精心编写的"关于如何使用视觉导向的方法获取,解释和处理数字照片的教程,强调概念而不是程序"

如果您遇到"线性"与"非线性"RGB,这是我自己的一个旧笔记的一部分.重复一遍,在实践中你不会看到太大的区别.


RGB - > ^ gamma - > Y - > L*

在色彩科学中,常见的RGB值,如html rgb(10%,20%,30%),被称为"非线性"或 Gamma校正."线性"值定义为

Rlin = R^gamma,  Glin = G^gamma,  Blin = B^gamma

许多PC的gamma为2.2.通常的RGB有时被写为R'G'B'(R'= Rlin ^(1/gamma))(纯粹的舌头咔哒声),但在这里我会放弃'.

CRT显示器上的亮度与RGBlin = RGB ^ gamma成比例,因此CRT上的50%灰度非常暗:.5 ^ 2.2 =最大亮度的22%.(LCD显示屏更复杂;此外,一些显卡可以补偿伽玛.)

要获得L*从RGB 调用的亮度度量,首先将RGB除以255,然后进行计算

Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma

这是Y在XYZ色彩空间; 它是颜色"亮度"的量度.(真正的公式不完全是x ^ gamma,但是接近;第一次通过坚持使用x ^ gamma.)

最后,

L* = 116 * Y ^ 1/3 - 16

"...渴望感性统一[和]与人类对轻盈的感知紧密相关." - 维基百科实验室色彩空间


Y = 0.2126*R + 0.7152*G + 0.0722*B - 维基百科(http://en.wikipedia.org/wiki/Grayscale)

2> ypnos..:

我发现该出版物在对先前类似问题的回答中引用.这非常有帮助:

http://cadik.posvete.cz/color_to_gray_evaluation/

它显示了"吨"的不同方法来生成具有不同结果的灰度图像!



3> twerdster..:

下面是c中的一些代码,用于将rgb转换为灰度.用于rgb到灰度转换的实际加权是0.3R + 0.6G + 0.11B.这些重量不是绝对重要的,所以你可以玩它们.我把它们做成0.25R + 0.5G + 0.25B.它会产生稍暗的图像.

注意:以下代码采用xRGB 32位像素格式

unsigned int *pntrBWImage=(unsigned int*)..data pointer..;  //assumes 4*width*height bytes with 32 bits i.e. 4 bytes per pixel
unsigned int fourBytes;
        unsigned char r,g,b;
        for (int index=0;index>16);
            g=(fourBytes>>8);
            b=fourBytes;

            I_Out[index] = (r >>2)+ (g>>1) + (b>>2); //This runs in 0.00065s on my pc and produces slightly darker results
            //I_Out[index]=((unsigned int)(r+g+b))/3;     //This runs in 0.0011s on my pc and produces a pure average
        }


0.3 0.6 0.11不加1。维基百科似乎建议0.30 0.59 0.11。

4> rmmh..:

这是一篇关于如何得出这些数字(或类似数字)的论文:

https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf



5> Brian Campbe..:

有关此信息,请查看颜色常见问题解答.这些值来自我们在显示器中使用的RGB值的标准化.实际上,根据Color FAQ,您使用的值已经过时,因为它们是用于原始NTSC标准而非现代显示器的值.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有