【图像增强】暗通道图像去雾【含GUI Matlab源码 740期】

news2025/1/18 13:49:48

⛄一、简介

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 基于暗通道先验的图像去雾处理效果优化流程

⛄二、部分源代码

unction varargout = zhongzhiquwu(varargin)

gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @zhongzhiquwu_OpeningFcn, …
‘gui_OutputFcn’, @zhongzhiquwu_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before zhongzhiquwu is made visible.
function zhongzhiquwu_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to zhongzhiquwu (see VARARGIN)
axes(handles.axes1);
imshow([255]);
axes(handles.axes2);
imshow([255]);
axes(handles.axes3);
imshow([255]);
axes(handles.axes4);
imshow([255]);
axes(handles.axes5);
imshow([255]);
% Choose default command line output for zhongzhiquwu
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes zhongzhiquwu wait for user response (see UIRESUME)
% uiwait(handles.figure1);
%

% — Outputs from this function are returned to the command line.
function varargout = zhongzhiquwu_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
global b
global dark_I2
global dark_I
global T
global J
axes(handles.axes1);
imshow([255]);
axes(handles.axes2);
imshow([255]);
axes(handles.axes3);
imshow([255]);
axes(handles.axes4);
imshow([255]);
axes(handles.axes5);
imshow([255]);
axes(handles.axes1)
[filename,pathname]=uigetfile({ …
.’,‘All Files(.)’;},…
‘选择文件’);
%
if isequal([filename,pathname],[0,0])
return
else
%读取图片
pic = fullfile(pathname,filename);
b = imread(pic);
imshow(b);%上面是打开图片的步骤,这一句是显示图片

title('原始图片');
[dark_I2,dark_I,T,J]=min_quwu(b);
%handle.axes1=b;

end
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
global dark_I2
axes(handles.axes2);
imshow(dark_I2);
title(‘估算得到的雾浓度’);
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% — Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
global dark_I
axes(handles.axes3);
imshow(dark_I);
title(‘中值滤波对雾浓度的修正’);
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% — Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
global T
axes(handles.axes4);
imshow(T);
title(‘透视率分布图’);
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% — Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
global J
axes(handles.axes5);
imshow(J);
title(‘去雾图像’);
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% — Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
global dark_I2
axes(handles.axes2);
imshow(dark_I2);
title(‘估算得到的物浓度’);
global dark_I
axes(handles.axes3);
imshow(dark_I);
title(‘中值滤波对雾浓度的修正’);
global T
axes(handles.axes4);
imshow(T);
title(‘透视率分布图’);
global J
axes(handles.axes5);
imshow(J);
title(‘去雾图像’);
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]胡伟,袁国栋,董朝,疏学明.基于暗通道优先的单幅图像去雾新方法[J].计算机研究与发展. 2010,47(12)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定期执行命令、脚本之Linux

在linux下,如果想要在未来的某个时刻执行某个任务,并且在未来的每一个这样的时刻里都要执行这个任务,举个简单的例子,比如说想要在将来,每天的十二点都重启路由器,大多数发行版都自带一个守护进程&#xff…

【敏捷转型,效能提升】万字长文敏捷转型实践系列分享

作者:王先科、田野、王锁、刘双、马越、刘思琪 摘要:本文总结了近4年以来部门实施敏捷转型的实践及经验教训,从5个方面进行了阐述: 1. 文化建设下好先手棋 2. 持续敏捷实践祭出连环招 3. 沉淀实践指引把牢定盘星 4. 效能度量…

英飞凌-AURIX-TC3XX-内核架构:AURIX TriCore 1.6P

目录英飞凌-AURIX-TC3XX-内核架构:AURIX TriCore 1.6P1、AURIX TC1.6P内核简介及特点2、AURIX TC1.6P系统组成及框架2.1、AURIX TC1.6P CPU 具体实现图如下:2.2、AURIX TC1.6P CPU 系统框架2.2.1、指令获取单元- Instruction Fetch Unit2.2.2、执行单元-…

SpringSession+Redis实现【分布式Session】

1. 什么是Spring Session SpringBoot整合Spring-Session的自动配置可谓是开箱即用,极其简洁和方便。这篇文章即介绍SpringBoot整合Spring-Session,这里只介绍基于RedisSession的实战。 Spring Session 是Spring家族中的一个子项目,Spring S…

公务员考试要求及流程梳理

背景 虽然我不考, 但考公这么热门, 在信息层面不能落伍. 本文以 浙江2023省考 (考试时间在2022年12月) 为例, 主要梳理 怎么报名, 选职位, 考试科目与题型, 录用流程等. 为什么考公/考编这么热 因为当下的社会环境对员工太不友好了: 工作强度大, 精神压力大, 还有硬性比例淘…

频率调优(调频)

文章目录 前言 1 频率调优步骤 1.1 准备工作 1.2 串行模式微调 1.3 PPM模式微调 2 高级用户 前言 某些协议需要调优以获得最佳性能。在某些情况下,需要调优才能绑定协议。频率调优是每个 MULTI 模块所特有的,是由于射频组件的微小变化引起的。 &#xf…

物联网通信技术 第6章 电信网络

6.5 多网融合 从通信网络来讲,多网融合主要是指固定网络、移动网络、互联网、广电网融合于一体,满足通信业务融合、网络融合、终端融合、产业融合的需求。 “多网融合”技术有两个层面的含义,一是基于IP协议的控制网与信息网的“接入融合”…

电巢:千亿美金砸向半导体,印度能否实现“赶中超美”的野心?

前言 印度,又一次开始向半导体产业进军。 近日,印度最大集团公司塔塔集团(Tata Group)旗下子公司塔塔之子董事长纳塔拉詹钱德拉塞卡兰(Natarajan Chandrasekaran),在接受媒体采访时表示,塔塔集团将开始在印…

戴尔电脑录屏怎么录?这3个方法,教你轻松录屏

随着互联网的发展,电脑已经成为我们学习、工作和娱乐中不可或缺的工具。很多人在使用戴尔电脑的时候,经常会遇到需要进行录屏的情况。戴尔电脑录屏怎么录?小伙伴还在担心自己不会使用戴尔电脑录屏而烦恼吗?今天小编给大家带来了3个…

DVWA靶场安装

DVWA靶场安装1.环境准备2.安装步骤2.1.phpstudy安装2.2.DVWA安装2.2.1.下载DVWA2.2.2.解压DVWA2.2.3.放入服务器2.2.4.删除配置文件后缀2.2.5.修改配置文件2.2.6.访问DVWA2.2.7.报错修改2.2.8.修改php.ini2.2.9.重新访问DVWA2.2.10.登录DVWA3.修改过关等级1.环境准备 服务器环境…

redux与vuex异同以及使用

一. 概述 React与Vue是我们熟悉的两大前端主流框架,来自官方的解释,Vue是一套用于构建用户界面的渐进式框架,React是一个用于构建用户界面的JavaScript库,两个框架都使用各自的语法,专注于用户UI界面的构建.那我们会有疑问,这两个框架都专注于…

PAG动画研究

阅读文章大约需要6分钟 一、什么是PAG 官方定义:PAG(Portable Animated Graphics) 是一套完整的动画工作流。提供从AE导出插件,到桌面预览工具PAGViewer,再到各端的跨平台渲染 SDK。 二、PAG的优势 1、动画文件小&a…

[附源码]Python计算机毕业设计工程车辆动力电池管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

【DevOps实战系列】第四章:详解Jenkins搭建及使用

个人亲自录制全套DevOps系列实战教程 :手把手教你玩转DevOps全栈技术 Jenkins概述 根据jenkins官网对自己的描述,它是一个可集成有1800插件的自动化服务, 提供构建、部署和自动化的工程,可以说是opsdev的大总管,将开发…

zabbix部署+报警模块+图形模块+管理模块+添加监控模板

目录 安装zabbix 部署zabbix 配置zabbix 1. 修改语言 2. 监控linux端 3. 修改中文乱码 报警功能 报警音报警 邮件报警 脚本报警 邮件通知内容 图形模块 创建图形 创建聚合图形 percona mysql模板 nginx模板 克隆主机 网络发现 自动注册 主被动模式 🍁如果对你有帮助…

Vue + Element-ui实现后台管理系统---项目搭建 + ⾸⻚布局实现

目录:导读 项目搭建 ⾸⻚布局实现 一、项目搭建 1、环境搭建 2、项目初期搭建 二、Main.vue 三、左侧栏部分(CommonAside.vue) 四、header部分(CommonHeader.vue) 五、Home.vue 写在最后 项目搭建 ⾸⻚布局实现 这篇主要讲解 项目搭建 后台⾸⻚布局实现…

Oracle项目管理之设施与资产管理Facilities and Asset(中文)

目录 维护管理 独立或集成 设施状况评估 空间管理 租赁管理 交易管理 资产组合管理 投资组合管理能力 可持续性和能源管理 单一综合设施和资产生命周期管理 Oracle Primavera Unifier 设施与资产管理是一个功能强大且易于使用的解决方案,用于管理您的财产…

第九章服务器内部转发和客户端重定向

文章目录为什么需要转发和重定向服务器内部转发客户端重定向重定向的相关的状态码对比转发和重定向的应用场景为什么需要转发和重定向 发一个请求给Servlet,接力棒就传递到了Servlet手中。而绝大部分情况下,Servlet不能独自完成一切,需要把接…

云原生之使用docker部署qbittorrent

云原生之使用docker部署qbittorrent一、qbittorrent介绍二、检查本地docker状态三、下载qbittorrent四、部署qbittorrent1.创建数据目录2.创建qbittorrent容器3.查看qbittorrent容器状态五、访问qbittorrent1.进入qbittorrent 登录页2.进入qbittorrent 首页六、qbittorrent的基…

在 Vue 中,使用 $attrs 构建高级组件

我们来看下 Vue3 中的 $attrs 属性。首先,我们会介绍它的用途以及它的实现与 Vue2 有哪些不两同点,并通过事例来加深对它的理解。 真正理解了 $attrs 属性有助于我们构建易于使用和可扩展的高级组件 什么是 $attrs 对 $attrs 定义, Vue2 与…