项目:基于多尺度小波变换的图像去雾与细节复原系统
1. 项目介绍
本项目是一个基于MATLAB实现的图像去雾与细节增强系统。该系统采用了离散小波变换(DWT)理论,将图像分解为不同频率的分量,并针对低频和高频分量分别采用特定的增强策略。系统旨在解决雾霾天气下拍摄图像对比度低、颜色黯淡以及细节丢失的问题。通过在YCbCr色彩空间对亮度分量进行多级小波分解,结合限制对比度自适应直方图均衡化(CLAHE)与高频细节增益技术,不仅能有效去除雾气,还能显著恢复图像的边缘纹理和色彩饱和度。
2. 功能特性
- 智能图像输入:支持用户交互式选择图片;若未选择图片,系统会自动加载内置图像并应用大气散射模型模拟雾霾效果,以便进行算法演示。
- 多尺度频域处理:利用
sym4小波基进行二级离散小波分解,实现图像低频信息与高频细节的精准分离。 - 混合去雾增强策略:
* 低频分量:采用CLAHE算法去除雾霾遮罩,提升全局亮度和对比度。
* 高频分量:结合软阈值去噪与加权增益技术,在抑制噪声的同时强化边缘纹理。
- 色彩保真与优化:在YCbCr空间处理亮度,保留原始色度信息;并在后期通过HSV空间进行饱和度补偿,防止去雾后图像色彩寡淡。
- 客观评价指标:内置图像质量评估模块,自动计算并对比去雾前后的信息熵和平均梯度。
- 可视化对比:提供直观的GUI窗口,并排显示原始含雾图像与处理后的清晰图像。
3. 系统要求
- MATLAB R2014a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
- Wavelet Toolbox(小波工具箱)
4. 使用方法
- 启动MATLAB环境。
- 确保
main.m文件位于当前工作路径下。 - 在命令行窗口输入
main 并回车运行。 - 在弹出的文件选择对话框中选择一张受雾霾影响的图片(支持jpg, png, bmp, tif格式)。
- 点击“取消”可进入演示模式,系统将自动生成模拟雾霾图像进行处理。
- 程序运行结束后,将弹出结果对比窗口,并在命令行显示客观评价指标。
5. 核心算法与实现逻辑
本项目的核心逻辑在
main.m中严格按照以下步骤实现:
5.1 图像读取与预处理
程序首先尝试通过UI界面让用户选择图像。如果用户取消选择,系统自动读取MATLAB内置的
autumn.tif,将其转换为双精度浮点型,并基于大气散射模型(设置透射率0.6,大气光0.9)生成人工合成的含雾图像,确保任何情况下程序都能运行演示。
5.2 色彩空间转换
为了避免颜色失真,算法将RGB图像转换为YCbCr色彩空间。去雾处理仅针对代表亮度的
Y通道进行,而
Cb和
Cr色度通道保持不变,从而最大限度地保持图像原始色调。
5.3 多尺度离散小波分解 (DWT)
采用
sym4作为小波基函数,对
Y通道进行两级分解:
- 一级分解:得到近似系数
cA1及水平、垂直、对角线细节系数cH1, cV1, cD1。 - 二级分解:基于
cA1继续分解,得到低频近似系数cA2及二级细节系数cH2, cV2, cD2。
5.4 低频分量增强 (去雾)
针对包含主要能量和雾霾遮罩的低频分量
cA2,算法实施以下步骤:
- 归一化:将系数缩放至[0, 1]区间。
- CLAHE处理:应用限制对比度自适应直方图均衡化(
adapthisteq),设置裁剪限制(ClipLimit)为0.01,分布模式为瑞利分布(Rayleigh)。这一步极大地提升了基频图像的对比度,有效去除“白雾”感。 - 逆归一化:将增强后的系数映射回原始数值范围。
5.5 高频分量增强 (细节复原)
针对包含边缘和纹理的高频系数(
cH,
cV,
cD),不仅进行简单的放大,还考虑了噪声抑制。通过辅助函数
enhance_detail处理:
- 阈值去噪:计算基于中值绝对偏差的噪声标准差,设定软阈值。
- 细节增益:使用软阈值函数提取纯净细节,然后对其应用特定的增益系数(二级细节系数增益为1.5,一级细节系数增益为2.0),并叠加回原始系数中。这种方法在锐化图像的同时避免了噪声的过度放大。
5.6 图像重构与色彩恢复
- IDWT重构:利用增强后的低频系数和高频系数,通过两次离散小波逆变换重构出增强后的
Y通道。 - 色彩空间还原:将增强的
Y通道与原始Cb、Cr通道合并,逆变换回RGB空间。 - 饱和度补偿:为解决去雾后图像可能出现的色彩灰暗问题,算法将图像转换至HSV空间,将饱和度(S分量)提升20%(乘以1.2),然后转回RGB并截断至合理范围[0, 1]。
6. 关键辅助函数说明
enhance_detail(coef_in, gain)
这是高频系数处理的核心函数。它首先利用统计学方法(系数绝对值的中值除以0.6745)估计背景噪声水平,随后使用
wthresh函数进行软阈值处理,去除微小噪声干扰。最后,按照公式
输出 = 输入 + 处理后的细节 * 增益 进行加权叠加,实现细节增强。
calc_entropy(img)
用于计算图像的信息熵。如果输入是彩色图像,先转换为灰度图。该指标反映了图像包含的平均信息量,值越大通常代表图像细节越丰富。
calc_avg_gradient(img)
用于计算图像的平均梯度。算法分别计算水平和垂直方向的差分,求得梯度幅值图,最后计算所有像素梯度的平均值。该指标主要用于衡量图像的清晰度和纹理丰富程度。