3D LUT生成与转换系统的设计与实现

2021-12-30 09:32郑晓发刘宇飞
现代电影技术 2021年12期
关键词:插值图像算法

郑晓发 刘宇飞

(北京邮电大学数字媒体与设计艺术学院,北京 100876)

1 引言

LUT,英文全称为Look Up Table。直译中文为“颜色查找表”。LUT 的本质为数学转换模型,通过对颜色的采样与插值计算,将色彩输入数值转换为特定的数值输出。其作用于图像的结果就是图像的颜色产生了变化。3D LUT 通过对RGB值做映射,实现了全立体色彩空间的控制,任意通道输入值的变化都会对三个颜色造成影响,这使3D LUT 能够用于精确的颜色校准工作,也可以对色相、饱和度、色彩空间等进行调整与转换。

3D LUT 在各行各业中有着广泛的应用。色彩管理中,LUT 转换将不同色彩空间连接,尽量缩小影像在不同媒介及显示设备上的视觉差别;数字摄影方面,一些数字摄影机机内不进行白平衡处理,会因感光元件感知不同颜色灵敏度上的差异,发生偏色现象,还有一些数字摄影机使用对数空间来记录数据,需要借助LUT 的处理,获得正常色彩关系的监看画面;影像创作领域,调色师在调色系统上使用LUT 对影像进行处理,满足导演想要的目标效果;日常生活中的彩色打印机,同样会用到LUT,将以RGB 记录的图像转换到打印机喷头使用的CMYK 空间,实现色彩的高准确性和平滑过渡。随着视频创作行业的磅礴发展,相机、摄影机制造商的对数空间技术下放,越来越多的人开始学习相关知识,接触到数字调色等技术,大众使用与生成LUT 的需求空前旺盛。

目前,3D LUT生成与转换软件系统开发方面,有Oleg Sharonov等开发的专业调色软件3D LUT Creator;摄影师Ben Turley基于JavaScript独立开发的LutCalc;Greg Cotton 等开发的MacOS色彩科学软件Lattice。这些软件都有自己的优势功能,但是普遍存在功能不够均衡,调色与LUT编辑只侧重一方面,人机交互性差,智能化程度低等问题。

综上,针对传统3D LUT 软件存在的问题,本文通过对3D LUT 应用与生成原理的研究,设计开发出一款具备常用功能而又操作友好的3D LUT 处理系统,将智能化处理方法接入到3D LUT 的生成中,同时与其他软件协作,解决如何快捷有效地生成3D LUT 的问题,更好地满足用户需求。

2 系统总体架构设计

2.1 体系架构

本文设计的3D LUT 生成与转换系统编程语言为Python,基于Qt 框架,融合PIL、NumPy、Face Recognition等第三方开源库,可运行在Windows、Mac OS等操作系统上,系统架构分为三层,包括数据层、应用层、表示层。

图1 系统架构图

本系统几乎不需要涉及到持久化存储,也没有联网或大批量查询的需要,所以并没有使用数据库来完成数据存储,要处理的图片和生成的LUT 都在计算机的文件系统上,由操作系统进行管理。

数据层主要涉及到由文件系统管理,存储在硬盘上的图像文件或不同格式的LUT,这些数据可能由用户准备,也可能是由系统的相关模块生成而来。同时为了提高程序运行效率和反应速度,将最常用的几个属性常驻在内存中,如预览窗口当前正在使用的LUT 和标准色彩图 (HALD),因为大多数操作都是对该LUT 变量进行运算,或者根据HALD来求解。

应用层是系统的核心,包含基础算法层与业务逻辑层两个部分。基础算法层对底层算法进行实现,保证执行效率,支撑业务逻辑层,而业务逻辑层则对应可被表示层调用的各项功能,并与外部系统进行数据交换。

表示层直接与用户进行交互,经过前期精心设计,借助可视化GUI设计工具和代码混合实现,为用户提供了良好的体验。信号与槽机制搭建起了应用层与表示层之间的桥梁,单独修改界面外观不会影响到任何逻辑功能。

2.2 流程设计

用户将待处理图像输入系统,在调用功能对图像进行处理时,修改都会先作用在HALD 上,系统根据HALD 的数值变化再生成LUT,这一LUT 也可以是用户从外部输入的LUT。经过插值计算后,LUT 作用到输入图像,最终效果显示在用户界面上。用户也可以对LUT 做编辑操作,修改LUT 的大小或是将两个LUT 进行合并,这些操作都会反应到图像上,如果用户对效果满意的话,便可以将该LUT 导出成标准格式的本地文件。

图2 系统核心流程图

2.3 模块划分

为了将系统繁杂的功能组织起来,实现解耦,提高系统的安全性和可移植性,采用模块化开发,合理地划分为五个模块,包括LUT 编辑、色彩空间转换、一级校色、第三方软件对接、辅助查看。

图3 系统组成框图

3 系统关键技术

3.1 HALD相关技术

标准色彩图(HALD)是3D LUT 的一种图像表示形式,其中包含3D LUT 中的所有颜色层次。它的每个像素都对应了一个不同的颜色,按照一定的规则进行排列。对于一款3D LUT 生成系统来说,HALD 即为它的核心,在比对标准HALD 与修改后HALD 逐像素变化并记录后,便可以得到对应的3D LUT。这一特性使其获得了接入各个模块与算法的巨大潜力。

图4 大小为64的标准色彩图

HALD 生成技术可以生成一张标准的方形HALD 图片,而对于系统内部而言,标准方形图片自由度略低,处理起来也会影响效率,所以并没有直接生成标准图片 HALD,而是生成了形状是1×N×3的数组,这个数组在导出为图片后高仅有一个像素,省去了先生成一个比目标尺寸大的最小平方数HALD 再缩小到目标尺寸的过程。

在生成HALD 时需要指定LUT 的大小,接下来是根据大小确定生成色值大小的间隔,或者说色值增长的步长,根据这个步长,以R、G、B的顺序将所有组合遍历出来就得到了HALD。

LUT 求解是与HALD 生成对应的,根据图像或数组形式的HALD 求解出LUT,并直接转为内部的LUT 类(形状为N×N×N×3),输入时也要指定大小。考虑到HALD 与LUT 大小是完全相同的,且一一对应,只需按照一定规则改变读入的HALD 数组形状,便能得到LUT。

3.2 LUT插值

LUT 的增长速度是三次方级的,大小为33的LUT 占用存储空间是1.2MB 左右,而能覆盖全部8位色深的大小为256的LUT 占用存储空间则高达576MB,大小每增长n倍,存储空间占用和计算量就会增长n倍,8倍存储占用只能得到2倍的精度提高。受限于存储空间和算力,LUT 不可能记录所有的颜色,常用的LUT 大小一般在17到65之间。

LUT 没有记录到的颜色就要通过插值来计算,其中,记录在LUT 上的颜色称为晶格点 (Lattice)。LUT 预览的功能由插值算法支撑,根据系统内部流程设计,插值性能如果不够好,会极大地拖慢整个系统的运行速度,几乎每一步操作都要卡一下,为用户使用带来很大的不便,所以算法的实现过程中会把速度纳为一个重要的考虑因素。

系统开发过程中实现了最近邻、三线性、四面体三种被各大视频调色处理软件普遍采纳的插值方法,并选择了兼顾速度和效果的三线性插值作为最后实装的插值方法,下面展开说明三线性的插值方法7。

图5 三线性插值示意

我们将RGB 色彩空间中的颜色三元组定义为(r,g,b),R是比r小的最高顶点,R是比r大的最低顶点,B,B,G,G同理,输入颜色相对于这些顶点的位置用δ,δ,δ表示,计算方式见式(1):

三元组 (r,g,b)周围的八个顶点定义见式(2):

在三个颜色通道上独立执行三个线性插值 (三个通道的计算顺序没有要求),完成计算见式(3):

3.3 色彩空间转换

色彩空间转换包括色域、白点、Gamma的转换。

色域和白点的转换都是以CIE XYZ空间为桥梁的,我们可以将不同色彩空间下坐标的转换用一个旧基底到新基底的过渡矩阵来描述,通过坐标变换公式来得到结果。

过渡矩阵P的展开写法如式 (5),其中r,r,r为目标色域中红色基点的xyz坐标值,g和b同理,i,i,i为缩放系数。

i,i,i需要通过给定目标白点的xyz坐标w,w,w来求解。

xyz坐标是经过归一化了的,z可以通过1-x-y来求出,所以只需提供目标色域的三基色与白点的xy坐标值,就可以解出矩阵P,通过矩阵运算与XYZ空间下的值互相转换。

实际程序的编写过程中用到了NumPy的einsum (爱因斯坦求和约定)方法加速矩阵乘法,省去图像逐像素遍历的过程,极大缩短了转换所消耗的时间。

对于转换过程中出现的超范围情况,即最小值小于0,最大值大于1,直接对超范围的数值做裁切,小于0的赋值0,大于1的赋值1。

大多数Gamma曲线都是一个分段函数,前半段为直线,后半段为对数曲线,只在具体参数上有较大差异,这里以Sony S-Log3 的Gamma转换为例列出伪代码:

算法实现中使用了NumPy的select函数来减少嵌套循环和判断带来的巨大开销,按照分段函数的逻辑,在一个步骤里对图像数组中满足不同条件的像素值做不同的计算。

4 功能实现

4.1 界面设计

界面按照不同功能的使用频率进行分区,图片预览窗口占了很大比重,常用的功能做成按钮放到上方,色彩空间转换下拉栏和一级校色滑块放到右侧,其他使用频率较低的功能收纳到菜单栏中。这些功能总共涉及到了43个信号与槽。在用Qt Designer创建UI文件时,小到标签按钮,大到整个窗口,都置于布局中,这让用户界面上的组件看起来非常整齐,也能做到在窗口大小变化时自动适应。

图片预览的地方重写了Qt自带的QGraphics-View 类,且定义了新的信号以实现拖拽打开图片功能,依托Qt的事件处理机制,实现了鼠标控制图片缩放移动、图片自适应缩放等功能。系统主界面如图6所示。

图6 3D LUT 生成与转换系统主界面

4.2 LUT编辑

LUT 编辑模块包括LUT 的输入输出、插值算法支撑的LUT 预览与尺寸修改、LUT 的合并。

LUT 输入输出功能支持当今最主流的几种LUT 格式:Cube、Lustre 3DL、Nuke 3DL、VLUT。LUT 文件的本质是文本文件,LUT 输入输出的过程也就是按照一定规则读写文本文件的过程,重点在于对格式的把握上。主导这几种格式的厂商大多提供了严谨细致的白皮书,是重要的参考依据,在规格书之外,开发过程中也参考了许多使用场景进行测试,以提高兼容性。根据测试,生成的范围为0~1 的不同格式LUT可以在相关DCC软件中正常读取和使用。

图7 LUT 导出窗口

LUT 预览功能借助插值算法将当前LUT 应用到输入图像上,并把结果交由GUI显示。LUT 尺寸修改功能会先计算一个原LUT 与目标LUT 之间的缩放比率,新建一个目标大小的空LUT,调用插值算法计算原来的位置乘上缩放比率后的新对应颜色。如果缩放是呈整数倍比例的话,则无需插值计算,直接间隔取对应的晶格点,修改过程会很快。

LUT 合并功能将两个大小相同的输入LUT 合并为一个新LUT。实现过程可以看作是一个多次映射,将LUT 1的映射结果作为LUT 2的输入,得到合并后的LUT。

4.3 色彩空间转换

色彩空间转换模块调用转换算法完成色域、白点、Gamma的转换,只需厂商提供的规格书中色域三个基点及白点的xyz坐标和Gamma转换公式便可以增加可转换的色彩空间,将其输入转换算法得到结果。

4.4 一级校色

一级校色模块包括了常用的参数如亮度、对比度、曝光、饱和度、自然饱和度、色温、色调的调整,也包括了智能化的自动色彩均衡和自动白平衡功能以及手动色彩匹配。

自动色彩均衡是通过OpenCV 直方图来实现的,把R、G、B 三个通道分别独立缩放到0~255的范围,如果该图像的环境光有明显的色调倾向,比方说R 和G 占主导地位,该算法便会增强B通道,来让它的黄色调不那么明显。

自动白平衡功能调用了第三方库,该库使用了一种数据驱动方法,在给定白平衡错误的图像后,会在数据集中搜索类似的错误图像,基于这些图像的混合特征来构建校正变换矩阵,校正后的图像看起来像在相机拍摄照片时就已经正确应用了白平衡一样。算法实现中同时也调用了Face Recognition库,针对人脸单独做自动白平衡,应对主体和背景光照色温反差较大的场景。该功能在实际使用中可以配合Da Vinci Resolve的遮罩追踪完成二级校色。

手动色彩匹配功能使用了薄板样条插值 (Thin Plate Spline,TPS)算法,扭曲对象为三维空间中的颜色,在给定内容相同、色彩不同的图片后,通过手动选点,便可反求出较为平滑的3D LUT。当用户不知道硬盘中图像的转换方式,也没有转换LUT,但是有转换后的图和原图时,就可以使用该功能快捷方便地得到一个适用性较高的LUT。

4.5 第三方软件对接

该模块通过调用API与Adobe Premiere Pro和Da Vinci Resolve联动,从Premiere中读取单帧预览画面,或是将当前编辑的LUT 应用到Resolve时间轴上的视频片段。前者抓取CTI的时间码,根据时间码将序列对应帧导出JPEG 图片到硬盘上,接下来按照读取一般图片的流程读取。后者调用LUT输入输出功能将正在编辑的LUT 导出到Resolve存放LUT 的路径,将导出的LUT 应用给此刻时间轴上的视频片段。

4.6 辅助查看

为了方便用户观察,系统还内置了LUT 可视化、直方图查看、色卡生成三个功能。

图8 LUT 可视化

LUT 可视化借助Open3D 将每个晶格点当作点云绘制在了三维空间中,用户可以自由拖动、旋转、缩放,直观的去查看LUT 的特征,从原点出发的坐标轴会示意映射前的颜色。

直方图使用QT 自带的绘图功能进行绘制,可以自由选择要查看的通道,也可以在原图与应用LUT 后的图片之间切换。

图9 直方图显示

色卡生成功能会通过颜色量化算法对当前的图片进行分析,统计出各个颜色的占比,按占比降序列出主要颜色,并显示该色的RGB值、十六进制值和占比具体数字,为用户对画面配色的分析提供了很大的便利。

图10 色卡生成

5 结语

本文以3D LUT 在各行各业得到广泛应用,大众用户使用与转换LUT 的需求为背景,基于Python和Qt,开发出了一款界面美观、功能丰富、有创新性的3D LUT 生成与转换系统。系统实现了一个3D LUT 软件应有的主要功能:LUT 预览、LUT 读写、色彩空间转换、一级校色,在各项指标上与专业软件非常接近;而在基本功能之上,系统又探索了传统软件缺少的功能,自动白平衡、自动色彩均衡、色盘提取使LUT 的生成过程更具智能;与第三方软件对接的部分打破了软件之间的界限,进一步简化了用户的操作;系统兼顾功能和美观易用,可跨平台运行,性能上也充分为工程应用考虑,具有使用价值。❖

猜你喜欢
插值图像算法
无定河流域降水量空间插值方法比较研究
Travellng thg World Full—time for Rree
A、B两点漂流记
福州市PM2.5浓度分布的空间插值方法比较
不同空间特征下插值精度及变化规律研究
学习算法的“三种境界”
算法框图的补全
算法初步知识盘点
名人语录的极简图像表达
基于混合并行的Kriging插值算法研究