- 计算机视觉与深度学习实战:以MATLAB、Python为工具
- 刘衍琦 詹福宇 王德建
- 1312字
- 2020-08-27 18:18:32
1.3 程序实现
为进行图像去雾实验,本案例采用全局直方图均衡化、局部直方图均衡化算法进行图像去雾实验,并选择Retinex增强算法作为直方图去雾算法的延伸。在本案例中采用GUI设计软件并通过菜单关联不同的去雾算法,通过显示处理前后的图像直方图进行去雾效果的对比。
1.3.1 设计GUI界面
为增加软件交互的易用性,这里调用MATLAB的GUI(Graphical User Interface,图形用户接口)来生成软件框架,演示去雾图像载入、处理和对比的过程。GUI界面设计如图1-5所示。
图1-5 GUI界面设计
该软件通过菜单关联的方式进行功能设计并实现模块化编程。其中,文件菜单主要用于载入待处理图像等基本操作,图像去雾菜单用于关联不同的去雾算法并显示结果,帮助菜单则弹出独立窗口用于介绍软件操作流程。GUI主窗口加入坐标轴控件用于图像显示,通过原图像与结果图像的显示可以简捷地演示算法的去雾效果。
1.3.2 全局直方图处理
MATLAB通过函数imread读取RGB图像,并通过维数为m× n×3的矩阵来表示。其中,维数m×n表示图像的行数、列数信息,维数3表示图像的R、G、B三层通道数据。因此,全局直方图处理通过对RGB图像的R、G、B三层通道分别进行直方图均衡化,再整合到新的图像的方式进行。核心代码如下:
关联到菜单“图像去雾/全局直方图算法”,执行图像的全局直方图处理并进行显示,效果如图1-6~图1-7所示。
图1-6 全局直方图处理截图
图1-7 直方图对比
运行结果表明,全局直方图去雾算法可以实现含雾图像的增强效果,处理前后的直方图在分布上具有明显变化,但在图像整体上容易出现某些色彩失真的现象。
1.3.3 局部直方图处理
全局直方图均衡化增强只是将原图像的直方图进行了均衡化,未能有效保持原始图像的局部特征,容易出现色彩失真问题。通过选择固定大小的滑动窗口作用于原始图像进行局部直方图处理,可以在一定程度上保持原始图像的局部特征,提高图像增强的效果。因此,局部直方图处理通过对RGB图像的R、G、B三层通道分别进行局部直方图均衡化,再整合到新的图像的方式进行。核心代码如下:
关联到菜单“图像去雾/局部直方图算法”,执行图像的局部直方图处理并进行显示,效果如图1-8~图1-9所示。
图1-8 局部直方图处理
图1-9 直方图对比
局部直方图的处理结果表明该算法能有效保持原始图像的局部特征,未出现明显的色彩失真现象,同时得到了去雾增强的效果。但是,该算法的处理结果在整体亮度上偏暗,依然存在某些模糊区域。
1.3.4 Retinex增强处理
基于全局直方图、局部直方图的图像去雾算法在理论及实现上比较简单,能起到一定的去雾处理效果。为了进行对比,本次实验采用了Retinex图像增强算法进行对比,该算法可以平衡图像灰度动态范围压缩、图像增强和图像颜色恒常三个指标,能够实现对含雾图像的自适应性增强。因此,Retinex增强处理通过对RGB图像的R、G、B三层通道分别应用Retinex算法进行处理,再整合到新的图像的方式进行。为了提高程序的普适性,我们对部分参数的赋值方式进行了改进,采用随机数取值的方式来生成参数。核心代码如下:
关联到菜单“图像去雾/Retinex算法去雾”,执行图像的Retinex算法进行去雾处理并显示,效果如图1-10~图1-11所示。
图1-10 Retinex算法去雾截图
图1-11 直方图对比
去雾处理前后的直方图分布表明,Retinex图像增强可以在一定程度上保持原始图像的局部特征,处理结果较为平滑,颜色特征也较为自然,具有良好的去雾效果。