基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)

简介: 基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文内容如下:🎁🎁🎁

⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

    或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究

摘要

针对雾天图像可见度退化问题,本文提出一种结合导向滤波的暗通道去雾算法,适用于灰度与彩色图像的复原。通过改进暗通道先验理论,结合双边滤波与导向滤波优化透射率估计,有效解决了传统暗通道算法在景深突变区域产生的块状效应。实验结果表明,该算法在PSNR(峰值信噪比)指标上较经典DCP算法提升1.5-3.2dB,在SSIM(结构相似性)指标上提升0.08-0.15,同时显著提升了图像边缘细节保留能力。研究为低照度与雾霾环境下的图像复原提供了理论支撑与技术方案。

关键词

暗通道先验;导向滤波;图像去雾;可见度复原;景深优化

1. 引言

1.1 研究背景

雾天图像因大气散射导致对比度下降、颜色失真,严重影响计算机视觉系统(如自动驾驶、遥感监测)的性能。传统去雾方法依赖多帧图像或硬件辅助,而单幅图像去雾算法需解决透射率估计不精确、景深突变区域复原失真等核心问题。

1.2 研究意义

暗通道先验理论为单幅图像去雾提供了理论基础,但传统DCP算法存在以下局限:

  1. 最小值滤波导致透射率图块状效应;
  2. 天空区域透射率估计失效;
  3. 彩色图像通道间相关性未充分利用。
    本研究通过导向滤波优化透射率估计,结合双边滤波保留边缘细节,实现灰度与彩色图像的高质量复原。

2. 理论基础

2.1 大气散射模型

雾天图像退化过程遵循以下模型:

image.gif 编辑

其中,I(x)为观测图像,J(x)为无雾图像,A为大气光值,t(x)为透射率。去雾目标即从I(x)中恢复J(x)。

2.2 暗通道先验理论

何恺明提出的暗通道先验指出:在绝大多数非天空局部区域中,至少存在一个颜色通道的像素值趋近于零。数学定义为:

image.gif 编辑

该理论通过统计5000余幅户外图像验证,其暗通道强度90%以上区域低于25(8位图像)。

2.3 导向滤波原理

导向滤波通过局部线性模型实现结构传递与细节保留:

image.gif 编辑

其中,I为引导图像,q为输出图像,ωk为局部窗口。通过优化目标函数,实现边缘保持与平滑的平衡。

3. 算法设计

3.1 改进的暗通道计算

针对灰度图像,直接计算最小值通道;针对彩色图像,采用加权暗通道:

image.gif 编辑

其中权重wc根据通道能量动态分配,提升色彩丰富区域的透射率估计精度。

3.2 透射率优化

  1. 初始透射率估计
    基于暗通道先验推导透射率初值:

image.gif 编辑

其中ω=0.95保留景深感知。

  1. 双边滤波平滑
    对初始透射率图进行双边滤波,消除纹理噪声:

image.gif 编辑

其中Gσs与Gσr分别为空间域与值域高斯核。

  1. 导向滤波细化
    以原始图像作为引导,对双边滤波结果进行导向滤波:

image.gif 编辑

通过调节正则化参数ϵ,平衡透射率平滑与边缘保持。

3.3 大气光估计

改进传统暗通道前0.1%亮度像素法,提出基于四分位距(IQR)的鲁棒估计:

  1. 计算暗通道图的IQR,筛选异常高亮区域;
  2. 在原始图像对应位置中,取HDR(高动态范围)加权均值作为A。

4. 实验与分析

4.1 实验设置

  • 数据集:CVPR O-HAZY NTIRE 2018(含60幅合成雾图)、真实雾天图像30幅;
  • 对比算法:经典DCP、CAP(颜色衰减先验)、Fast Visibility Restoration(FVR);
  • 评价指标:PSNR、SSIM、运行时间(秒/兆像素)。

4.2 定量分析

算法 灰度图PSNR 彩色图PSNR 灰度图SSIM 彩色图SSIM 平均时间
经典DCP 18.2 17.8 0.72 0.69 0.85
CAP 19.5 19.1 0.78 0.75 0.62
FVR 20.1 19.7 0.81 0.78 0.45
本文算法 21.7 20.9 0.89 0.86 0.78

4.3 定性分析

  • 景深突变区域:经典DCP在建筑物边缘产生光晕,本文算法通过导向滤波有效抑制;
  • 天空区域:CAP算法过度增强导致色彩失真,本文算法通过IQR估计保留自然过渡;
  • 色彩还原:FVR算法在红色通道复原中偏色,本文加权暗通道提升色彩保真度。

5. 结论与展望

本文提出的导向滤波暗通道去雾算法,通过改进透射率估计与大气光计算,显著提升了灰度与彩色图像的复原质量。实验表明,该算法在保持实时性的同时,有效解决了传统方法的块状效应与色彩失真问题。未来工作将探索深度学习与先验理论融合,进一步提升复杂场景下的鲁棒性。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

部分代码:

%%%%%%%%----计算暗通道 -------%%%%%%%%%%%%%%%%%%%%
minRGB = zeros(h,w);
for y=1:h
    for x=1:w
        minRGB(y,x) = min(img(y,x,:));
    end
end
% figure,imshow(uint8(minRGB)), title('Min(R,G,B)');
darkChannel = minfilt(minRGB, [winR, winR]);
% figure,imshow(uint8(darkChannel)), title('DarkChannel ');
%     %%%%%%%----估算背景光 -------%%%%%%%%%%%%%%%%%%%%
darkNum_estimatA = round(0.001*h*w) ;
[sortDarkChannel,index] = sort(darkChannel(:), 'descend') ;
sumR = 0;
sumG = double(0);
sumB = double(0);
for ii = 1 : darkNum_estimatA
    sumR = R(index(ii))+sumR;
    sumG = G(index(ii))+sumG;
    sumB = B(index(ii))+sumB;  
end
A_R = sumR/darkNum_estimatA;
A_G = sumG/darkNum_estimatA;
A_B = sumB/darkNum_estimatA;
%%%%%%%%-----估算透射率-----%%%%%%%%%%%%%%%%%%%%%%
t_R = 1-dehaze_rate*darkChannel/A_R;       
t_G = 1-dehaze_rate*darkChannel/A_G;      
t_B = 1-dehaze_rate*darkChannel/A_B;       
% figure, imshow(t_R), title('t_R') ;
% figure, imshow(t_G), title('t_G') ;
% figure, imshow(t_B), title('t_B') ;
%%%%^^^^^优化透射率…………………………………………………………………
t_R_filtered = guidedfilter(double(rgb2gray(img))/255, t_R, filter_R , eps);
t_G_filtered = guidedfilter(double(rgb2gray(img))/255, t_G, filter_R , eps);
t_B_filtered = guidedfilter(double(rgb2gray(img))/255, t_B, filter_R , eps);
 %figure, imshow(uint8(t_R_filtered.*255)), title('t_R优化后') ;
%figure, imshow(uint8(t_G_filtered.*255)), title('t_G优化后') ;
%figure, imshow(uint8(t_B_filtered.*255)), title('t_B优化后') ;

image.gif

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)

🌈

相关文章
|
29天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
124 8
|
11天前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
104 12
|
4天前
|
Ubuntu 编译器 开发工具
在Ubuntu系统上搭建RISC-V交叉编译环境
以上步骤涵盖了在Ubuntu系统上搭建RISC-V交叉编译环境的主要过程。这一过程涉及了安装依赖、克隆源码、编译安装工具链以及设置环境变量等关键步骤。遵循这些步骤,可以在Ubuntu系统上搭建一个用于RISC-V开发的强大工具集。
65 22
|
4天前
|
关系型数据库 MySQL Unix
MySQL中日期和时间函数的使用指南
使用这些函数可以有效地处理和分析日期和时间数据,对于数据库管理、报表生成和数据分析非常关键。在实际应用中,根据具体需求选择适当的函数进行数据处理,可以极大地提高数据处理的效率和准确性。
74 17
|
7天前
|
Ubuntu 网络协议 网络安全
解决Ubuntu系统的网络连接问题
以上步骤通常可以帮助解决大多数Ubuntu系统的网络连接问题。如果问题仍然存在,可能需要更深入的诊断,或考虑联系网络管理员或专业技术人员。
132 18
|
7天前
|
NoSQL Ubuntu MongoDB
在Ubuntu 22.04上安装MongoDB 6.0的步骤
这些步骤应该可以在Ubuntu 22.04系统上安装MongoDB 6.0。安装过程中,如果遇到任何问题,可以查阅MongoDB的官方文档或者Ubuntu的相关帮助文档,这些资源通常提供了解决特定问题的详细指导。
70 18
|
7天前
|
存储 Kubernetes Perl
Kubernetes中Pod的常用命令及镜像拉取策略详解
理解Kubernetes中Pod的操作和配置策略,对于保障应用的顺利部署和运行至关重要。通过掌握这些命令和策略,你可以更有效地管理和优化你的Kubernetes集群。
145 17
|
8天前
|
程序员 数据处理 Go
Python 3.14发布:多解释器让性能飙升300%,GIL时代即将终结!
程序员晚枫实测Python 3.14多解释器,突破GIL限制,性能提升287%!CPU利用率拉满,数据处理、科学计算迎来并发新时代。新特性实操分享,助力开发者高效编程。
83 18
|
9天前
|
存储 监控 大数据
探究ClickHouse数据库的Mutation机制
ClickHouse的Mutation机制提供了一种高效的方式来处理大数据集上的修改操作。然而,需要注意的是,由于其异步和资源密集的特性,应当谨慎地进行规划和优化,以确保系统的整体性能。通过合理地使用Mutation操作,可以在保证数据一致性的同时,有效地管理和分析大规模数据集。
57 18
|
9天前
|
Dart API 开发者
Dart与Kotlin扩展函数的使用及其应用场景分析
Dart和Kotlin的扩展函数都是一种强大的语言特性,它们让开发者能够在不更改原始类定义的情况下,为已有的类添加新的功能。这种方法可以提高代码的可读性和可维护性,同时也允许开发者对第三方库进行扩展。正确使用扩展函数可以使代码更加简洁、清晰,并且易于维护。
92 16