Underexposed Photo Enhancement using Deep Illumination Estimation | CVPR 2019
其中值得注意的是, 作者将特征的提取过程分解为全局和局部特征,并用于生成低分辨率的光场图,并采用基于 bilateral grid 的上采样来获得原始分辨率的预测结构,使得大部分的计算是在低分辨率的特征图上进行,提高处理效率。
作者分别在上述两个数据集上进行训练,针对两个常用的指标PSNR(,峰值信噪比)和SSIM(结构相似度)进行评估,以下分别是在自制数据集和Adobe数据集的对比:
视觉对比:
作者认为该模型在对比度,细节,色彩还原的自然度上相比其他方法有优势
用户评价:
作者向500位参与者征集评分,通过从Flickr采集100张包含各种场景的,并且50%的像素亮度都低于0.3的图像进行测试,用不同的增强方法进行处理,针对6项问题收集参与者评分:
出现的问题:
上图展示了该方法,也是其他许多方法都存在的问题,一是对于大面积黑色缺乏纹理的区域,不能做到很好的细节还原;二是处理后的结果存在明显噪声的情况。
文章中的 Bilateral Grid Based Upsampling 的主要任务是将生成的低分辨率illumination上采样至原分辨率,是图像增强中常见的操作,即考虑到计算耗时,而避免图像增强算子直接在高分辨率图像上进行处理,转而采用将原图下采样到较小的尺寸,经过增强后再上采样至原尺寸,而两次缩放常会导致图像的失真,而基于Bilateral Grid 的上采样方式则在保持低计算量的前提下尽量减少图像数据的损失。Bilateral 指代在图像增强中的一种模式:
J表示目标图像,p,q表示图上的坐标,w是与位置有关的权重,而Bilateral Filter的最初形式中,w(p,q)表示为位置坐标间、亮度值间距离的高斯函数值的乘积,其中Bilateral指将亮度空间和位置空间的结合,权重w的计算表示为:
其中g表示高斯函数,计算时q的取值在一个固定大小的窗口范围内,也就是目标图像上一点的像素值与原图上该像素局部各像素的加权和,而之后出现了一些加速算法,典型的是将亮度值作为一个单独的第三个维度。之后又出现了Bilateral Grid,即将空间域和亮度域离散化,形成一个三维的网格,而图像增强的过程在每个网格中可以被近似为一个矩阵运算,该思路发展出了Bilateral Guided Upsample
在Bilateral Guided Upsample之前,先看一下Joint Bilateral Upsample可能更有助于理解:
求和部分在一个窗口中,采用低分图上的对应的p,q坐标计算有关位置的高斯函数值,采用原图上的p,q位置的像素值计算有关亮度的高斯函数值,即Joint的由来
核心思路:
这幅图表现了在应用图像增强前后,局部的亮度值的变化情况,比如红框中,增强前后的像素值的映射近似为线性关系,Bilateral Grid中存放的就是对增强算子的函数的近似,在此被简化为一个线性运算,用一个3*4的矩阵表示。
该图左侧是采用局部拉普拉斯滤波器进行对比度增强,右侧表示了在不同大小的邻域中,增强前后的亮度值的对应情况,显示在邻域较小时,即使对一个复杂的算子,也可以近似视为一个平滑的曲线,而随着邻域增大,这种关系则变得不明显。
下图左侧是从2维图像中截取一行像素的亮度值表示,以及在只使用数据本身得到的对三种不同的增强算子的仿射变换的拟合值的情况,右侧是在使用平滑操作后,grid中仿射变换的情况:
总体来说,BGU的流程是首先将高分辨率图像进行降采样,在低分辨率图像中应用图像增强的算子,再从低分图像对中得到低分辨率下的 bilateral grid,随后在原始分辨率图像作为guid,进行slice(这里是三线性插值)得到原始分辨率的颜色转换,最后将转换应用在原始图像上获得增强的高分辨率图像。而 bilateral grid 的求解,作者介绍了两种方法:
第一项是在低分辨率图像上进行slice和增强图像的生成,再与使用增强算子或其他增强方法得到的图像作差,后面三项为grid中的仿射变换在空间和亮度维度下的平滑度。
本文的网络结构与同用于图像增强的HDRNet相似,在HDRNet中对Bilateral Grid Based Upsample有更详细的描述。
移动图像处理中的一个关键挑战是性能。给定参考成像流程,甚至人工调整的图像对,作者尝试重现增强功能,并实现实时评估,为此引入了一种新的神经网络,灵感来自双边网格处理和局部仿射颜色变换。使用输入/输出图像对,训练一个卷积神经网络来预测双边空间中局部放射模型的系数。学习做出局部、全局和内容相关决策,以近似所需的图像转换。在运行时,神经网络会使用输入图像的低分辨率版本,在双边空间中生成一组仿射变换,使用新的切片节点以边缘保留方式对这些转换进行采样,然后将这些向上采样的转换应用于全分辨率图像。
该算法可在智能手机上实现毫秒级处理高分辨率图像,提供 1080p 分辨率的实时取景器,可获得许多种最先进图像算子的近似质量。与以前的工作不同,其不需要在运行时访问原始的算子。这允许该模型学习复杂的、依赖于场景的转换,这些转换通常缺乏足够的参考可用,例如修图师的摄影编辑。
相机和移动设备产生的高分辨率的图像和视频使图像处理算法面临巨大的性能压力,需要熟练的程序员进行复杂的代码优化。虽然执行系统的贡献已经试图促进高性能可执行文件的实现,但它们需要程序员的专业知识,它们的运行时间成本仍然随着流水线的复杂性而增长,而且它们只有在过滤器的源代码可用时才适用。此外,由于图像增强是主观的,因此通常希望直接从人类调整中学习增强模型,而作者提出了一种机器学习的方法,通过深度网络学习参考滤镜、流水线、甚至主观手动调整照片的效果,可以快速评估,且成本不受其复杂性的影响。我们专注于不对图像进行空间扭曲或添加新的边缘的摄影增强。
作者提出了一种新的网络架构,能够学习丰富的摄影图像增强功能,并能在高分辨率输入上快速评估,通过三个关键策略来实现这一目标。
尽管图像增强算法一直是研究的重点,但大多数复杂的算法都很吃资源,无法在移动设备上快速评估,之前的工作已经确定了特定的关键操作,并开发了新的算法来加速这些操作。例如卷积金字塔来加速线性线性平移变量滤波器。同样的,由于边缘感知图像处理的无处不在,许多方法也被提出来加速双边滤波。简单的重采样通常会导致一个无法接受的模糊输出,但这个问题通常可以通过使用一个更复杂的重采样技术来解决。Bilateral Joint Sampling 通过在高分辨率引导图上使用双边滤波器来产生一个片状平滑的边缘感知取样。基于这一思想,通过在双边网格内求解一个紧凑的优化问题,产生最大限度平滑的上采样结果。
Gharbi et al.[2015]专注于学习从input到output的转换,而不是output本身。他们用一个简单的局部模型集合,一个为给定的输入/输出对量身定做的简单的局部模型,近似了一大类复杂的、空间变化的算子。计算算子和拟合公式的任务被放到云端,而移动设备只需要应用公式,从而节省了时间和精力。类似地,Chen用双边空间中的局部affine模型网格近似于图像算子,其参数以类似于引导式滤波器的方式拟合到input/output pair。通过在低分辨率的图像对上执行这种模型拟合,这种技术可以实现实时的设备上计算。
作者的不同之处在于,没有从一对图像中拟合一个模型来近似一个算子的单一实例,而是构建了一个类似于CNN的模型,该模型被训练成将算子应用于任何未见过的输入。这使得我们在运行时不需要原始算子,并提供了学习非算法转换(即手工调整输入/输出图像对)的机会。这也使我们能够优化仿射系数,使算子在全分辨率下运行时的算子模型化,这对随比例尺变化的滤波器来说很重要。
提出了一种新的卷积网络架构,可以用来进行快速图像增强,其具有很强的表现力,保留了边缘,并且在全分辨率下只需要有限的计算量。它是完全端到端训练。根据作者的经验,图像增强往往不仅取决于局部图像特征,而且还取决于全局图像特征,如直方图、平均强度甚至场景类别。因此,我们的低分辨率流被进一步拆分为局部路径和全局路径。高分辨率流在全分辨率下工作,执行最小的计算量,但其关键作用是捕捉高频效应,并在需要时保留边缘。为了实现这个目的,我们引入了一个受双边网格处理启发的slicing层,在低分辨率网格的仿射系数的网格中基于学习的引导图执行数据依赖性的查找。考虑到通过用全分辨率引导图对网络习得的低分辨率bilateral grid进行slicing操作获得的高分辨率仿射变换系数,我们对每个像素应用局部颜色变换,来产生最终的输出。这意味着低分辨率流只处理大量的下采样数据,但仍然可以学习中间特征和仿射系数,以重现高频效应。
作者的工作减轻了Chen等人的Bilateral Guided Upsampling [2016]中的参考滤波器在运行时的需求。从某种意义上说,我们寻求的是在给定一个低分辨率版本的图像,预测双边网格中的仿射变换系数。相当于是对各类非线性图像增强算子进行的一个局部的拟合,进而简化了运算,但与同类方法不同的是,所获得的低分辨率bilateral grid不是通过类似Bilateral Guided Upsample中的解决一个线性最小二乘问题所获得,二是完全通过卷积神经网络学习得到。最后损失函数方面,作者不是在仿射系数上应用损耗函数,而是在全分辨率下的最终图像上应用损耗函数,这使我们能够在大部分流程在低分辨率数据上进行的同时,避免丢失高频信息。