将Gamma / RGB曲线转换为没有伽玛的RGB曲线

时间:2013-07-28 16:54:40

标签: image-processing

使用GIMP和Photoshop等软件,可以应用RGB曲线,但功能是使用额外的“伽马”曲线。

在编程和操作像素时,我通常只拥有24位,仅RGB帧,因此不可能直接使用在第三方成像软件中创建/检测到的RGB曲线,并重新使用它们来硬编码这样的一些数组。一个程序:

byte[] rCurve = { ... }
byte[] gCurve = { ... }
byte[] bCurve = { ... }

第4条伽玛曲线如何作用于红色,绿色和蓝色曲线?它会增加还是减少所有这些?

[编辑]

做一个快速检查,我注意到的第一件事就是它就像颜色的乘数一样,在提升它时最大化它们,在减少颜色时最小化它们。即图像仅具有色调,如果我最大化伽马曲线则不再有亮度级别。我想知道在我的3像素阵列上重新创建它的确切计算是什么。

1 个答案:

答案 0 :(得分:3)

Gamma只是尝试纠正显示器的非线性特性,以实现线性亮度“曲线”。要应用gamma,就不需要对任何内容进行硬编码。

只需将每个组件与gamma值相乘,如下所示:

gamma = 1 / 2.2
r = 255 * pow(r / 255, gamma) // pow(value, power)
g = 255 * pow(g / 255, gamma)
b = 255 * pow(b / 255, gamma)

要将它从线性反转回伽马,你可以这样做:

gamma = 2.2
r = 255 * pow(r / 255, gamma)
g = 255 * pow(g / 255, gamma)
b = 255 * pow(b / 255, gamma)

2.2是Windows的默认值(Mac为1.8)

enter image description here