47

我正在为值在 0 到 255 之间的灰度图像寻找一个简单的伽马校正公式。

假设我的屏幕的 gamma 为 2.2(它是 LCD 屏幕,所以我可能需要通过更复杂的程序来估计它,但假设我的屏幕表现良好)。

以下哪个公式是正确的?

  1. Corrected = 255 * (Image/255).^2.2

或者

  1. Corrected = 255 * (Image/255).^(1/2.2)

(这些注定是 MATLAB 代码,但我希望即使是非 MATLAB 人员也能理解它们)

我一直在互联网上四处寻找,但发现这两个公式都在流传。我怀疑(2)是正确的,我的困惑是由于倾向于将“伽马值”称为实际伽马值的倒数,但我非常感谢知道他们在说什么的人的一些反馈。 .

4

2 回答 2

38

使用了两种公式,一种用于编码伽马,另一种用于解码伽马。

当图像存储为整数强度值时,伽马编码用于提高阴影值的质量,因此要进行伽马编码,请使用以下公式:

encoded = ((original / 255) ^ (1 / gamma)) * 255

伽玛解码用于恢复原始值,因此其公式为:

original = ((encoded / 255) ^ gamma) * 255

如果显示器进行伽马解码,您可能希望使用第一个公式来编码图像数据。

于 2013-05-13T11:48:59.113 回答
36

伽玛校正控制图像的整体亮度。未经校正的图像可能看起来会褪色或太暗。假设计算机显示器具有2.2作为强度对电压响应曲线的功率函数。这只是意味着,如果您向显示器发送某个像素的强度应该等于 的消息x,它实际上会显示一个强度等于x 2.2的像素,因为发送到显示器的电压范围介于01显示的强度值将小于您想要的值。据说这种监视器的伽马值为2.2.

所以在你的情况下,

Corrected = 255 * (Image/255)^(1/2.2).
于 2013-05-13T11:49:20.117 回答