上一篇文章给大家介绍了一些openGL的知识点,今天继续给大家介绍一个关于图像的知识,LUT图
LUT指显示查找表(Look-Up-Table),本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。(来自百度百科)
其实通俗点来讲,就是事先有一套输出规则,然后将数据导入,根据规则输出修正之后的数据。
从图像上来说,其实就是达成了滤镜效果,下面我就来讲讲实现的大概过程。
大家都知道,图像是由众多像素点组成的,每个像素点都有对应的R、G、B值,而LUT图就是通过查找并匹配规则替换掉对应的R、G、B值,达到修改原图亮度、饱和度的目的。
比如LOG格式的视频,这个格式的视频画面对比度和饱和度都比较低,看上去就是灰蒙蒙的感觉。
借助标准LUT图进行色彩转换,就可以把图像转成整标准色彩的图像了。
LUT图转换过程如下图所示:
LUT图是一张512×512大小的图片,分为64个8×8的小区域,每个小区域对应一个B值(0~255,间隔4),小区域内的每个像素点对应一组R和G值(0~255,间隔为4)。
使用时,获取原图某个像素点的值,通过颜色查找,替换为对应的滤镜颜色值。
从查找方式上LUT可以分为1D LUT和3D LUT。
我们用公式的形式看看他们的区别,先设置Ri、Gi、Bi三个为输入值,Ro、Go、Bo为输出值,LUT标准的转换方法为FuncLUT。
Ro = FuncLUT(Ri)
Go = FuncLUT(Gi)
Bo = FuncLUT(Bi)
从公式可以看出,各个数值之间是独立的。
Ro = FuncLUT(Ri, Gi, Bi)
Go = FuncLUT(Ri, Gi, Bi)
Bo = FuncLUT(Ri, Gi, Bi)
在3D LUT中,数值之间是会互相音响的。
从公式对比中我们可以看出来,如果在色深为10位的系统中,1D LUT的数据量大概是3*2^10bit ,3D LUT就是(3*2^10)^3bit。
由此可以看出3D LUT的数据量比1D LUT多了一个指数级,所以3D LUT的精度比1D LUT高了很多,因为3D LUT 的数据量太大,所以是通过列举节点的方式进行数据存储。
目前用的比较多的还是3D LUT,毕竟精度更高,可以进行更多的色彩操作。
像在很多视频创作软件和图片处理软件里面都有TUL功能。
比较出名的就有达芬奇调色(DaVinci Resolve Studio)。
在Adobe PhotoShop中也有使用
现在很多的音视频技术中,处理滤镜的方式都有用到LUT。
这篇文章主要是给大家介绍一些LUT这个概念,大家熟悉一下就好,明白其中的一些实现过程,如果大家感兴趣的话,可以深入了解一下。如果有碰到比较好的文章,也请给我推荐一下。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。