参考
看似高深的LUT,原来如此简单!
RAW LOG LUT
LUT的前世今生
1.原理
LUT指的是颜色查找表,可以理解为一组(r,g,b)值映射为另一组(R,G,B)的过程,在图像处理处理过程中就相当于加了一层滤镜,改变了画面的色彩和曝光。
如图,LUT根据函数的输入变量和映射关系分为不同的维度,1D、2D、3D LUT
2.应用场景
-
电影滤镜:用LUT渲染出来的照片会有较强的电影质感
-
实现跨平台同色效果:不同平台的滤镜效果是不一样的,可以将图片的滤镜效果保存为LUT,然后在另外一个平台加载LUT,可以保证画面效果的一致性
3.插值算法
假设在1D LUT中,可以精确知道x=0和x=1对应的y值,那么当x=0.4的时候,该如何确定y值呢?
这个问题关乎LUT的精确度,可以简单粗暴地从提升晶格数(明确知道的数据点)来提高精确度,但一味的提升意味着计算复杂度也会提升,比如在3D LUT中,当32x32x32提高一倍精度后变为64x64x64,但是计算量却提升了八倍。
还有一种方法,就是预测估计,关乎一个“猜”字,接下来介绍的插值算法是不同的猜测方法
主要介绍几种典型的算法:线性插值 双线性插值 三线性插值 四面体插值
参考来源1 参考来源2
线性插值
假设点p位于a和b之间,那么根据直线的重心坐标公式可以求出点P的位置,具体公式如下:
p
=
a
(
1
−
k
)
+
k
b
p=a(1-k)+kb
p=a(1−k)+kb
k
=
p
−
a
b
−
a
k=\frac{p-a}{b-a}
k=b−ap−a
假设j=1-k,则
P
=
j
A
+
k
B
j
+
k
=
1
P = jA + kB\\ j + k = 1
P=jA+kBj+k=1
双线性插值
实际上就是分别从X轴和Y轴分别做线性插值,首先在X方向做两次线性插值,得到a,b点的坐标,之后在Y方向做一次线性插值,得到c坐标
三线性插值
同理,根据三维空间内立方体的8个顶点,进行7次线性插值得到新的插值点
四面体插值
根据约束条件确定输入像素(r,g,b)位于哪一个四面体,得到合适的四面体后,即可按照公式利用对应四面体的4个定点进行插值计算
具体公式
4. LUT优势
- 确保变换的一致性
- 避免复杂的计算公式
- 无可变参数
- 具有公开性
后续还会继续补充相关达芬奇应用实例