技术支持
来源:光虎
LUT是Look Up Table(颜色查找表)的缩写。
要理解“颜色查找表”,就必须要先理解“查找表”,“查找表”在我们日常生活中处处可见。
举一个简单的例子:
现在你要参加一场考试,然后学校主办发给了你一个三位数233,然后告诉你第一位数对应的是楼,第二位数对应的是层,第三位数对应的是房间号,然后给了你下面这张查找表:
|
楼 | 层 | 房间 |
1 | A 楼 | 1 层 | 6 号 |
2 | B 楼 | 2 层 | 4 号 |
3 | C 楼 | 4 层 | 3 号 |
4 | D 楼 | 7 层 | 5 号 |
5 | F 楼 | 5 层 | 1 号 |
6 | E 楼 | 6 层 | 2 号 |
然后我们再规定RGB三者的取值范围为0到255,0表示不发光,255表示发出最强的光线,因此RGB(255,0,0)就表示纯红色,同理RGB(0,255,0)就表示纯绿色,RGB(0,0,255)表示纯蓝色,这三种颜色按照不同比例混合就可以得到不同的色彩,因此我们可以用一组RGB值来表示任意一种色彩,这就是RGB色彩模型。
我们可以用一个立方体来表示RGB色彩模型,因为我们刚才说了任意一种色彩都可以被拆分为R、G、B三个分量,同理,立方体中的任意一个点的位置坐标也可以拆分为X、Y、Z三个分量,因此我们就可以利用立方体里面的某个点来表示某种颜色。
这里以1D LUT为例讲解一下,所谓1D LUT,就是指一维的颜色查找,也就是说你的输入值只能有一个变量,比方下面这组数据:
R | G | B |
3 | 0 | 0 |
5 | 2 | 1 |
7 | 5 | 3 |
9 | 9 | 9 |
R输入0,输出为3;G输入1,输出为2;B输入2,输出3。每一个输入值都准确对应一个输出值,这就是1D LUT,所以如果某个像素的RGB输入值是3,1,0,它的输出值将为9,2,0。如果R的输入值变成了2,但是G和B保持不变,那么只有R的输出值会改变,这时候像素的输出值为7,2,0。
很容易可以看出,变动某个颜色输入值只会影响到该颜色的输出值,RGB的数据之间是互相独立的。
这就意味着1D LUTs只能控制gamma值、RGB平衡(灰阶和白场)。
亮度对人眼的刺激是非线性的,第1个和最后一个灯泡点亮对人眼的刺激感觉是不同的。
人眼感觉黑 → 白的范围“有限”,灯泡可以无限,但是感觉会趋于一个有限值。
在上面的例子中,输入是灯泡的强度,输出是人眼的感觉,大自然中,感觉的差别阈限跟随原来刺激量的变化而变化,这就是著名的韦伯定律,我们来看一张图。
当物理亮度达到白色的20%左右的时候,人眼中已经感受到中灰色的概念。而剩下的一半高光区的灰阶,需要用白色80%的物理亮度才能照亮成白色。
在精确的色彩控制当中会接触使用3D LUT,因为它们能够实现全立体色彩空间的控制。
三个色彩平面的相交点(代表某个输入值的 LUT 输出值),我们可以看到某个输入颜色的改变都会对三个颜色值造成影响,也就是说任何一个颜色的改变都会对其他颜色做出改变。
由于 3D LUT 可以在立体色彩空间中描述所有颜色点的准确行为,所以它们可以处理任何显示的非线性属性,也可以准确地处理颜色突然的大幅变动等问题。