A New Image Contrast Enhancement Algorithmusing Exposure Fusion Framework

本文主要是介绍A New Image Contrast Enhancement Algorithmusing Exposure Fusion Framework,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Abstract

弱光图像由于能见度低,不利于人类观察和计算机视觉算法。为了解决这一问题,人们提出了许多图像增强技术,但现有的方法不可避免地会出现对比度增强不足和过度增强的问题。在本文中,我们提出了一种图像对比度增强算法来提供准确的对比度增强。具体来说,我们首先利用光照估计技术设计了用于图像融合的权重矩阵。然后介绍了我们的相机响应模型来合成多曝光图像。其次,我们找到最佳曝光比,使合成图像在原始图像曝光不足的区域曝光良好。最后,根据权重矩阵对输入图像和合成图像进行融合,得到增强结果。实验表明,与现有的几种方法相比,该方法可以获得对比度和亮度失真较小的结果。

1 Introduction

图像增强技术在图像处理中有着广泛的应用。一般来说,它可以使输入图像看起来更好,更适合于特定的算法[6,14]。对比增强作为一种增强技术,可以显示出图像中曝光不足区域的信息。许多对比度增强技术已经被提出,包括基于直方图的[3,6,12,13]、基于Retinex的[7,9]和基于dehaze的方法[4,5]。

彩色图像可以表示为三维数组。最简单的对比度增强方案对每个元素执行相同的处理。例如,最早的图像增强方法使用非线性单调函数(幂律[2],对数[11]等)进行灰度映射。考虑到元素在不同灰度级上的不均匀分布,直方图均衡化(histogram equalization, HE)被广泛用于提高对比度。许多对HE的扩展都考虑了一些限制,如亮度保持[3,6,13]和对比度限制[12]。然而,基于he的方法往往存在过度增强的问题,导致不现实的结果。模仿人类视觉系统,视网膜理论也被广泛应用于图像增强。通过将反射率与照度分离,基于Retinex的算法可以明显增强细节[5,7,9]。然而,这些方法在高对比度区域存在晕状伪影。近年来,一些方法借鉴去霾技术进行对比度增强,取得了良好的主观视觉效果[4]。但这些工作可能因对比度过度增强而造成色彩失真。

虽然图像对比度增强方法已经研究了几十年,但好的增强结果的定义仍然没有明确的定义。此外,现有的弱光增强算法在定位增强过强和增强不足区域方面没有提供参考。我们注意到,只有曝光不同的图像可以作为增强算法的参考,如图1所示。随着暴露量的增加,一些暴露不足的区域变得充分暴露。增强结果应保持曝光良好的区域不变,增强曝光不足的区域。同时,增强区域的对比度应与正确曝光区域的参考图像一致。

在本文中,我们提出了一个新的框架来帮助缓解不足和过度增强的问题。该框架基于摄像机响应模型对输入图像合成的多曝光图像进行曝光融合。基于我们的框架,我们提出了一种增强算法,与几种最先进的方法相比,它可以获得更小的对比度和亮度失真的结果。

2 Our Approach

2.1 Exposure Fusion Framework

在许多户外场景中,由于相机的动态范围有限,无法使所有像素都曝光良好。如图1所示,虽然我们可以通过增加曝光来显示一些曝光不足的区域,但同时曝光良好的区域可能会过度曝光。为了得到一张所有像素曝光良好的图像,我们可以融合这些图像:

其中N为图像个数,Pi为曝光集中的第i张图像,Wi为第i张图像的权重图,c为三色通道指数,R为增强结果。三个颜色分量相等,所有像素的权重都不均匀:曝光好的像素权重大,曝光差的像素权重小。权重被归一化,使得\sum_{i=1}^{N}W_{i}=1

问题是使用其他曝光设置的图像不能用于图像增强问题。幸运的是,用不同曝光方式拍摄的照片是高度相关的。在我们早期的工作中,我们提出了一个相机响应模型来准确地描述这些图像之间的关联,以便我们可以从输入图像中生成一系列图像。仅曝光不同的两幅图像之间的映射函数称为亮度变换函数(BTF)。给定曝光比ki和BTF g,我们可以将输入图像P映射到曝光集中的第i张图像为

在本文中,我们只将输入图像本身与另一个曝光融合,以降低复杂度,如图2所示。融合后的图像定义为

增强问题可以分为三个部分:w, g和k的估计。在下面的小节中,我们逐一解决它们。

2.2 Weight Matrix Estimation

w的设计是获得一种增强算法的关键,该算法可以增强曝光不足区域的低对比度,同时保持曝光良好区域的对比度。我们需要给曝光良好的像素分配大的权重值,给曝光不足的像素分配小的权重值。直观地看,权重矩阵与场景照度呈正相关。由于高照度区域被曝光的可能性较大,因此应赋予大的权重值以保持其对比度。我们计算权重矩阵为

其中T为场景照明图,µ为控制增强程度的参数(详见3.1节)。通过优化求解场景光照贴图T的估计。

Optimization Problem

亮度分量可用作场景照度的估计。我们采用亮度分量作为照度的初始估计:

对于具有相似结构的区域,理想的照明应该具有局部一致性。换句话说,T应该保留图像的有意义的结构,去除纹理边缘。与[5]一样,我们通过求解以下优化方程来细化T:

M是权矩阵,λ是系数。该方程的第一项是最小化初始映射L与精化映射T之间的差值,第二项是保持T的平滑性。

M的设计对于光照图的细化非常重要。与具有复杂图案的纹理[15]相比,局部窗口中的主边缘提供了更多的相似方向梯度。因此,包含有意义边缘的窗口中的权重应该小于只包含纹理的窗口中的权重。因此,我们将权矩阵设计为

Closed-Form Solution

为了降低复杂性,我们将公式6近似为[5]:

其中  \oslash是按元素除法,I 是单位矩阵,算子 Diag(v) 是使用向量 v 构造对角矩阵,Dd 是具有前向差分的离散梯度算子的 Toeplitz 矩阵。我们的光照图估计方法与[5]中的方法的主要区别在于权重矩阵M的设计。我们采用了一种简化的策略,可以产生与[5]中类似的结果。这里可以借用基于 Retinex 的方法中的其他照明分解技术来找到权重矩阵 W。

2.3 Camera Response Model

在我们早期的工作中,我们提出了一种称为 Beta-Gamma 校正模型 [16] 的相机响应模型。,我们模型的 BTF 定义为

其中β和γ是两个模型参数,可以从相机参数a, b和曝光比k中计算出来。我们假设没有提供关于相机的信息,并使用可以适合大多数相机的固定相机参数(a =−0.3293,b = 1.1258)。

2.4 Exposure Ratio Determination

在本节中,我们找到最佳曝光比,使合成图像在原始图像曝光不足的区域曝光良好。首先,我们排除曝光良好的像素并获得全局曝光不足的图像。我们简单地提取低光照像素为

其中Q只包含曝光不足的像素。

不同曝光下的图像亮度变化明显,而颜色基本相同。因此,我们在估计k时只考虑亮度分量,亮度分量B定义为三个通道的几何平均值:

其中Qr、Qg、Qb分别为输入图像Q的红、绿、蓝通道。我们使用几何平均值代替其他定义(例如算术平均值和加权算术平均值),因为它具有与所有三个颜色通道相同的BTF模型参数(β和γ),如Eq. 13所示。

曝光良好的图像的可见性比曝光不足的图像高,可以为人们提供更丰富的信息。因此,最优k应该提供最大量的信息。为了测量信息量,我们使用图像熵,其定义为

其中pi是B的直方图的第i个bin,它计算了[\frac{i}{N},\frac{i+1}{N}]中的数据个数,N是bin的个数(N通常设置为256)。最后,通过最大化增强亮度的图像熵来计算最优k

优化后的k可以用一维极小器求解。为了提高计算效率,我们在优化k时将输入图像的大小调整为50 × 50。

3 Experiments

为了评估我们的方法的性能,我们将其与几种最先进的方法(AMSR [9], LIME [5], Dong[4]和NPE[14])在来自五个公共数据集的数百张低光图像上进行了比较:VV3, LIME-data [5], NPE [14] (NPEdata, NPE-ex1, NPE-ex2和NPE-ex3), MEF[10]和IUS[8]。MEF和IUS是多曝光数据集,我们从每个多曝光集中选择一张低光图像进行评估。

3.1 Implementation Details

在我们的算法中,µ是一个控制整体增强程度的参数。当µ= 0时,得到的R等于P,即不进行增强。当µ= 1时,曝光不足的像素和曝光良好的像素都被增强。当µ> 1时,像素可能会饱和,从而导致R遭受细节损失。为了在保持曝光良好区域的同时进行增强,我们将µ设为1/2。

为了保持比较的公平性,我们的增强算法的参数在所有实验中都是固定的:λ = 1, \epsilon = 0.001,µ= 1/2,局部窗口的大小ω(x)为5。算法中最耗时的部分是光照贴图优化。采用多分辨率预条件共轭梯度求解器(O(N))对其进行了有效求解。为了进一步加速我们的算法,我们使用输入图像的下采样版本来求解T,然后将结果T上采样到原始大小。如果降采样一次,增强后的结果没有视觉上的差异,但计算效率大大提高。

3.2 Contrast Distortion

如前所述,仅曝光不同的图像可作为评价增强结果准确性的参考。DRIM (Dynamic Range Independent Metric,动态范围独立度量)[1]可以在不受图像亮度变化干扰的情况下测量图像对比度的失真。我们用它来可视化增强结果和参考图像之间的对比度差异。

如图3所示,该方法以最小的失真获得了最真实的结果。Dong的结果有严重的对比度失真。虽然AMSR可以恢复细节,但明显的对比度损失使结果看起来模糊而不真实。相比之下,LIME的结果看起来更生动一些,但它们受到无形对比度放大的影响。图5显示了更多的示例以进行视觉比较。

3.3 Lightness Distortion

我们使用亮度阶误差(LOE)来客观地衡量增强结果的亮度失真。LOE的定义是

如文献[5,14]所示,采用下采样来降低计算LOE的复杂度。我们注意到,当图像降采样到不同的尺寸时,LOE可能会发生显著变化,因为RD会随着像素数m的增加而增加。因此,我们将所有图像降采样到固定大小。具体来说,我们均匀地收集100行和100列,形成100 × 100的下采样图像。如表1所示,我们的算法在所有数据集中都优于其他算法。这意味着我们的算法可以很好地保持图像的自然度。我们还在图4中提供了两种情况下的亮度失真的可视化,从中我们可以发现我们的结果具有最小的亮度失真。AMSR结果失去全局亮度顺序,亮度失真最大。虽然LIME的效果在视觉上是令人愉快的,但它们也受到亮度失真的影响。Dong和NPE的结果只能保留良好暴露区域的亮度顺序。

4 Conclusion

在本文中,我们提出了一个曝光融合框架和增强算法,以提供准确的对比度增强。基于该框架,我们解决了三个问题:1)利用照度估计技术获得图像融合的权值矩阵;2)引入相机响应模型合成多曝光图像。3)找出最佳曝光比,使合成图像在原始图像曝光不足的区域曝光良好。根据权重矩阵对输入图像和合成图像进行融合,得到最终的增强结果。实验结果表明,与几种最先进的替代方法相比,我们的方法是先进的。为了鼓励未来的工作并允许更多的实验验证和比较,我们公开了源代码。更多的测试结果可以在我们的项目网站上找到:http://baidut.github.io /OpenCE/ capp2017.html。

这篇关于A New Image Contrast Enhancement Algorithmusing Exposure Fusion Framework的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870682

相关文章

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!!! Win11安装完成,软件打开效果 一、VMware安装Windows11虚拟机 首先确保自己的mac开启了网络共享。不然虚拟机连不上👀的 1️⃣:准备镜像

List list = new ArrayList();和ArrayList list=new ArrayList();的区别?

List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。 List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了A

vue原理分析(六)--研究new Vue()

今天我们来分析使用new Vue() 之前研究时,只是说是在创建一个实例。并没有深入进行研究 在vue的源码中找下Vue的构造函数 function Vue(options) {if (!(this instanceof Vue)) {warn$2('Vue is a constructor and should be called with the `new` keyword');}thi

VMware Fusion Pro 13 for Mac虚拟机软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成!!! 效果 一、下载软件 下载软件 地址:www.macfxb.cn 二、开始安装 安装完成!!!

GTK中创建线程函数g_thread_new和g_thread_create的区别

使用GThread函数,需要引用glib.h头文件。 这两个接口的核心区别就是  g_thread_create 是旧的接口,现在已经不使用了,而g_thread_new是新的接口,建议使用。 g_thread_create: g_thread_create has been deprecated since version 2.32 and should not be used in n

New的VC编译器实现

当我们调用 new 的时候,例如 int *p = new int; 时,编译器到底作了什么工作呢?跟进断点看一看。   (在 vc debug模式下 ) double *p1 = new double ; 00411A6E  push        8    00411A70  call        operator new (4111B8h) 00411A75  add