• 计算摄影——图像对比度与色调增强


            这一部分主要梳理下图像增强相关的内容,图像增强指对拍摄后的照片进行后期的处理操作,包括亮度、对比度、清晰度、饱和度、色调等的调整。这里主要讲对比度和色调的增强。

    传统方法

    1. 线性拉伸变换:指通过线性函数对图像灰度值进行变换。
    2. 伽马变换:采用非线性函数(指数函数)对图像灰度值进行变换,762207736d234f33912f7b707911f01d.png,其中,r为灰度图像的输入值(原来的灰度值),取值范围为[0,1]。s为经过伽马变换后的灰度输出值。c为灰度缩放系数,通常取1。γ为伽马因子大小。控制了整个变换的缩放程度
    3. 直方图均衡化:直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布通过累积分布函数变成近似均匀分布,从而增强图像的对比度。详细原理可以参考:直方图均衡化的原理及实现_knowyourself1的博客-CSDN博客_直方图均衡化
    4. Retinex理论: Retinex理论为人眼视觉系统(Human Visual System, HVS)所感知到物体的色彩和亮度取决于物体表面的反射特性,所以人类视觉系统往往能过够在不同的光照条件下感知物体的反射率。数学模型:1a175c25dff64333b04a31dec54edd6b.png

    深度学习方法

    基于典型CNN网络的方法

            直接使用类似U-net结构的CNN模型,也可以直接学会图像里的很多全局和局部的基本图像增强操作,类似风格迁移、去雾、上色等。

            在典型网络的基础上,我们还可以增加一个美学评估的模型来评估输出的图像美学质量,最终网络的损失函数可以使用两个模块的融合,思路比较清晰,这里不再详细说明。

    基于GAN模型的改进

            首先介绍一种pix2pix的方法,使用成对的数据进行训练,模型结构图下图:

    a772de58bb87469498bda0f512b1737d.png        网络分为三个部分:图像增强网络,判别网络,特征保持网络,其中resnet只是代表一种经典CNN结构,其结构可以被替换。

            在图像增强网络中,使用增强后的图像与真值图像pix2pix计算Lcolor,这是一个重建损失,可以使用mse损失,在具体计算时,可以将增强后的图像与真值图像都进行高斯模糊,这样可以去掉部分边缘细节纹理,保持整体图像的对比度和颜色,使得颜色在局部比较平均,还拥有了一定的局部平移不变性,有利于模型稳定的学习。

            在判别网络中,输入由增强后的图像与真值图像融合生成,融合的方式有多种,可以采用逐个像素加权求和的方式,也可以采用通道拼接的方式,最终输出一个二维的概率向量,损失函数为交叉熵损失,也被称为纹理损失,再具体计算时,可以将增强后的图像与真值图像都转为灰度图像,因为图像的纹理信息主要与灰度空间分布相关,这可以降低过拟合的风险。

            在特征保持网络中,可以使用VGG网络(也可以替换为其他网络)来对增强后的图像和真值图像提取高层特征,然后计算内容损失Lcontent,可以使用标准的欧氏距离,内容损失也被称为感知损失,其意义在于如果增强后的图像和真值图像非常接近,那么通过VGG提取的特征也应该接近,它用于对高层语义信息进行约束。

    使用非成对数据进行学习

            CycleGAN的一个重要应用领域是Domain Adaptation(域迁移:可以通俗的理解为画风迁移),比如可以把一张普通的风景照变化成梵高化作,或者将游戏画面变化成真实世界画面等等。以下是原论文中给出的一些应用,它只需要两种域的数据,而不需要他们有严格对应关系,这使得CycleGAN的应用更为广泛:

    962a7bcec2264fd287e2670aa1031a61.png

            CycleGAN的主要目的是实现Domain Adaptation,这里我们以风景照片和梵高画作为例,假设现在有两个数据集 X 和 Y 分别存放风景照片和梵高画作。我们希望训练出一个生成器 G ,它吃一个风景照,吐出一个梵高画作,即 G(x)=y′,x∈X ;同时,我们还希望训练出另一个生成器 F ,它吃一个梵高画作,吐出一个风景照,即 G(y)=x′,y∈Y 。为了达到这个目的,我们还需要训练两个判别器 DX和DY ,分别判断两个生成器生成图片的好坏:如果生成器产生的图片 y′ 不像数据集 Y 里的图片 y ,此时判别器DY应给它低分(规定最低分为0),反之如果图片 y′ 像数据集 Y 里的图片 y,则此时判别器DY应给他高分(规定最高分为1)。此外,判别器DY应该永远给真实图片 y 高分。对于判别器DX也是同理。整个CycleGAN的模型框架如下图所示:

    ad17188bb6aa43f1956146f88bee5d72.png

            在CycleGAN中,我们不仅想要生成器产生的图片y′跟数据集Y中的图片画风一样,我们还希望生成器产生的图片y′跟他的输入图片 x 内容一样(比如我们输入一张带房子的照片,我们希望产生梵高画风的房子图片,而不是其他内容的图片,比如向日葵、星夜等等,否则意义就不是很大了,为了做到这一点,论文作者提出了Cycle Consistency Loss,即将图片y′再放入生成器 F 中,产生的新图片 x′ 和最开始的图片 x 尽可能的相似:d6064739a68041609af251455194ece7.png因此,CycleGAN的Loss由两部分组成,

    即 Loss=LossGAN+Losscycle

    • LossGAN 保证生成器和判别器相互进化,进而保证生成器能产生更真实的图片
    • Losscycle 保证生成器的输出图片与输入图片只是风格不同,而内容相同

    关于cycleGAN的详细内容,可以看下CycleGAN详细解读 - 知乎,讲的比较清楚。

     基于参数预测的增强方法

            图像增强可以对应相机中的曝光调整、对比度调整、色调调整等操作,因此我们可以使用模型直接学习这几种操作的参数幅度,对这些决策结果,可以使用美学评估模型进行打分,作为惩罚项:

    ac91204133ac41a1b32a61b8b46d3d62.png

            具体学习过程包括两个策略网络,一个判别网络。其中两个策略网络分别讲图像映射成某一类操作的概率和幅度,这三个网络可以都采用相同的结构。(在《深度学习之摄影图像处理》这一书中,还提到了一个价值网络,但是并没有说明其用途是什么,笔者认为该网络其实可以被省略……)

            在判别网络中,可以增加平均亮度、对比度、饱和度等作为特征通道与输入图像拼接。

            在策略网络中,可以增加n个二值操作值作为特征通道与输入图像拼接,这n个二值操作值代表是否使用某一类操作,比如曝光调整、伽马变换、白平衡调整等

     

     参考资料

    直方图均衡化的原理及实现_knowyourself1的博客-CSDN博客_直方图均衡化

    关于Retinex理论的一些理解_睿~的博客-CSDN博客_retinex理论

    CycleGAN详细解读 - 知乎

    书籍:《深度学习之摄影图像处理》

            

     

     

  • 相关阅读:
    【Vue】VueX 的语法详解(1)
    算法通关村16关 | 滑动窗口如此简单
    LayaBox---TypeScript---基础数据类型
    SystemUI状态栏
    设计模式之观察者模式
    常用算法(九)——弗洛伊德算法
    linux按键驱动设计(V3S开发板)
    打包vue前端docker镜像
    新手学习笔记-----⽂件操作
    【Unity UI ToolKit】01 - 新手教程 从控件创建到C#代码控制
  • 原文地址:https://blog.csdn.net/mingzheng114/article/details/126822465