一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【图像增强】基于matlab暗通道图像去雾【含Matlab源码 1226期】

获取代码方式2:
通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。

获取代码方式3:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:开通CSDN会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效);
订阅紫极神光博客付费专栏,可免费获得2份代码(有效期为订阅日起,三天内有效);

二、简介

1 暗通道先验图像去雾方法
1.1 光线透射率模型
光在传播中由于散射使得从光源发出的辐射只有部分能到达接收传感器,其他则被散射到传播介质中。假设距离较小时散射光强与距离是线性关系,当光源距离传感器无限接近时,光的衰减值可近似为:Br,其中β为空气的散射系数;r为光源与传感器间的距离。大气密度均匀时,光线透射率的数学模型为:

式中:D为场景深度;t为光线透射率,用于量化传感器接收光强与光源表面光强间的比例关系,即没有被散射的辐射与光源辐射间的比例关系。

1.2 暗通道先验理论
基于统计大量清晰图像得到的暗通道先验理论是指大部分不含天空的优质图像的所有像素在R,G,B这3个通道中最少存在一个颜色通道灰度值相当低以至趋近于0[5],也就是在一定的微小区域里最小辐射强度值极低。一幅图像J可定义为:

式中:J dark为图像J的暗通道值; J为图像J的c通道灰度值; Q(x) 为以像素x为中心的局部微小区域; y为区域内任一像素。

1.3 暗通道先验图像去雾处理
图像去雾的目标是将传感器接收到的有雾图像利用获得的有用信息通过去雾还原出清晰图像。暗通道先验图像去雾处理是根据暗通道原理获取先验知识,再利用有雾图像退化模型实现图像去雾效果。

1.3.1 图像退化模型
在计算机视觉图形学领域,有雾图像的退化模型为[6]:

式中:l(x)为传感器接收到的场景信号,即输入的有雾影像;场景辐射J(x)为信号处理后的清晰图像;A为环境光照强度;t(x)为大气透射率。J(x)t(x)称为直接衰减项,用来量化场景辐射和传播中的信号损失。A(1-t(x))表示图像接收到的大气散射光强,它是引起色彩偏移和云雾效果的直接原因。

1.3.2 估算环境光照强度
暗通道图像中灰度值越高的区域云雾越厚,在输入图像中位于这部分区域的]像素灰度值越接近于环境光照强度。估算环境光照强度首先需要找到暗通道图像中灰度值最高并占图像总像素数量01%的像素点,记录它们对应的坐标索引,然后根据坐标索引在输入的有雾图像中找到对应像素点,计算有雾图像中对应像素点的灰度平均值作为环境光照强度A。

1.3.3估算大气透射率
使用t’(x)表示以像素x为中心的滤波窗口内的大气透射率,假设它局部不变对式(3)最小值运算,分别计算R,G,B这3个颜色通道中的最小值,即

将3个颜色通道的最小值进行运算,可得出以像素x为中心的滤波窗口内的灰度最小值,即

根据暗通道先验原理和式(2)可以得出:

于是,由式(5)和式(6)计算出大气透射率为:

1.3.4 去雾处理
暗通道先验条件可用来量化云雾厚度和全部像素的辐射还原量,然后恢复出清晰优质的图像。通过式(3)的有雾图像退化模型和环境光照强度A、大气透射率t(x),可进行单幅图像去雾处理,即

2 暗通道先验算法去雾效果优化
本文优化流程如图1所示。当输入图像云雾不均时,其大气透射率图层的灰度信息仅处于有限范围内,而整张图像的辐射还原量将被限制在一定区间里,不能分别准确还原云雾厚薄区域的辐射强度,从而影响图像去雾效果,考虑利用拉伸大气透射率图层对比度的方法来改善云雾厚薄不均时基于暗通道先验得出的无雾图像质量。

图1 基于暗通道先验的图像去雾处理效果优化流程

三、部分源代码

%暗通道去雾算法
%==========================================================================
%暗原色去雾算法是建立在户外自然场景暗通道优先法则的基础上的去雾方法
%其实就是解一个方程:I(x)=J(x)t(x)+A(1-t(x))
%其中I(x)是受到雾气污染的图像,J(x)是我们需要求的去雾后的图像
%t(x)是天空中云层的透射分布率,A是天空的亮度
%==========================================================================
img_name = imread('1.bmp');   %原始图像
I = double(img_name)/255;
[h,w,c] = size(I);   %获取图像大小
w0 = 0.95;   %去雾系数
dehaze = zeros(h,w,c);   %初始化结果图像
win_dark = zeros(h,w);   %初始化暗影通道图像
%--------------------------------------------------------------------------
%计算暗通道
%首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中。
%然后再对这幅灰度图进行最小值滤波
for i=1:h                 for j=1:wwin_dark(i,j) = min(I(i,j,:)); %每个像素存RGB三个分量  endend
win_dark = ordfilt2(win_dark,1,ones(9,9),'symmetric');   %9*9(暗通道窗口)进行最小值滤波
%--------------------------------------------------------------------------
%计算大气亮度A
dark_channel = win_dark;
temp = max(max(dark_channel));
[i,j] = find(dark_channel==temp);
i = i(1);
j = j(1);
A = mean(I(i,j,:));
%--------------------------------------------------------------------------
%计算透射率t(x)gray_I = I(:,:,1);   %这里gray_I可以是RGB图像中任何一个通道
p = transmission;   %透射率图
r = 80;
eps = 10^-3;
%用guided filter对trasmission map做soft matting获得更为精细的透射率图%gray_I是引导图像,p是输入图像,r是本地窗口半径,eps是正规化参数
%--------------------------------------------------------------------------
%求无雾图像
t0=0.1;   %设置阈值
t1 = max(t0,transmission_filter);
for i=1:cfor j=1:hfor l=1:wdehaze(j,l,i)=(I(j,l,i)-A)/t1(j,l)+A;   %无雾图像恢复endend
end
%--------------------------------------------------------------------------
%显示图像figure
subplot(121)
imshow(win_dark);title('暗通道')
subplot(122)
imshow(t1);title('透射率图')
figure
subplot(121)
imshow(I);title('去雾前')
subplot(122)
imshow(dehaze);title('去雾后')
%boxfilter(盒子滤波函数)
%==========================================================================
%输入:imSrc
%给定的滑动窗口大小:r
%==========================================================================
function imDst = boxfilter(imSrc,r)
imDst = zeros(size(imSrc));   %初始化
%--------------------------------------------------------------------------
imCum = cumsum(imSrc,1);   %y轴累计求和,将每一行的数值一次累加到下一行
%y轴方向差异
imDst(1:r+1,:) = imCum(1+r:2*r+1,:);
%将imCum中的1+r到2*r+1行数据复制到imDst函数中的1到r+1行
imDst(r+2:hei-r,:) = imCum(2*r+2:hei,:)-imCum(1:hei-2*r-1,:);
%将imCum中的2*r+2到hei行数据依次减去1到hei-2*r-1行的值
%把最终结果存放到函数imDst的r+2到hei-r行
imDst(hei-r+1:hei,:) = repmat(imCum(hei,:),[r,1])-imCum(hei-2*r:hei-r-1,:);
%使用repmat函数将imCum变为r*1的格式
%然后减去函数imCum中从hei-2*r到hei-r-1行的数值
%得到的结果放入imDst的hei-r+1到hei行位置
%--------------------------------------------------------------------------%y轴方向差异
imDst(:, 1:r+1) = imCum(:,1+r:2*r+1);
%将imCum中的1+r到2*r+1列数据复制到imDst函数中的1到r+1列
imDst(:, r+2:wid-r) = imCum(:,2*r+2:wid)-imCum(:,1:wid-2*r-1);
%将imCum中的2*r+2到hei列数据依次减去1到hei-2*r-1列的值
%把最终结果存放到函数imDst的r+2到hei-r列
imDst(:, wid-r+1:wid) = repmat(imCum(:,wid),[1,r])-imCum(:,wid-2*r:wid-r-1);
%使用repmat函数将imCum变为r*1的格式
%然后减去函数imCum中从hei-2*r到hei-r-1列的数值
%得到的结果放入imDst的hei-r+1到hei列位置
end

四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【图像增强】基于matlab暗通道图像去雾【含Matlab源码 1226期】相关推荐

  1. 基于Matlab暗通道图像去雾处理

    基于Matlab暗通道图像去雾处理 一.简介 何恺明的暗通道先验( dark channel prior)去雾算法是CV界去雾领域很有名的算法,关于该算法的论文"Single lmage H ...

  2. Python基于OpenCV的图像去雾算法[完整源码&部署教程]

    1.图片识别 2.视频展示 [项目分享]Python基于OpenCV的图像去雾算法[完整源码&部署教程]_哔哩哔哩_bilibili 3.算法原理 图像增强算法常见于对图像的亮度.对比度.饱和 ...

  3. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  4. Python暗通道图像去雾

    何凯明的经典图像去雾算法,直接上代码啦,理论后续讲解哈~ Python代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- from PIL impo ...

  5. c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十五 |一种基于亮度均衡的图像阈值分割技术...

    前言 对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果.为了解决这个问题,论文<一种基于亮度均衡的图像阈值分割技术>提出了一种实用而简便的图像分割方法.该方法针对图像中不同亮度 ...

  6. c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节...

    前言 今天为大家介绍一个利用多尺度来提升图像细节的算法.这个算法来自于论文<DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AN ...

  7. 【MATLAB图像处理实用案例详解(1)】—— 基于直方图优化的图像去雾技术

    目录 一.背景意义 二.理论基础 2.1 空域图像増强 2.2 直方图均衡化 三.方法选择 3.1 全局直方图算法 3.2 局部直方图算法 3.3 Retinex算法 四.效果演示 五.完整代码 一. ...

  8. 图像去雾算法--暗通道先验去雾算法

    图像去雾: 在雾天拍摄的图像容易受雾或霾的影响,导致图片细节模糊.对比度低以至于丢失图像重要信息,为解决此类问题图像去雾算法应运而生.图像去雾算法是以满足特定场景需求.突出图片细节并增强图片质量为目的 ...

  9. 一种基于卷积神经网络的图像去雾研究-含matlab代码

    目录 一.绪论 二.去雾卷积网络 2.1 特征提取 2.2 多尺度映射 2.3 局部均值 2.4 非线性回归 三.实验与分析 四.Matlab代码获取 一.绪论 雾是一种常见的大气现象,空气中悬浮的水 ...

  10. [Python图像识别] 四十六.图像预处理之图像去雾详解(ACE算法和暗通道先验去雾算法)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

最新文章

  1. 【Ant Design Pro 一】 环境搭建,创建一个demo
  2. IBM中国CTO程静:现代CTO是怎样炼成的
  3. [ 一起学React系列 -- 11 ] React-Router4 (1)
  4. 如何有效地读书【转】
  5. java-cef系列视频第二集:搭建开发环境
  6. DOM解析和SAX解析对比
  7. sizeo(结构体)的问题
  8. 《XHTML》pdf
  9. 如何使用Firepath工具方法定位元素
  10. Mac数据图表软件|让你的论文数据更加直观漂亮
  11. navicat 绿化版
  12. max3232ese_MAX3232CSE使用指南,MAX3232CES和MAX3232ESE有什么区别?
  13. 15000cd是多少流明_光通量(lm)发光强度(cd)照度单位(lux)之间的关系
  14. AppCrash explorer问题(解决方法)
  15. 书单来了!大厂的技术牛人在读什么:华为篇
  16. Django账号登陆之退出登录(logout()方法介绍、logout()方法使用)
  17. 跨平台手动迁移虚拟机
  18. Ken按特性开发核心思想
  19. Android8.1 源码修改之插入SIM卡默认启用Volte功能
  20. 精品奉献传智播客(C#.Net)就业班全套视频课程 Czbk .Net视频教程 完整版

热门文章

  1. MySQL数据库几种常用的索引类型使用介绍
  2. GIMP的Path的import和export
  3. python 比较两文件夹的内容,具有通用性。
  4. Prism初研究之使用Prism 5.0开发模块化应用
  5. 几本很不错的C++Builder的电子书
  6. python opencv 找到圆点标定板所有点后通过距离找两个角点4
  7. 2020-10-18
  8. 七月算法机器学习5 回归分析与工程应用 小案例
  9. Steve Pavlina:如何ASAP找到人生目标?
  10. 黑马程序员 Python学习笔记之变量