基于图像分解的光照估计算法 *
2021-09-24曹天池李秀实陈嘉南向未来胡迎松
曹天池,李秀实,李 丹,陈嘉南,刘 爽,向未来,胡迎松
(华中科技大学计算机学院,湖北 武汉 430074)
1 引言
增强现实技术将虚拟的信息合成到真实世界中,有效地提高了用户对于现实场景的交互体验。实现真实的增强现实效果的关键在于保持虚拟对象与现实世界对象之间的一致性,一致性可以划分为时间一致性、光照一致性和几何一致性[1]。目前时间一致性与几何一致性的相关研究已经趋于成熟,而光照一致性仍然面临着许多挑战。
在实际的复杂动态光照环境下,有效的光照估计是实现光照一致性的重要先决条件之一,尤其从单幅图像中估计出场景光照的信息是一个复杂的、具有挑战性的任务。一幅图像里的光照强度是一个叠加了场景中的材质属性信息、光照信息和场景几何信息等信息的函数[2]。以往的光照估计方法常常笼统地将场景材质假设为漫反射表面,并采用局部照明模型对照明进行模拟,当场景中存在大量的镜面反射材质或者相近材质时(比如海面或者玻璃表面较多的场景),这种方法并不能从有限的线索中准确地还原出光照信息。
早期的光照估计方法多借助辅助标志物进行,利用一个已知表面材质属性的立方体作为标志物,通过阴影或表面图像分析来获取光照信息。1998年,Debevec[3]通过组合采用不同的曝光时间拍摄的多幅镜面小球图像制作高动态范围环境图,并估算出局部场景的双向反射分布函数。这类方法对基于图像的虚拟物体渲染起到了很大作用,但其缺点是需要大量的预处理操作。随着图像分析技术的进步,基于图像的方法也应用于光照估计,这一类方法可以分为深度方法和数学方法,深度方法应用深度神经网络,从单幅图像中恢复场景光照图。比如Zhang等[4]提出的深度自动编码器,通过在合成数据集上训练,学习回归非线性饱和地动态范围全景图的高动态光照。Hold-Geoffroy等[5]利用全景图中提取的单幅图像训练CNN网络。而本文所关注的数学方法通常不需要获取大量的数据集,具备较好的灵活性。Liu等[6]通过对视频流中的每一帧图像提取稀疏平面特征点来估计太阳光和天空的相对强度。Chen等[7]利用语义约束选择几何模型上的微表面,结合阴影图像和反射率图像来估计场景中的照明参数,实现较真实的虚拟物体渲染效果。
本文提出了一种基于像素聚类方法的图像分解算法对图像进行反射光的分解,并提出了一种利用场景中分解出的不同反射分量估算场景照明信息的全局光照估计算法。该算法综合考虑场景中的反射分量,利用全局照明模型,得到了光源的位置和颜色信息,然后利用基于物理的渲染将虚拟物体插入到图像中,实现具有光照一致性的渲染效果。和前人的研究相比,本文算法不需要任何辅助标志物或者在场景中插入光探针,也不需要对深度神经网络进行训练,仅通过数学分析单幅图像估计光照实现具有真实性的渲染效果。
2 图像分解
为了更准确地进行全局光照估计,需要使用图像分解算法准确地分离图像中的镜面反射分量。本文所提出的图像分解算法首先在具有镜面高光的场景中估计出一幅场景图像的无镜面反射图估算图,并通过像素聚类分离出场景的镜面反射图和漫反射图,然后对漫反射图进一步分解,得到场景的反照率图和阴影图。
2.1 强度比与无镜面反射估算图
在具有镜面反光的输入图像中,对于相同的颜色表面,镜面反射高光的部分通常包含仅具有漫反射分量的像素和同时具有漫反射和镜面反射分量的像素。后文会定义一个色度空间,并在色度空间中对像素进行聚类,以分离不同像素。
本小节的分类标准依赖于强度比的定义。首先定义Imin(x)和Imax(x)分别为储存x像素RGB三通道强度的最小值和最大值的单通道图像;定义Ir(x)为存储最大值和最小值单通道图像的差值图像,得到的结果同样是单通道图像,该差值图像不再包含双色反射模型中的镜面反射部分,因此是无镜面的图像。根据Shen等[8]提出的强度比定义,强度比值为最大值和差值的比值:
(1)
为了排除与镜面反射部分无关的像素来减少计算量,需要划分出高光区域。高光区域的计算需要对像素的漫反射色度值进行计算。将无镜面反射估算图(Specular-free)作为漫反射分量的伪表示。为了方便计算,将原图像减去RGB分量的最小值单通道图像的结果作为无镜面反射估算图,定义为Isf。对于每个像素,其无镜面反射估算图的漫反射色度估计值可以表示为Λsf:
(2)
由漫反射色度可以计算出每个像素的最小强度,将每个像素的计算结果与平均最小像素强度进行比较,判断像素是否属于高光区域,以便进行下一步的像素聚类。
2.2 像素聚类方法
为了将高光区域内的像素分离为镜面反射分量和漫反射分量,需要将这些像素分类,每类像素使用不同的区分标准进行反射类型的划分。本文使用K-means聚类方法对像素进行分类,需要率先定义分类的个数和初始种子。本文通过将相关区域的像素投影到最小-最大色度空间中来对这些具有相同扩散色度的像素进行聚类。聚类算法需要首先选定聚类的初始簇种子,为了确定初始种子的选择,接下来需要对最小-最大色度空间进行数学分析。首先,根据式(2)可以从无镜面反射估算图获得伪漫反射色度,由此可将伪漫反射色度重写为:
(3)
Figure 1 Chromaticity space of the pixels图1 像素所在色度空间
之后基于这个推导便能对高光区域的像素进行K-means聚类,首先初始化聚类中心,根据上述推导,处于三角形顶点的像素具有最小色度或者最大色度的极值,更容易被检测到,并且还能消除选择簇种子的随机性,选择顶点像素作为起始像素。之后将输入图像的相关像素与最近的初始簇种子相关联,将不同类别的像素分配给最近的聚类。最后,在分配之后需要计算新的聚类中心点,将每个簇种子的位置更新为在色度空间中投影的与其相关联的像素集合的质心,再将每个像素重新与最近的簇种子相互关联起来。重复迭代上述的过程经过一定的次数,直至没有数据再更改聚类,整个聚类过程收敛便可以得到最终的结果。
通过对高光区域的像素进行聚类能够将相关像素有效地分离成不同的聚类,分离之后,需要为每个聚类确定能够将镜面反射像素与漫反射像素区分开的强度比。对聚类结果中的每个聚类的像素强度比进行升序排列,以聚类结果的像素质心强度比作为分离标准,划分出漫反射像素和镜面反射像素。
对于分离的结果可能存在高频伪像的情况,本文对镜面反射结果进行进一步处理,对反射分量应用高频强调滤波器来突出错误部分,这种滤波器是一个二维傅里叶滤波,通过强调边缘来锐化图像。可以采用通用的3×3盒式低通滤波器构造。对于所得到的漫反射图像和镜面反射图像,分别令它们通过高频强调滤波,得到的结果再合并成一幅完整的组合图像,将这幅组合图像与将输入图像经过高频强调滤波的结果图进行比较,如果分离正确无误,这种方法得到的2幅图像应该是趋近于相同的。基于相似性函数进行分析并优化结果,即可提高反射分量的分离精度。
2.3 本征图像分解
为了进行后续的光照估计实验,不仅需要对图像进行反射类型的分解,同样地,为了获取准确的光源方向和颜色渲染,还需要处理分离后的漫反射图像。在场景照明的过程中,漫反射往往起到主导作用,若想准确估计出场景的光照信息,漫反射图像的信息是不可或缺的。本征图像分解的目的在于将漫反射图像分解为阴影部分和反射率部分,利用分解后的本征图像,结合上一步分离得到的镜面反射信息,可以在后续实验中得到准确的光照分析结果。
3 全局光照估计算法
根据图像分解的结果,通过反射量信息和图像阴影信息,结合场景三维结构便能推导出光源的位置和颜色信息,从而对场景重新点亮,对虚拟物体进行渲染。
3.1 光照模型与深度估计
照明模型用于生成物体表面在指定点上的颜色,选择合适的照明模型对于图像中虚拟物体的视觉效果是非常重要的,由于本文加入了对图像中镜面反射元素的估计,在选取光照模型时需要将漫反射模型与镜面反射模型相结合来达到最好的实验效果。由于Torrance-Sparrow模型在计算反射光强度时可以将表面半球的所有方向入射光线进行积分,大大提高了光照计算的准确性,因此本文采用该光照模型。
在第2节对一幅输入的RGB图像获取了其中的色彩信息和阴影信息,用于估计场景中的光照色度和光照方向,在实验中为了利用所获取的这些信息,还需要通过图像获得场景的三维结构信息。场景的三维点云可以有效地结合图像反射和图像阴影信息来计算像素间的位置关系,从而得出光照估计结果,因此在进行场景光照估计之前,首先需要获取场景的三维结构。通过单幅图像获取场景的深度信息有很多方法,许多现有的方法能够估计出小尺度的室内场景结构信息,但是对于室外大尺度场景并不能得到精确的结果。Saxena等[10]的方法利用二维图像中不同部分的关系来理解场景的三维结构,其模型通过监督学习使用训练集进行训练,在室内室外场景都能取得较好的效果。本文对该方法进行了改进以将其应用在光照估计算法中。
3.2 光源位置估计
本小节利用镜面阴影和漫反射阴影得到光源位置信息,适用于单一光源或多光源场景。
首先使用镜面反射的阴影来估算场景中的光源位置,对于分离出的镜面反射图像中的强度较大的图像区域,可以通过镜面光斑的3D位置,结合还原出的三维点云,得到反射光的方向以及这些区域的表面法线。通过这些信息可以获得光源位置。本文通过镜面反射信息估算出的光源方向向量Ls的定义如式(4)所示:
(4)
利用镜面信息估计出光源位置之后,再使用漫反射阴影信息估计出一个光源位置来帮助优化结果。通过使用加速鲁棒特征算法来计算特征点,这些特征点被选为图像中对象轮廓的关键点,通过检测相同物体的阴影数量来估计场景中的光源数量。再结合3.1节中估计出的深度信息可以获得这些对象轮廓和阴影点的3D位置。结合这些同样可以确定光源的大致方向Ld,如式(5)表示:
(5)
其中,E是一组场景中对象的轮廓采样关键点数量,pi是关键点的3D位置,di是关键点的阴影位置。R表示光源与轮廓点之间的平均差值向量。接下来结合镜面反射和漫反射2个阴影所估计出的结果,通过线性组合可以得到场景光源的初始化位置。之后利用最优化的方法来逼近光源位置的真实值,当场景中有多个相同颜色的灯光时利用式(6)来估计每个灯光的位置:
(6)
其中,N为光源数量,Li表示第i个光源的光照,上标s代表镜面反射,d代表漫反射。初始化光源后通过式(6)来估计场景中N个光源的最终位置。在实验最优化的步骤中通过设置阈值和迭代次数来逼近最优结果。
3.3 反照率估计
获得光源位置之后,本小节利用不同反射量计算光照颜色,以在后续渲染中使效果更加真实。为了从镜面反射项得到准确的光源色度信息,本文在实施分离后将场景光源颜色估计为图像中的镜面像素平均色度,然后对原始图像归一化为新的场景光源颜色,再进行图像分解,直到场景的估计光源色度收敛,这时得到的就是场景中的实际光源色度,可直接用于场景镜面反射部分的颜色渲染。
此外,对漫反射部分进行渲染的时候需要考虑漫反射的观察颜色问题。根据渲染方程,漫反射图像中的场景材料表面为朗伯表面,考虑到可视程度,则到达相机方向的光线可以由式(7)表示:
(7)
其中,Li(l)表示方向l的入射光辐射率,θ为入射角,V表示从顶点到视点的向量,ω为初始化系数。进行反照率估计的目标是确定光照Li,使得在给定场景三维结构和相机参数的情况下能够产生尽可能接近分离出的阴影层的结果,将着色的误差用式(9)定义为:
Es=∑p(S(x(p))-Sv(p))2
(8)
其中,p是图像平面中的像素位置,S(x(p))为三维空间中的着色值,Sv(p)为图像平面中的着色值,下标v代表观察方向。环境贴图对于漫反射部分更适合用于进行整个环境的照亮,从数学上可以表示为一些基函数的线性组合,例如球谐函数,这种方法对光照强度的变换更加灵敏,在球坐标的基础上可以将需要估计的光照Li写为加权和:Li=∑kαklk,其中αk和lk代表超像素k的平面参数和λ射光方向,代入式(7)改写渲染方程,便可以把目标函数改写为二次形式:
(9)
其中,α和sp是第k个分量分别为αk和sk(x)的向量,sk(x)是指每一个基础的lk所贡献的基础着色值。选择了一组基函数后,可以通过最小化目标函数来计算每个分量的权重。在获得基函数的系数之后就可以生成环境图照亮图像中的漫反射部分。
最后,利用得到的光源信息,使用基于物理的渲染方式重新渲染场景,在场景中插入不同材质的虚拟物体时可以保证光照一致性。
4 实验仿真与分析
本节主要对所提出基于图像分解的光照估计算法进行实验仿真与分析。实验分别选择2组室内与2组室外的不同场景,针对室内外的场景特点对实验进行优化,室外场景往往高光像素较多,整体场景较亮,根据镜面物体去推断光源方向可能会不够准确,因此对输入图像设定阈值Th,以控制输入图像的高光像素,这样能够有效地区分大尺度场景中的镜面反射部分。分离出的高光图如图2所示。
Figure 2 Experimental results of image decomposition based on pixel clustering图2 基于像素聚类的图像分解实验结果
图2直观地展示了本文算法在一些室内外场景下的镜面反射提取效果。接下来将定量评估图像分解算法,并与其他人所作的相关研究进行比较。选取图像分解领域的通用数据集对象进行评估实验,使用峰值信噪比来定量评价实验结果,根据2幅图像之间的均方差来定义实验误差,直观地表示2幅图像的差异。表1展示了本文算法与其他算法对一些不同的通用对象进行图像分解实验时的分解准确度比较,数值代表峰值信噪比,加粗的数值代表对应对象镜面反射分离的最高精确值。
可以看出,对于标准数据集中的5个不同的对象,本文算法大多得到了更高的分离精度,之后将图像分解方法与深度估计和本征图像分解相结合,对场景空间中的光照进行分析。
Table 1 Peak signal-to-noise ratios comparison of different algorithm on the data set表1 数据集上不同算法的峰值信噪比对比
在实验场景的中央放置一个表面是镜面材质的球表示场景中的光源信息,并将本文算法与Liu[15]的算法在光源的方向和强度估计结果上进行直观比较,不同场景下的光照估计结果如图3和图4所示。
Figure 3 Outdoor scene lighting restoration图3 室外场景光照还原
在图3所展示的室外场景中,主光源为太阳光源,是单一光源,在场景中处于高位,且光照强度很大。相比文献[15]的算法,第1个场景中本文算法对于太阳高度的估计相对更为准确,文献[15]的算法还原光照偏低。第2个场景中本文算法对于强度的还原相对更加准确,文献[15]的算法还原光照偏暗。在图4所展示的室内场景中,第1个场景属于单一光源场景,处于右上角的位置,第2个场景在教室中,属于多光源场景。相比文献[15]的算法,本文算法在单光源室内场景中对方向的估计更为真实准确,在多光源场景能够估计出多个点光源来模拟场景的多光源效果。
Figure 4 Indoor scene lighting restoration图4 室内场景光照还原
恢复场景照明后将虚拟物体合成到场景中,观察光照一致性效果,渲染效果如图5所示。
Figure 5 Virtual object rendering图5 虚拟对象渲染
从图5可以看出,本文算法得到的光照能够对虚拟物体阴影进行较为真实的渲染。为了定量评估算法的准确性,在渲染软件中创建一个虚拟场景,并模拟2个点光源的照明情况,在创建的虚拟场景中,放置一个镜面材质的球体和一个朗伯表面的立方体,之后创建2个不同位置方向的点光源对其进行点亮,对比实验结果如图6所示。可以看出,本文算法得到的光照方向大体准确,同时也能够准确地还原出光照颜色,并且对于镜面材质部分的模拟,本文算法的渲染效果比文献[15]的算法的更接近真实场景。
Figure 6 Simulation scene rendering图6 模拟场景渲染
表2和表3是本文算法估计光源的定量对比。本文算法对于光源的位置估计平均误差控制在2个单位以内,也准确还原了方向向量和颜色信息。
Table 2 Comparison of light source position in simulated scenes表2 模拟场景光源位置对比
Table 3 Comparison of light source direction in simulated scenes表3 模拟场景光源旋转方向对比
5 结束语
本文改进了光照估计算法,提出了一种基于像素聚类方法的图像分解算法对图像进行反射光的分解,并提出了一种利用场景中分解出的不同反射分量估算场景照明信息的全局光照估计算法。综合考虑场景中的反射分量,利用全局照明模型,得到了光源的位置和颜色信息,然后利用基于物理的渲染将虚拟物体插入到图像中,实现具有光照一致性的渲染效果。使用上述算法进行虚拟物体的渲染实验,结果表明,本文提出的算法能够有效地实现非朗伯体表面场景中的光照估计以及虚拟物体渲染,明显提高了渲染结果的真实感。