我有困难完全理解伽马校正的必要性,希望你们能帮助我。
假设我们想显示256个相邻像素,这些像素应该是从黑色到白色的平滑渐变。为了表示它们的颜色,我们使用线性灰度值从0..255
。由于人眼的非线性,显示器不能只将这些值转换为线性亮度值。如果相邻像素具有亮度值(1/256)*I_max, (2/256)*I_max等
,我们会感觉在较暗的区域中两个像素之间的亮度差异过大(渐变不平滑)。
幸运的是,显示器与人眼的非线性是相反的。也就是说,如果我们将线性灰度值0..255
放入帧缓冲区,那么显示器会将它们转换为非线性亮度值x^gamma。然而,由于我们的眼睛是相反非线性的,我们会感知到平滑的线性渐变。显示器和我们眼睛的非线性互相抵消了。
那么,我们为什么需要伽马校正呢?我读过一些书,其中提到我们总是希望显示器产生线性亮度值。根据他们的说法,在将灰度值写入帧缓冲区之前,必须补偿显示器的非线性。这是通过伽马校正来完成的。然而,我的问题在于 - 就我所理解的而言 - 当显示器产生线性亮度值时,我们不会感知到线性亮度值(即我们不会感知到平滑、稳定的渐变)。
就我所看到的,如果我们将线性灰度值放入帧缓冲区,那么它们会被显示器转换为非线性亮度值,我们的眼睛会再次感知到线性亮度值,因为眼睛是相反非线性的。没有必要对帧缓冲区中的灰度值进行伽马校正,也没有必要强制显示器产生线性亮度值。
我的理解是否正确?谢谢