# 图像去雾
## 一、总述
本次大作业要求调研实现去雾算法,发现其中的问题,并对算法进行改进。
我首先实现了基于暗原色先验的去雾算法,并从运算速度和去雾效果方面进行了一定的改进。
之后,我训练了 AOD 卷积网络来进行图像去雾,并对数据集图片做一定的处理,增加了网络的鲁棒性,去雾效果也很不错。暗原色先验的去雾算法使用 MATLAB 实现,使用 MATLAB 的 GUI 设计了用户界面;AOD 卷积网络使用 Python 实现,使用 pyqt 设计了用户界面。
## 二、文献调研
室外图像的质量有时会因为雾和霾的原因有所下降,空气中的灰尘和水气对光线的吸收和散射,使得进入摄像机镜头的光混杂了白光,从而导致实际景象的对比度降低。
去雾算法一直受到研究者的关注,传统的去雾算法有多图片去雾和单图片去雾两大类。Shwartz, Namer, and Schechner (2006)利用多张不同角度拍摄图片的信息来实现去雾,属于多图片去雾算法。在深度神经网络广泛应用之前,单图片去雾的算法已经取得了一定成就。Tan (2008)发现无雾图像一定比有雾图像对比度更高,他使用最大化局部对比度的方法实现去雾,但这种方法可能带来色彩的失真。Fattal (2008)通过估计场景的反射率的方法去雾,他假定光传播与表面纹理局部无关。他的方法能较好的保留景象的色彩,但对浓雾的处理效果较差。
年提出的暗原色先验方法(K. He, Sun, & Tang, 2011)引起了学界的广泛关注,但方法基于暗原色假设,使用简洁明了的公式处理有雾图像,在色彩不失真的前提下有效地去除雾气。本文中使用的第一种算法也是基于暗原色假设。近年来,深度神经网络得到广泛应用,在图像去雾领域也不例外。
Ren et al. (2016)使用多尺度的网络进行去雾,首先使用训练一个网络来预测图片整体的传递函数,再用一个网络进行细化,与传统的去雾流程有些相似。2017 年提出 AOD-net 使用端到端的网络实现去雾(Li, Peng, Wang,Xu, & Feng, 2017),网络结构精巧,参数量少,但去雾效果很好。与之前的方法不同,AOD 直接将原图输入模型得到去雾后的图像,这有利于直接训练模型来减少结果图像与 ground truth 的误差。本文使用的第二种方法便是基于 AOD。
## 三、暗原色先验算法
### 3.1 基本模型
去雾算法广泛使用的模型如下:
() = ()() + (1 ())
其中,()是有雾图像,()是无雾图像,()是透射率,是全局背景光。如果估算出了()和,那么无雾图片就能用下面的公式计算出来:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/91221cf5120efa678eccd49c22dca51c.writebug)
实际应用,为了防止()的值过小,会引入参数
![](https://www.writebug.com/myres/static/uploads/2022/5/10/d1509b34b5da223aaaff698f6ba1f22e.writebug)
因此,去雾算法的任务就变成了估计全局背景光和透射率()。
### 3.2 暗原色先验
暗原色先验(或暗通道先验),是说对于无雾图像中的一小片区域,其三维矩阵的最小值总是很低,换句话说,该区域 RGB 通道的最小值中的最小值总是很低。设图像的暗通道为()
![](https://www.writebug.com/myres/static/uploads/2022/5/10/a9c85f0093bbbaaca9ed9c2d55aa962a.writebug)
Ω()是 x 领域的一小片方形区域。暗原色先验是假设() ≈ 0,但这对天空区域是不适用的。
### 3.3 估算透射率
利用暗原色先验假设,我们可以估算出一个粗略的透射率我们先对() = ()() + (1 ())两边除以 A
![](https://www.writebug.com/myres/static/uploads/2022/5/10/4530deac820459eb9f5d47e4477ff38e.writebug)
求两边的暗通道:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/f2991197fd290bfb98c0fa0bb5cf2e3e.writebug)
假设()在小片区域内是不变的,并设其为~():
![](https://www.writebug.com/myres/static/uploads/2022/5/10/c7a3e7c85f1001d4097928077e876247.writebug)
在整个图像范围内是常数,由暗原色先验假设
![](https://www.writebug.com/myres/static/uploads/2022/5/10/ab8922573cca050e3e1e107e9ec95eed.writebug)
,因此:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/96c9885530005653f659e87f0f9dbb9a.writebug)
于是我们就计算出了一个粗略的透射率~() = 1
![](https://www.writebug.com/myres/static/uploads/2022/5/10/9724e0541711c65611cfb9a5ec0c36ce.writebug)
其中,引入参数 w 是为了保留一定程度的雾,以使去雾结果更加自然。下面是本任务的图片计算出来的~()
![](https://www.writebug.com/myres/static/uploads/2022/5/10/0f214b0a7a9ae06f92aad7b564c59d6d.writebug)
### 3.4 估算全局背景光
一般的方法中,估算全局背景光是通过寻找局部极值点的方式来进行,但这种方式可能会造成误判,比如图片中白色的物体(本图中的鹅身)会带来干扰。
暗原色先验方法中,估算全局背景光用到了图片的暗通道值,取出图像暗通道值排前 0.1% 的像素坐标,再取这些坐标对应的原图中亮度值最高的亮度,作为全局背景光的值。在一张图片中全局背景光是常数,为计算方便,把它展成和图片一样大小的矩阵。
用这种方式得到的结果鲁棒性较强,因为非浓雾区域暗通道值很低,所以得到全局背景光点落在白色物体上的概率很小。下面是本任务图片中的全局背景光展成矩阵的结果。
![](https://www.writebug.com/myres/static/uploads/2022/5/10/fbdce0f16da135306fa75c9ebd06afb6.writebug)
### 3.5 细化透射率
用 3 中的方法得到的透射率~()只是较为粗略的透射率,为了提高去雾质量,需要对其进行细化。这就用到了同一作者另一篇文章里的引导滤波算法(K. He, Sun, & Tang, 2013)设算法的输入图像为,引导图像为,输出结果为。在本任务中, 为粗略的透射率~(),为原图像,为精细化的透射率()。有如下的关系:
其中,,是滤波参数,是图像中以 i 为中心的一小片区域。
滤波参数的计算方法如下:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/13c6b6290a80bcf9c65d21a41772ec1b.writebug)
= 其中,是 I 中区域的均值和方差。
得到滤波参数后便可计算输出 = + ,下面是本任务图片的粗略透射率~()用 rgb 原图引导滤波后的结果:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/e25aa8d5a4c333dea6ef2aca5326f216.writebug)
可以看出,精细化的透射率与~()相比少了很多毛刺,但是也可以看到图片浓雾部分的透射率变得与其他部分几乎没有区别,这可能导致浓雾无法去除,我们将在下一部分详细讨论。
### 3.6 整体思路
整个算法的整体思路也很清楚,用到了上面说的几步,流程图如下:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/4507545e0e3d7e5fc1a4fa9ac93052a2.writebug)
## 四、暗原色先验算法的改进
#### 4.1 全局背景光计算的改进
在原算法中全局背景光的计算已在上一节中详述,大体上是通过求条件极值的方式获得全局背景光。我们知道暗原色先验假设只对图片的非天空区域成立,但原作者称这种求取方式适用于有天空部分的图片。
实际上,这种方式并不是对所有情况都完全适用,比如对下面这张图片的去雾:
![](https://www.writebug.com/myres/static/uploads/2022/5/10/52642d7d2e1647192805c844a89b81c4.writebug)
使用原算法去雾的结果如下,可以看出天空部分有明显的色彩畸变,景物部分整体偏暗。
![](https://www.writebug.com/myres
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
实现去雾算法,发现其中的问题,并对算法进行改进。 我首先实现了基于暗原色先验的去雾算法,并从运算速度和去雾效果方面进行了一定的改进。 之后,我训练了 AOD 卷积网络来进行图像去雾,并对数据集图片做一定的处理,增加了网络的鲁棒性,去雾效果也很不错。暗原色先验的去雾算法使用 MATLAB 实现,使用 MATLAB 的 GUI 设计了用户界面;AOD 卷积网络使用 Python 实现,使用 pyqt 设计了用户界面。
资源推荐
资源详情
资源评论
收起资源包目录
基于AOD 卷积网络图像去雾实战.zip (76个子文件)
matlab
简介.md 2KB
LICENSE 1KB
代码
AOD神经网络
Dehaze_save
epoch11.pth 25KB
testbench
river_result.png 301KB
test1.jpg 56KB
shan.jpg 24KB
tian.png 346KB
trees_result.jpg 196KB
buildings_result.jpg 107KB
trees.jpg 554KB
test1_result.jpg 19KB
toys_result.jpg 27KB
toys.jpg 140KB
img.bmp 898KB
buildings.jpg 97KB
test2_result.jpg 76KB
tian_result.png 391KB
river.png 356KB
road.jpg 5KB
shan_result.jpg 23KB
test2.jpg 106KB
woods_result.png 279KB
road_result.jpg 8KB
woods.png 239KB
code
utils.py 3KB
model.py 1018B
ui.spec 884B
dataloader.py 2KB
train.py 6KB
__pycache__
utils.cpython-35.pyc 4KB
model.cpython-35.pyc 1KB
model.cpython-36.pyc 1KB
test.cpython-36.pyc 1KB
ui.cpython-36.pyc 3KB
dataloader.cpython-36.pyc 2KB
dataloader.cpython-35.pyc 2KB
utils.cpython-36.pyc 3KB
ui.py 3KB
test.py 975B
暗原色先验
DarkChannelPrior
dehaze.m 1KB
guidFilter.m 2KB
main.m 435B
hist_equal.m 239B
getA_ave.m 741B
boxfilter.m 860B
testbench
test1.jpg 56KB
shan.jpg 24KB
tian.png 346KB
trees.jpg 554KB
toys.jpg 140KB
img.bmp 898KB
buildings.jpg 97KB
river.png 356KB
road.jpg 5KB
test2.jpg 106KB
woods.png 239KB
results
river_result.png 305KB
img_result.bmp 898KB
trees_result.jpg 166KB
buildings_result.jpg 91KB
test1_result.jpg 13KB
toys_result.jpg 30KB
test2_result.jpg 59KB
tian_result.png 382KB
shan_result.jpg 21KB
woods_result.png 312KB
road_result.jpg 7KB
getA.m 804B
mygui.m 6KB
报告.pdf 1.83MB
README.md 20KB
可执行程序
暗原色先验
dehaze.exe 10.77MB
splash.png 51KB
default_icon.ico 46KB
readme.txt 1KB
由于AOD神经网络可执行程序太大(780M),所以上传至清华网盘 打开.txt 105B
共 76 条
- 1
资源评论
甜辣uu
- 粉丝: 8400
- 资源: 1103
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功