我正在尝试获得一个灰色的线性RGB三重奏,它与另一个(彩色)RGB三重奏一样明亮。我读了很多维基百科文章,但是我并没有真正了解大图。我有点迷茫,需要帮助。
维基百科似乎提到了一种接收线性RGB颜色的感知亮度的公式。
所以我可以测量颜色的亮度并执行类似的操作假设:
public Vector3d get_equally_bright_grey(Vector3d color) {
    for (double c = 0.0; c <= 1.0; c += 0.001) {
        Vector3d grey = new Vector3d(c, c, c);
        if (brightness(color) == brightness(grey)){
            return grey;
        }
    }
}

,但还必须有其他一些东西:) Lindbloom)。
然后我将这些XYZ值转换为线性RGB(同样是Bruce)。这是我的问题。
我知道我的Y三元组的XYZ分量也类似于亮度,但是我也不知道如何从中生成灰色XYZ颜色。

#1 楼

获得色彩感知亮度的最简单方法是计算亮度。查找具有相同亮度的灰色很容易-只需将所有RGB分量设置为所需的亮度值即可。之所以可行,是因为用于计算亮度的系数总和为1。

public Vector3d get_equally_bright_grey(Vector3d color) {
    double luma = color.x * 0.299 + color.y * 0.587 + color.z * 0.114;
    return new Vector3d(luma, luma, luma);
}


评论


$ \ begingroup $
感谢您的回复!两个问题:1)维基文章在方程式中使用R'G'B',以对应于“伽玛压缩”值。那不会因为我使用线性RGB而给我这个错误的数字吗? 2)您能否解释一下为什么从本文中选择了此公式?我很困惑为什么这适用于我的情况而不是适用于0.2126的情况...
$ \ endgroup $
– PeteParly
16年11月1日在20:58

$ \ begingroup $
@PeteParly这是一个选择问题。我倾向于使用此公式来计算线性空间中颜色的亮度,因为与主观的Rec.Rec。相比,它在主观上给出了更令人满意的结果。 709公式,至少在我的显示器上。对于伽玛压缩的颜色,Wiki文章提到,尽管给出了不同的结果,但对于伽玛和线性颜色空间都可以任意使用相同的公式。
$ \ endgroup $
– Quinchilion
16年11月1日在21:41

$ \ begingroup $
@PeteParly最好的办法是尝试多种公式,然后选择最适合您的公式。除了Lab色彩空间之外,我还没有其他特定的标准可以尝试更接近人类的视觉:en.wikipedia.org/wiki/Lab_color_space使用它涉及更多。要仅获得灰色,必须将RGB颜色转换为Lab,然后将a和b分量设置为0,以有效去除色度,然后将其转换回您选择的RGB空间。
$ \ endgroup $
– Quinchilion
16年11月1日在21:44

$ \ begingroup $
我认为这是“您可以做的最好的事情是尝试多个公式并选择最适合您的公式”。回答了我的困惑:)我会尝试一下并接受您的回答
$ \ endgroup $
– PeteParly
16年11月1日在21:48

$ \ begingroup $
@PeteParly,如果您有色度计,可以做得比生成icc配置文件更好,并且对显示器更精确
$ \ endgroup $
– joojaa
16年2月2日在17:02

#2 楼

正如@Quinchilion所提到的,计算是使用应用于颜色分量的三个权重完成的:

旧OpenGL注释中的示例:

https://www.opengl.org/archives/resources/code/samples/advanced/advanced97/notes/node140.html

@Quinchilion在回答中显示的权重用于模拟YPbPr(0.299,0.587,0.114)标准中。它也被称为BT 601亮度(又称“亮度”)。

SGI(上面的链接)建议的亮度为(0.3086,0.6094,0.0820)。这些可能更好地适用于出色的CRT彩色监视器。如@Quinchilion提出的链接和@troy_s提到的那样,BT 709使用(0.2126,0.7152,0.0722)。这就是现代高清电视和显示器所使用的。这是在视频板或显示器中发生的视频事件(取决于您使用的连接器的类型。)

较旧的HDTV显示器使用(0.212,0.701,0.087)。不过,我不太确定如何知道自己拥有哪一个。他们说1035i是截止点。

因此,如果您要处理在现代1080p或更高分辨率的显示器上显示的图像,则绝对不应使用模拟视频Y分量计算。 BT 709无疑是当今的最佳选择。如果您使用的是供各种人使用的软件,则最好有一个最终用户可以选择的首选项屏幕(除非您希望能够比较他们看到的内容和明智地看到的软件,然后坚持使用一组特定的设置)重量。)