![计算机视觉与深度学习实战:以MATLAB、Python为工具](https://wfqqreader-1252317822.image.myqcloud.com/cover/457/30918457/b_30918457.jpg)
1.3 程序实现
为进行图像去雾实验,本案例采用全局直方图均衡化、局部直方图均衡化算法进行图像去雾实验,并选择Retinex增强算法作为直方图去雾算法的延伸。在本案例中采用GUI设计软件并通过菜单关联不同的去雾算法,通过显示处理前后的图像直方图进行去雾效果的对比。
1.3.1 设计GUI界面
为增加软件交互的易用性,这里调用MATLAB的GUI(Graphical User Interface,图形用户接口)来生成软件框架,演示去雾图像载入、处理和对比的过程。GUI界面设计如图1-5所示。
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/19_1.jpg?sign=1738885184-QpBHy8VYHblzxG3k0DBy1ib012Itf3Cp-0-756c52288b8e9071d4e89c11dfdc7e87)
图1-5 GUI界面设计
该软件通过菜单关联的方式进行功能设计并实现模块化编程。其中,文件菜单主要用于载入待处理图像等基本操作,图像去雾菜单用于关联不同的去雾算法并显示结果,帮助菜单则弹出独立窗口用于介绍软件操作流程。GUI主窗口加入坐标轴控件用于图像显示,通过原图像与结果图像的显示可以简捷地演示算法的去雾效果。
1.3.2 全局直方图处理
MATLAB通过函数imread读取RGB图像,并通过维数为m× n×3的矩阵来表示。其中,维数m×n表示图像的行数、列数信息,维数3表示图像的R、G、B三层通道数据。因此,全局直方图处理通过对RGB图像的R、G、B三层通道分别进行直方图均衡化,再整合到新的图像的方式进行。核心代码如下:
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/20_1.jpg?sign=1738885184-innHE9Pwy8BNr8S1MqXEEFpcs68oBtWB-0-fadca159084d6c0345df4d521a25a0a9)
关联到菜单“图像去雾/全局直方图算法”,执行图像的全局直方图处理并进行显示,效果如图1-6~图1-7所示。
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/20_2.jpg?sign=1738885184-56A3gsBBl29jHHsGODPUTZY4gHS9UP0K-0-ab6f88f36946f958c9591d1b87bd9633)
图1-6 全局直方图处理截图
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/21_1.jpg?sign=1738885184-K1jQsZJnCzsvcqPFfp28u5N9892RBa4G-0-88af3e218539b496393943129dc6dfbb)
图1-7 直方图对比
运行结果表明,全局直方图去雾算法可以实现含雾图像的增强效果,处理前后的直方图在分布上具有明显变化,但在图像整体上容易出现某些色彩失真的现象。
1.3.3 局部直方图处理
全局直方图均衡化增强只是将原图像的直方图进行了均衡化,未能有效保持原始图像的局部特征,容易出现色彩失真问题。通过选择固定大小的滑动窗口作用于原始图像进行局部直方图处理,可以在一定程度上保持原始图像的局部特征,提高图像增强的效果。因此,局部直方图处理通过对RGB图像的R、G、B三层通道分别进行局部直方图均衡化,再整合到新的图像的方式进行。核心代码如下:
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/21_2.jpg?sign=1738885184-Lhwi5QDj5pXG5QiFsiimyBDftezRdEBT-0-00218642619a08e5a61d7c8fdb65685b)
关联到菜单“图像去雾/局部直方图算法”,执行图像的局部直方图处理并进行显示,效果如图1-8~图1-9所示。
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/22_2.jpg?sign=1738885184-Z6rP1Rgz6bhwaJ9S4101S6GskTTznHfl-0-21e1cb0918a63e8e8678f3bbe7ee3fdd)
图1-8 局部直方图处理
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/23_1.jpg?sign=1738885184-Q0aQfK4myRPJMOVQJmStw5GOLk44KboS-0-0e48791667be76f99e4121b354552eb0)
图1-9 直方图对比
局部直方图的处理结果表明该算法能有效保持原始图像的局部特征,未出现明显的色彩失真现象,同时得到了去雾增强的效果。但是,该算法的处理结果在整体亮度上偏暗,依然存在某些模糊区域。
1.3.4 Retinex增强处理
基于全局直方图、局部直方图的图像去雾算法在理论及实现上比较简单,能起到一定的去雾处理效果。为了进行对比,本次实验采用了Retinex图像增强算法进行对比,该算法可以平衡图像灰度动态范围压缩、图像增强和图像颜色恒常三个指标,能够实现对含雾图像的自适应性增强。因此,Retinex增强处理通过对RGB图像的R、G、B三层通道分别应用Retinex算法进行处理,再整合到新的图像的方式进行。为了提高程序的普适性,我们对部分参数的赋值方式进行了改进,采用随机数取值的方式来生成参数。核心代码如下:
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/23_2.jpg?sign=1738885184-CMYSeKta1ls2QRTCS3SbZsSy5wDKWYd7-0-5cafe1103f70b46aec2a11ef22781dfe)
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/24_1.jpg?sign=1738885184-Am4EGrnGwMpMxG0WJlCcGTRsoSYtIgV6-0-9744d44a95a938cdc414fa9b2c6744c7)
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/25_1.jpg?sign=1738885184-DupDqyKaZzhwhbf3k8FlucpZqpzJ5zVB-0-a26e89e1d99f86e7eb7b1356f7b4cdd1)
关联到菜单“图像去雾/Retinex算法去雾”,执行图像的Retinex算法进行去雾处理并显示,效果如图1-10~图1-11所示。
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/26_2.jpg?sign=1738885184-rBlsR083pxULyq38wM5jTOBpHtJT5WRy-0-ae378452521dfb5009181d7f1d5c1930)
图1-10 Retinex算法去雾截图
![](https://epubservercos.yuewen.com/C5D702/16793575804223706/epubprivate/OEBPS/Images/26_3.jpg?sign=1738885184-r02udWO4auV4J4A5yaRrx3SdP04R8kPu-0-22d41d0dc92dbc87c4e2fcddb76c28d2)
图1-11 直方图对比
去雾处理前后的直方图分布表明,Retinex图像增强可以在一定程度上保持原始图像的局部特征,处理结果较为平滑,颜色特征也较为自然,具有良好的去雾效果。