LUTs, 即Look up tables, 即查找表.
我刚开始接触LUTs查找表, 是在处理相机原始图片的时候. 我在前面已经提到过,
用log映射高于8位的数据, 得出的精度较好( 如果只是取高8位或是低8位, 那么还
要10位, 12位的数据做甚? 直接拿8位的数据还简单一些 ). 映射函数为:
f(in) = 2^( log(in) * 8 / 10 );
这个映射函数是, 将一个2^10次方的数据转换成2^8次方的数据, 即一个RGB的
最大值.
如果一张图片的像素为2050*2448, 那么, 就会有2050*2448个像素点, 我们进
行映射的时候, 就会进行2050*2448次log运算, 这个运算量相当大啊, 每拍一张照片
都要进行如何繁复的计算, 那将会令人崩溃. 所以要改进算法.
不过, 如果仔细观察, 会发现, 每个像素点的值的范围是0-1023( 2^10 - 1 = 1023).
这样, 如果我们把0-1023的log值都求出来, 在进行运算的时候, 我们只要去查找
已经运算出来的log值就行了. 如此, 我们只是把一堆log一直存放在内存中, 直到我们
手工去释放它们. 这个就是LUTs表, 事先将大运算量的数据计算出来, 当需要去取
的时候, 去查找LUTs表即可, LUTs表用数组表示最合适不过了.
所以, 写出来的代码可能如下( C语言 ):