高ISO会造成The image suffers from noise and color bias.
低光图像增强面临的问题:低光图像光子数低;低光图像的信噪比低;短曝光图像噪声多,长曝光图像会比较模糊,不真实。
针对这些问题:提出了一个短曝光低光raw图像数据集,对应长曝光的参考图像;使用这个数据集提出了一个低光图像处理全卷积网络,输入是raw图像,省去了传统的isp流程。
本文提出了一种新的图像处理技术:通过一种数据驱动的方法来解决极端低光条件下快速成像系统的挑战。具体来说,我们训练深度神经网络来学习低光照条件下原始数据的图像处理技术,包括颜色转换,去马赛克,降噪和图像增强等。
据我们所知,现有用于处理低光图像的方法,在合成数据或真实的低光图像上测试都缺乏事实根据。此外,用于处理不同真实环境下的低光图像数据集也相当匮乏。因此,我们收集了一个在低光条件下快速曝光的原始图像数据集。每个低光图像都有对应的长曝光时间的高质量图像用于参考。
See-in-the-Dark (SID) 数据集包含5094张短曝光的raw图像,每张对应相应的长曝光参考图像。多个短曝光图像序列对应相同的长曝光参考图像,多个短曝光图像序列中的图像会有细微的不同,序列中的每张图像都可视为一张独特的低光图像,这样包含真实世界伪像的图片能够更有利于模型的训练和测试。SID 数据集中长曝光的参考图像的数量是424。差不多10多张短曝光图像对应一张长曝光参考图像。
此外,我们的数据集包含了室内和室外图像。室外图像通常是在月光或街道照明条件下拍摄。在室外场景下,相机的亮度一般在0.2 lux 和5 lux 之间。室内图像通常更暗。在室内场景中的相机亮度一般在0.03 lux 和0.3 lux 之间。输入图像的曝光时间设置为1/30和1/10秒。相应的参考图像 (真实图像) 的曝光时间通常会延长100到300倍:即10至30秒。各数据集的具体情况如下表1中所示。
用了两个相机采集数据,每个相机都有不同的sensor,图像由不同的阵列构成(Bayer、X-Trans)。在测试的时候也支持不同阵列的图像进行测试。图像分辨率分别为 4240 × 2832 4240\times2832 4240×2832(Sony)、 6000 × 4000 6000\times4000 6000×4000(Fuji)。
长时间曝光的参考图像可能仍会包含一些噪点,但感知质量足以使这些图像用作ground truth。 我们的目标应用旨在在弱光条件下产生可感知的良好图像,而不是彻底消除所有噪声或最大化图像对比度。
列举了三种图像处理pipline:
因此,我们提出了的端到端的学习方法,即训练一个全卷积网络FCN 来直接处理快速成像系统中的低亮度图像。纯粹的FCN 结构可以有效地代表许多图像处理算法。受此启发,我们调查并研究这种方法在极端低光条件下成像系统的应用。相比于传统图像处理方法使用的sRGB 图像,在这里我们使用raw图像作为输入。
对于 Bayer 数组,我们将输入打包为四个通道并在每个通道上将空间分辨率降低一半。对于X-Trans 数组(图中未显示出),原始数据以6×6排列块组成;我们通过交换相邻通道元素的方法将36个通道的数组打包成9个通道。此外,我们消除黑色像素(黑电平校正)并按照期望的倍数缩放数据(例如,x100或x300)。放大这么大倍数的原因是因为低光图像像素值都趋近于0,都很小,正常光照图像像素值较大。乘一个倍数放大像素值后再送入网络处理更容易得到正常光照图像。将处理后数据作为 FCN 模型的输入,输出是一个带12通道的图像,其空间分辨率只有输入的一半。
我们将两个标准的 FCN 结构作为我们模型的核心架构:用于快速图像处理的多尺度上下文聚合网络 (CAN) 和U-net 网络。我们没有使用残差连接,因为网络的输入是raw图像,输出是RGB图像,属于不同的色彩空间。影响我们模型选择的另一个因素是内存消耗:在 GPU 中,我们选择的模型结构可以处理全分辨率的图像(例如,在4240×2832或6000×4000分辨率)。
The amplification ratio决定了输出的亮度。在我们的方法中,放大比率设置在外部指定并作为输入提供给模型,这类似于相机中的 ISO 设置。下图4显示了不同放大比率的影响。用户可以通过设置不同的放大率来调整输出图像的亮度。
我们使用 L1 损失和 Adam 优化器,从零开始训练我们的网络。在训练期间,网络输入是原始的短曝光图像,在 sRGB 空间中的真实数据是相应的长曝光时间图像(由一个原始图像处理库 libraw 处理过得参考图像)。我们为每台相机训练一个网络,并将原始图像和参考图像之间曝光时间的倍数差作为我们的放大因子(例如,x100,x250,或x300)。在每次训练迭代中,我们随机裁剪一个512×512的补丁用于训练并利用翻转、旋转等操作来随机增强数据。初始学习率设定为0.0001,在2000次迭代后学习率降为0.00001,训练一共进行4000次迭代。
传统的图像处理方法在极端低光条件下容易受到严重的噪声影响,导致生成图像颜色失真。我们提出的方法能够有效地抑制图像噪声,生成色彩均衡、逼真的图像。
BM3D是一种非盲降噪方法,要求将噪声级别作为参数进行外部指定。小的噪声级别会造成图片中噪声过多,大的噪声级别会造成图像过度平滑。相反我们的pipline执行盲噪声抑制,可以适应局部数据,对不同区域进行不同程度的去噪(局部自适应)。burst denoising使用8张对齐图像的逐像素中位数作为最后的去噪图像。
噪声是影响画质的一个主要因素,这里也单独的对于噪声来进行了对比。当时由于许多learning的方法使用的噪声模型还是AWGN的,所以在真实数据上BM3D依然是一个强有力的baseline,这里选择了与BM3D进行对比。使用A/B test的方式来进行主观评价。在比较难得Sony x300 set上,作者的结果碾压BM3D,在比较简单的Sony x100 set数据集合上,作者的结果与之相当。
我们之前认为为了得到最好的结果需要为特定的camera sensor训练特定的网络。但是我们初步的实验(不同sensor)证明这不是必要的,因此作者使用iPhone 6s拍摄的图像作为输入。
传统pipline处理过的低光图像具有许多噪声和颜色偏差。我们的结果有很低的噪声和很好的颜色。
Input color space
我们发现,在极端弱光条件下,直接对raw sensor data进行操作要比sRGB有效得多。
Loss functions
换损失函数的变化不大。
Postprocessing
下面一个是作者对比了一下,如果将gt进行直方图均衡化,看看会得到什么结果。如果将gt进行直方图均衡化的话,实际上是让网络学习到一种直方图均衡化的能力,实际上作者发现,好像并没有让网络学习到这种东西,而且点掉的非常厉害,因此作者通过分析实验得到的结论是,不用把直方图均衡化纳入到网络的pipline中,可以作为一个postprocess的过程。
在结果中,作者讨论了很多,快速低光图像增强非常具有挑战性,因为其含有很少的光子,以及很低的snr,作者提出的方法的limitation是,必须要手动输入amplification ratio,选取一个amplification ratio是非常的有用的,同时,作者说他们的不同的ccd有不同的网络,实际上通用性不强,我感觉这个如果以后有用的话,也应该是针对不同的相机,所以问题不大。另外作者说网络跑的比较慢,基本上需要0.38-0.66s,来处理一张full-resolution的图片。以及,作者说他希望未来的工作可以集中在图像质量的改善上,以及完善和集成训练步骤。
感光度ISO是曝光三角(快门速度,光圈,ISO)中的一部分,ISO是一种照相机设置,可以使照片变亮或变暗。随着您增加ISO,您的照片将逐渐变亮。 ISO可以帮助您在黑暗环境中捕捉图像,或者更灵活地设置光圈和快门速度设置。但是,ISO不仅会影响图像的曝光,还会影响图像质量。
前面我们讲到ISO越高噪点越多,因此你尽可能坚持使用相机的最低ISO(基本ISO),通常为ISO 100或200。如果有足够的光线,您可以自由地使用低ISO并尽可能减少噪点的出现。但是在昏暗或黑暗的环境中,如果你能稳定相机不抖动,你仍然可以使用低ISO。例如,如果您将相机安装在三脚架上或完全坐在桌子上,在这种情况下,您可以安全地使用低ISO并通过长快门速度来获得足够的曝光。但是,值得注意的是,长时间曝光也会产生噪点,光线不足时,长曝光时间尽量控制在五分钟以内。因为热噪点并不会一开始就会产生,它会在曝光到一定时间后才急速增加,在临界点前使用长曝光都是没问题的。简单点说,就是在曝光不足的条件下,使用低ISO的前提是【避免抖动】+【长曝光时间不要过长】。
CMOS和CCD是目前数码相机普遍采用的感光元件。在大尺寸感光元件领域,CMOS占据绝对优势地位。CMOS主要通过密集排列的光电二极管感受光信号,然后将光信号转换为电信号。值得注意的是,CMOS上的光电二极管只能感受光强度变化,而无法感受颜色。所以,CMOS捕捉的图像类似于黑白照片。
Bayer排列解决了彩色捕捉的问题,但是它也带来了一些问题。由于每一个像素点只能感受一种颜色,因此最后的图像需要通过技术处理为每个像素填充另外两种颜色,这个过程被称为“去马赛克”(demosaic),实际上是一种软件差值算法。软件插值算法在大多数情况下都能获得逼真的结果,然而在某些情况下却会引入失真。其中,摩尔纹是最常被谈及的问题。
摩尔纹是指在拍摄某些人工材料时所出现的机械重复的图像伪迹。由于织物多数都是不断重复的纤维排列,因此在拍摄服装时尤其容易出现摩尔纹。同样的情况也出现在任何存在细密机械重复的人造材料拍摄中。为了抑制摩尔纹,一般的策略是在CMOS之前增加低通滤镜。低通滤镜能够过滤高频信号,消除摩尔纹,然而其代价是影响成像的锐度,尤其会丧失一些非常细小的照片细节。
由于大多数人总是用相机拍摄日常生活,所以为CMOS添加低通滤镜成为合理的选择,毕竟摩尔纹是很难通过后期技术去除的,有时候会严重影响成像质量。但是,对于自然摄影来说,却并不会遇到摩尔纹的问题。对于这类摄影,低通滤镜就起了反作用。我们大多数人都不会为不同的理由去准备不同的相机。我们能否移去低通滤镜以保证成像的锐利、同时又充分抑制摩尔纹呢?这正是X-Trans CMOS出现的主要理由之一。
Bayer排列CMOS容易产生摩尔纹的主要原因被归结于过小的重复像素阵列。Bayer排列的阵列单元是2×2,并且是机械的RGBG排列,即在一个四方格中,两个绿色像素占据对角,另两个角由红色和蓝色像素填充。
与Bayer排列不同,X-Trans CMOS的阵列单元是6×6。下方是6×6单元色彩滤镜排列示意图。左侧是Bayer排列,右侧是X-Trans排列。X-Trans尽管依然是6×6的重复,但是在6×6的单元里,三种颜色滤镜的排列却并不是机械的重复,而是看起来比较杂乱的排列。通过这种“杂乱”,X-Trans CMOS能够比Bayer排列的传统CMOS更好地抑制摩尔纹,从而可以取消低通滤镜,以获得更高的成像锐度。
比较Bayer排列和X-Trans排列,你还会发现两个显著的差异。第一,在Bayer排列中,任意行或列都只包含两种色彩,或者是红与绿,或者是蓝与绿。而在X-Trans排列中,任意行或者列都包含三种色彩,富士宣称理论上这能够带来更好的色彩还原,尽管我对此略有怀疑。第二,在同样的像素区域内(比如6×6),Bayer排列有18个绿色像素,而X-Trans排列则有20个绿色像素。也就是说,X-Trans CMOS的绿色像素要比Bayer排列更多。由于绿色的感光能力最强,对细节表现也最好,因此这成为X-Trans CMOS在高感成像上要强于相同尺寸的Bayer排列CMOS的重要原因之一。
总体来说,通过特殊的色彩滤镜阵列,X-Trans CMOS获得了抑制摩尔纹发生的能力,同时其成像分辨率和高感能力也获得了增强。
我们知道图像数据一般为0–255,但sensor在出厂的时候,厂家一般会设置图像数据输出范围如5-250等,反正最低电平不为零。因此我们就需要对图像数据范围进行调整,使其最小值为零,这就是黑电平校正。
原因: CMOS传感器采集的信息经过一系列转换生成原始RAW格式数据。以8bit数据为例,单个pixel的有效值是0~255,但是实际AD芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此,sensor厂家一般会在AD的输入之前加上一个固定的偏移量,使输出的pixel value在5(非固定)~255之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,由于对于图像来说,我们的关注度更倾向于暗部区域,ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此亮区的一点点损失是可以接受的。
如多sensor输出raw数据中附加的黑电平值,需要在ISP最前端去干净。如果不去干净,干扰信息会影响后端ISP各模块的处理,尤其会导致AWB容易不准,出现画面整体偏绿或者整体偏红现象。
[CVPR2018] Learning to See in the Dark
Learning to See in the Dark论文阅读笔记
Learn to See in the Dark 论文解读
【摄影基础知识】感光度ISO介绍
ISP图像处理算法之一黑电平校正
图像处理之黑电平校正
详解富士X-Trans CMOS
cchen156/Learning-to-See-in-the-Dark
ninetf135246/pytorch-Learning-to-See-in-the-Dark
cydonia999/Learning_to_See_in_the_Dark_PyTorch