基于MATLAB的图像去雾GUI系统(集成4种去雾算法)

00 目录

应用背景
去雾算法理论
MATLAB程序实现
源码获取

01 应用背景

由于大气中存在灰尘、烟雾、薄雾和其他漂浮颗粒物,因此大气中拍摄的图像通常会出现颜色失真、模糊、对比度低等问题,而模糊图像的输入将使后续高级视觉处理如分类、跟踪、人员再识别和目标检测等任务难以实现。因此图像去雾的目的是从被输入带雾图像中复原出无雾的图像,为高级视觉任务提供可靠数据。
现有的图像去雾算法主要可以分为以下 3类:
(1)基于图像增强的去雾算法。根据图像的灰度分布,通过拉伸补偿对比度、亮度、色彩饱和度等突出图像的细节信息,提升图像的视觉观感,常用方法包括直方图均衡化、小波变 换以及基于Retinex理论的算法等
(2)基于图像复原的去雾算法。可以分为两类,一类是基于先验统计信息,通过统计高低质量图像的亮度等信息,复原出高质量的无雾图像。另一类是基于物理模型,研究相机成像过程中的大气扰动的影响,分析雾霾等引起图像质量下降的原因,构建相应的数学模型,以观测到的雾霾图像为输入,通过估算透射率等未知参数,反演计算复原出无雾图像。
(3)基于深度学习的去雾算法。近年来随着人工智能的发展,越来越多的研究人员使用深度学习的方法实现图像去雾,主要分为端对端和非端对端的网络模型。

本文主要用了前两类方法,即全局直方图均衡化、局部直方图均衡化,Retinex算法以及暗通道先验算法,第三类方法正在开发中,开发完成后将加进现有系统中。

02 去雾算法理论

2.1直方图均衡化算法

直方图是一种基于统计意义上的分布图,它统计的是一幅图像中不同灰度级出现的概率。假设用N 来表示图像 f(x,y)的像素个数,rk 表示第 k 个灰度级所对应的灰度值,L 表示灰度级的个数,nk 表示灰度级为 k 的像素个数, 那么直方图则可以定义为:

P(rk)=nk/N,k=0,1,2,…,L-1

所谓直方图均衡化,就是将原始图像集中分布的直方图通过算法使之均匀分布。 均衡化的直方图,各像素之间灰度值差别的动态范围增加了,从而使图像的整体对比度得到提高。 在 MATLAB 中可以使用imhist( )函数来计算灰度图像的直方图。

直方图均衡化处理技术可以分为全局直方图均衡化处理和局部直方图均衡化处理。全局直方图是对整个图像都采用同一种变换方法的处理方式,它对处理的数据不加选择,这样可能会降低有用信号的对比度并且增强背景干扰信息的对比度;另外,图像均衡化后灰度级减少,某些细节将会随之消失,导致处理效果并不理想。 局部直方图则是将退化图像根据像素点或灰度值等因素划分成若干子块,再分别对这些块状区域进行均衡化处理。

2.2Retinex算法

Retinex 算法是一种常用的、 以人类视觉系统为出发点的图像增强算法,是以视网膜大脑皮层理论为基础。 Retinex 理论认为,物体的颜色是由物体对红、绿、蓝三种光线的反射能力决定的,而不是由反射光的强度的绝对值和光照的非均匀性来决定的。 若把原始图像 S(x,y)分解成入射图像 L(x,y)和反射图像 R(x,y)两个图像,则

S(x,y)=L(x,y)·R(x,y)

最简单和基础的 Retinex 算法就是单尺度的Retinex 算法(SSR),其原理如下:

首先用取对数的方法将光线中的入射光和反射光两种分量进行分离,将能反映图像细节信息的反射分量保留下来,即

lnR(x,y)=lnS(x,y)-lnL(x,y)

再用高斯模板对原始图像作卷积,即对原始图像作低通滤波,从而得到低通滤波函数 D(x,y),用 F(x,y)来表示高斯滤波函数,则

D(x,y)=S(x,y)·F(x,y)

第三步,将原始图像用取对数的方法,减掉上一步作低通滤波后的图像,就得到高频增强的图像G(x,y),即

G(x,y)=lnS(x,y)-lnD(x,y)

最后,取 G(x,y)的反对数,就得到了对原始退化图像进行增强后的图像 R(x,y),即

R(x,y)=expG(x,y)

Retinex 算法实际是通过原始图像 S 得到物体的反射性质 R,就是通过去除入射光线 L 对图像质量的影响,从而尽可能恢复到图像中物体原本的面目。 如何来估算 R,这并没有一个准确的标准,所以对 R 不同的估算, 就产生了不同的 Retinex 算法。其中多尺度 Retinex 算法是(MSR) 就是基于 SSR的一种比较重要且流行的算法。 MSR 算法改进了SSR 算法尺度单一、不能兼顾动态范围压缩和色彩保真性的不足, 其原理是对多个不同尺度的 SSR算法结果进行加权平均,即
在这里插入图片描述

上式中,i∈R,G,B 三个颜色通道,ωk 表示权重因子,k 表示使用的尺度个数,k=3 表示彩色图像,此时 i=3(红、绿、蓝三个通道);k=1 时,表示图像是灰度图像,此时 i=1(只有一个颜色通道)。

2.3 暗通道先验算法

暗通道先验算法是一种典型的图像复原算法,是根据大气散射原理构建图像的退化模型,以此来进行去雾化处理。雾霾天气下的视频图像可以用气散射模型来表示:

I(x)=J(x)t(x)+A(1-t(x))

其中,I(x)指的是我们所看到的雾霾天气下的图像的亮度,这个是已知的,J(x)是去雾处理后的图像,也就是我们所要达到的目标,t(x)表示的是介质的透射率,A 则是全球大气光成分。 暗通道先验算法是基于统计意义的算法,即在大部分户外无雾图像的无天空区域,像素中至少有一个颜色通道存在非常低的亮度值,几乎接近于 0,这个通道就是暗通道。 即

在这里插入图片描述

在上式中,JC(y)表示的是彩色图像 J 的三个通道(R,G,B)中的任意一个通道,Ω(x)表示的是以像素 x 为中心的一个窗口,由此可以看出,获取暗通道就是获取一个窗口内所有像素的各个通道的最小值。那么,假设大气光成分值 A 是一个已知的值,另外,引入一个在[0,1]之间的参数 ω,使得在去雾图像中保留一定的雾,以免图像失真,这样可得到初始透射率,t (x)的公式:

在这里插入图片描述

在实际应用中,A 的值可以借助于暗通道图从有雾的图像中获得。 另外可以再加入一个阈值 t0,它可以防止透射率过小从而导致 J 值偏大,使图像整体偏白。 因此,最终的图像去雾公式是:

在这里插入图片描述

03 MATLAB程序实现

本文基于MATLAB的GUIDE工具,设计出了图像去雾系统

在这里插入图片描述

主菜单可以对图像进行保存,去雾算法共4种选择,全局直方图均衡化、局部直方图均衡化、Retinex、暗通道先验去雾算法。在效果里可以调出去雾前后的直方图对比图。

在这里插入图片描述
在这里插入图片描述

源码目录:

在这里插入图片描述

04 源码获取

https://mbd.pub/o/bread/ZJeVm59u

猜你喜欢

转载自blog.csdn.net/sfejojno/article/details/129950219