1. 图像去雾算法实战:从原理到MATLAB实现
作为一名长期与数字图像打交道的工程师,我经常遇到雾天拍摄的素材需要处理。今天分享三种自研的MATLAB去雾算法实现,包含全局/局部直方图处理和Retinex方法。这些代码经过多年项目打磨,特别适合需要快速处理户外雾霾图像的场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法原理深度解析
2.1 全局直方图均衡化
全局直方图算法基于LAB颜色空间进行操作,其核心思想是通过调整明度通道的分布来增强图像对比度。LAB空间由三个分量组成:
- L:明度通道(0-100)
- a:红绿色度通道(-128~127)
- b:黄蓝色度通道(-128~127)
算法选择LAB而非RGB空间的原因在于:
- 颜色信息与亮度信息分离,避免调整时产生色偏
- 更接近人类视觉感知特性
- 明度通道单独处理不会影响色彩饱和度
关键参数说明:
- stretchlim自动计算图像中2%和98%百分位的像素值作为裁剪点
- imadjust将像素值线性映射到[0,1]全范围
2.2 局部直方图均衡化
局部算法采用HSV颜色空间,专注于明度(V)通道的区块化处理。相比全局方法,它具有以下优势:
- 自适应处理不同区域的对比度
- 保留更多细节纹理
- 避免全局处理导致的局部过曝
技术要点:
- NumTiles参数决定分块数量,8×8适用于大多数1080P图像
- ClipLimit控制直方图裁剪强度,典型值0.02-0.05
- 分块处理需注意边界效应,算法内部会自动平滑过渡
2.3 Retinex理论实现
Retinex算法基于"光照-反射"模型,其数学表达为:
S(x,y) = R(x,y) × L(x,y)
其中:
- S:观测图像
- R:物体反射率(本征颜色)
- L:光照分量
算法步骤解析:
- 高斯滤波估计光照分量L
- 对数域计算反射率R = log(S) - log(L)
- 归一化处理保证输出范围
参数选择建议:
- σ值决定去雾强度,小σ保留细节但去雾弱
- 典型σ范围30-100,户外场景建议50起调
- 0.01偏移量防止对数计算溢出
3. MATLAB实现详解
3.1 全局直方图完整代码
matlab复制function dehazed = glob
