我正在寻找一个简单的伽马校正公式,用于灰度图像,其值介于0到255之间。
让我们说我的屏幕的伽玛值是2.2(这是一个液晶显示屏,所以我可能需要用更复杂的程序估算它,但让我们假设我的屏幕表现得很好。)
以下哪个公式是正确的?
Corrected = 255 * (Image/255).^2.2
OR
Corrected = 255 * (Image/255).^(1/2.2)
(那些注定是MATLAB代码,但我希望即使对非MATLAB人员也可以理解)
我一直在互联网上环顾四周,但发现两种公式都在附近。我怀疑(2)是正确的,我的困惑是由于倾向于将“伽玛值”称为实际伽马值的倒数,但我真的很感激那些知道他们在谈论什么的人的一些反馈。
答案 0 :(得分:27)
使用两个公式,一个用于编码gamma,另一个用于解码gamma。
当图像存储为整数强度值时,Gamma编码用于提高阴影值的质量,因此要使用公式进行伽玛编码:
encoded = ((original / 255) ^ (1 / gamma)) * 255
Gamma解码用于恢复原始值,因此其公式为:
original = ((encoded / 255) ^ gamma) * 255
如果显示器进行伽马解码,您可能需要使用第一个公式对图像数据进行编码。
答案 1 :(得分:24)
Gamma校正控制图像的整体亮度。未校正的图像可能看起来漂白或太暗。假设计算机监视器具有2.2
幂函数作为电压响应曲线的强度。这只是意味着如果您向监视器发送一条消息,某个像素的强度应该等于x
,它实际上会显示一个强度等于 x 2.2 的像素由于发送到显示器的电压范围介于0
和1
之间,这意味着显示的强度值将小于您希望的强度值。据说这种监视器的伽玛值为2.2
。
所以在你的情况下,
Corrected = 255 * (Image/255)^(1/2.2).