【图像去雾】颜色衰减先验图像去雾【含Matlab源码 2036期】

news2024/11/23 21:02:37

⛄一、颜色衰减先验去雾算法简介

2015年Zhu等的颜色衰减先验去雾算法利用颜色衰减先验建立有雾图像的景深模型, 采用有监督学习的方式得到模型的参数, 结合大气散射模型得到去雾图像。具体内容如下:

1 大气散射模型
Zhu等的颜色衰减先验去雾算法利用计算机视觉和图形图像领域广泛采用的大气散射模型, 其数学表达式为
在这里插入图片描述
其中x为图像中像素点的位置, I为有雾图像, J为无雾图像, A为大气光强度, t为介质传输透射率, d为图像景深, β为大气散射系数。在大气均匀分布的条件下, 大气散射系数β被认为是恒定值[12]。

2 颜色衰减先验
Zhu等基于对有雾图像统计特性的研究, 通过大量实验发现了颜色衰减先验[9]。一幅有雾图像中, 任意像素点处雾的浓度与该像素亮度和饱和度之差成正相关, 表达式为
在这里插入图片描述
其中c (x) 为像素点处的雾浓度, v (x) 为像素亮度, s (x) 为像素饱和度。

3 图像景深复原
由于通常图像中雾的浓度与景深变化成正相关, 结合颜色衰减先验得之任意像素点处的景深与该像素亮度和饱和度之差成正相关, 因此建立如下线性模型
在这里插入图片描述
其中d (x) 为像素点处的景深, v (x) 为像素亮度, s (x) 为像素饱和度, θ0、θ1和θ2为未知线性系数, ε (x) 为用期望值为0, 方差为σ2的高斯密度函数表示的随机误差。采用有监督学习的方式得到θ0=0.121779, θ1=0.959710, θ2=-0.780245, σ=0.041337, 并利用最小滤波和引导滤波[13]对图像景深进行优化, 确定d (x) 的取值范围为[0.1, 0.9]。

4 去雾图像复原
为避免去雾图像出现噪声, 确定t (x) 的取值范围为[0.1, 0.9]。去雾图像J的表达式为
在这里插入图片描述
其中大气光强度A的估计方法为:找出前0.1%景深值大的像素对应有雾图像I的像素, 取亮度最大的像素作为A。大气散射系数β取为恒定值1.0。

5 颜色衰减先验去雾算法的不足
在Zhu等的颜色衰减先验去雾算法中, 大气散射系数β取为恒定值1.0。实际情况大气分布是不均匀的, 大气散射系数β不能被认为是恒定值。大气散射系数β取为恒定值1.0存在比实际情况偏大或偏小的问题。当偏小时导致介质传输透射率偏大, 根据公式 (5) 得到去雾图像近似于有雾图像, 去雾效果不好。当偏大时导致介质传输透射率偏小, 易导致去雾图像出现颜色失真现象。基于上述考虑, 提出动态大气散射系数的颜色衰减先验去雾算法。

⛄二、部分源代码

close all;clear;clc;
pic=imread(‘test.png’);%pic=imresize(pic,0.2);
[h_,w_,s_]=size(pic);
pic=double(pic)/255;
pic_gray=rgb2gray(pic);
tic
pic_hsv=rgb2hsv(pic);
V=max(max(pic(:,:,1),pic(:,:,2)),pic(:,:,3));%亮通道
d=0.121779+0.959710V-0.780245pic_hsv(:,:,2)+0.041337;
se=strel(‘disk’,15);
d=imerode(d,se);%深度图进行平滑滤波

r=30;
eps=0.01;
d=guidedfilter(pic_gray,d, r, eps);%引导滤波

blocksize=15;
RGB_MIN=min(min(pic(:,:,1),pic(:,:,2)),pic(:,:,3));%像素暗通道
RGB_gray=rgb2gray(pic);
se=strel(‘square’,blocksize);
dark_I=imerode( RGB_MIN,se);
% figure,imshow(dark_I);

% U=reshape(dark_I,1,h_*w_);
% U1=sort(U,2,‘descend’);
% med=round(h_*w_*0.001);
% U2=U1(1:med);
% U3=unique(U2);
% [s1,s2]=size(U3);
% km=1;
% for i=1:s2
% [x y]=find(dark_I==U3(i));
% [l1,l2]=size(x);
% for i=1:l1
% x1=x(i,1);
% y1=y(i,1);
% km=km+1;
% U4(km)=RGB_gray(x1,y1);
% end
% end
% A_channel=max(U4(😃);
%A_channel=airlight_he(pic,15);
A_channel=zeros(3,1);
A_channel(1)=est_a(d,pic(:,:,1),h_,w_);
A_channel(2)=est_a(d,pic(:,:,1),h_,w_);
A_channel(3)=est_a(d,pic(:,:,1),h_,w_);

% figure,imshow(d);colormap HOT;
t=exp(-0.95*d);t=min(max(t,0.1),0.9);figure,imshow(d);colormap HOT;
%imwrite(t,‘C:\Users\Tiger\Desktop\所有代码和文章整理\雾图集\dimage.bmp’)
J(:,:,1) = double((pic(:,:,1) - (1-t)*A_channel(1))./t)/A_channel(1);
J(:,:,2) = double((pic(:,:,2) - (1-t)*A_channel(2))./t)/A_channel(2);
J(:,:,3) = double((pic(:,:,3) - (1-t)*A_channel(3))./t)/A_channel(3);
toc
figure,subplot(211),imshow(pic);title(‘原图’)

subplot(212),imshow(J),title(‘去雾图’)
% imwrite(J,‘C:\Users\Tiger\Desktop\所有代码和文章整理\雾图集\resimage.bmp’)

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]胡雪薇,李其申.动态大气散射系数的颜色衰减先验图像去雾[J].电视技术. 2017,41(Z2)

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

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

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

相关文章

大开眼界的4款电脑软件,其中3款大小不到10M,功能却逆天

闲话少说,直上狠货,大开眼界。 1、Ocam录屏 Ocam是一款完全免费的录屏软件,大小仅有9M,功能却非常强大,界面简洁,操作简单一键录制,4k分辨率视频录制时,即便办公电脑配置不高&#x…

我国海洋油气行业勘探力度加大 整体探明程度有待提高 未来储量产量增长潜力仍很大

1、我国海洋油气资源储量情况 根据观研报告网发布的《2022年中国海洋油气市场分析报告-市场发展监测与发展动向预测》显示,根据全国第四次油气调查数据,海洋石油剩余技术可采储量占中国石油剩余技术可采储量的34%;海洋天然气剩余技术可采储量…

二叉搜索树详解

1.二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有的节点的值都大于根节点…

执行pip安装时,如何解决:Unknown or unsupported command install

目录 解决方案1:卸载LoadRunner——显然是不可行的 解决方案2:全路径执行pip 解决方案3:镜像 解决方案4:镜像更新 遇到这种情况一般都是因为已经安装了LoadRunner导致电脑上同时安装了多个pip,执行时,系…

LabVIEW如何以编程方式获取克隆VI名称?

LabVIEW如何以编程方式获取克隆VI名称?如何使用克隆VI名称关闭特定的克隆VI? 调用正在运行的VI服务器引用。 放置一个调用节点,然后选择“打开”前面板>>。 使用属性节点检查VI是否为克隆VI>>。 使用属性节点>>克隆名称…

Java安全--CC2

cc2其实都是建立在我们写的基础之上,只不过路走的不一样罢了,我们可以看一下CC2是怎么走的,我用颜色标出了: 其实就是之前都学过的几个类。 前面代码都和CC4一样 public class CC2 {public static void main(String[] args) thro…

2023春招面试题:Java并发相关知识

1.基础知识回顾 1.1 什么是多线程? 在没有线程的年代,在同一个进程中,程序的处理流程都是顺序的,下一个流程的开始必须等待上 一个流程的结束,如果其中某一个流程非常耗时,那么会影响整个流程的处理时间…

学习.NET MAUI Blazor(一)、Blazor是个啥?

先把Blazor放一边,先来看看目前Web开发的技术栈。 注:上图只是为了说明问题,没有任何语言歧视! 这是目前最常用的前后端分离开发模式,这个开发模式需要配备前端工程师和后端工程师。当然了,全栈工程师另当…

GNN Algorithms(2): GCN, Graph Convolutional Network

GCN Algorithm Essence: 传统的卷积运算无法在graph上进行运算,所有借由傅里叶变换Fourier Transformation实现在graph上的卷积运算,得到graph convolution,退出GCN(graph convolutional network)。 Background graph embedding&#xff1…

mysql优化——mycat数据库中间件

文章目录 目录 文章目录 前言 一、mycat原理 二、mycat完成读写分离 2.1搭建MySQL的主从模式 2.2实现读写分离 三、mycat垂直分库 四、水平分表 五、水平拆分表的连表操作 六、全局表 总结 前言 Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以…

CUDA入门和网络加速学习(三)

0. 简介 最近作者希望系统性的去学习一下CUDA加速的相关知识,正好看到深蓝学院有这一门课程。所以这里作者以此课程来作为主线来进行记录分享,方便能给CUDA网络加速学习的萌新们去提供一定的帮助。 1. CUDA中的Stream和Event 1.1 CUDA stream CUDA s…

蓝桥杯C/C++百校真题赛(1期)Day4题解(左孩子右兄弟、作物杂交)

Q1 左孩子右兄弟 f[u]表示以u为根转化而成的二叉树(以下简称二叉树)的最大高度f[u]max(f[ji])cnt[u]−11,ji是u的所有儿子,cnt[u]表示原树中u的儿子个数。因为以u为根的二叉树肯定由u的一个儿子为根的二叉树构成来作为他的左半部假设f[jt]是最大的那个,那…

A Joint Neural Model for Information Extraction with Global Features论文解读

A Joint Neural Model for Information Extraction with Global Features code:BLENDER Lab | Software (illinois.edu)或者GerlinGreen/OneIE: Forked from OneIE: A Joint Neural Model for Information Extraction with Global Features (github.com) paper&…

超宽带UWB无线技术,厘米级测距定位,精准位置确定方案应用

UWB标签和锚点之间的双向测距测量它们的相对距离,这种方法用于例如安全访问应用程序,其中将根据标签设备的接近程度授予访问权限。 UWB不能被简单的中继攻击欺骗,因为它的距离测量不是基于信号强度,而是基于时间,中继…

git初识(四)

rebase(变基) 它能让git提交记录简洁 多个记录整合成一个记录 git rebase -i HEAD~3从最新记录开始依次找3条记录进行合并 git rebase -i 版本号从该版本号开始一直合并到最新记录 在做记录合并时,建议不要和已push到仓库的记录 beyond compare 在git的使用过程…

我国盆栽蔬菜行业发展势头向好 未来市场需求将保持持续攀升态势

盆栽蔬菜是指在花盆或其他容器内种植的蔬菜,供人观赏和采摘食用。盆栽蔬菜分为观果类蔬菜、彩色蔬菜、绿叶保健蔬菜、根茎类蔬菜等几类。其中观果类蔬菜包括彩色甜椒、矮生番茄、樱桃番茄、硬果番茄、观赏茄子、小型辣椒、袖珍西瓜及各种南瓜、甜瓜、西葫芦、黄秋葵…

Python 为什么如此设计?

大概两年半前,我萌生了要创作一个新的系列文章的想法,也就是“Python为什么”,试图对 Python 的语法及特性提出“为什么”式的问题,以此加深对它的理解,探寻使用技巧、发展演变、设计哲学等话题。 一直以来&#xff0…

智芯传感微差压气体压力传感器成功入围第三届“SIA感知领航优秀项目征集”年度杰出产品及技术成长型企业组

近日,由中国传感器与物联网产业联盟开展的第三届“SIA感知领航优秀项目征集”结果正式出炉,北京智芯传感科技有限公司(以下简称“智芯传感”)作为国内领先的MEMS传感器厂商,凭借旗下产品“微差压气体压力传感器”的卓越…

uniapp的生命周期

目录 一、应用生命周期 只能在 App.vue 里执行 1、onLaunch 2、onShow 3、onHide 二、页面生命周期 1、onLoad 监听页面加载 2、onReady 3、onShow 监听页面显示 4、onHide 监听页面隐藏 5、onUnload 监听页面卸载 三、组件生命周期 1、beforeCreate 2、…

Java培训Mycat安装启动

一、 安装启动 1、安装解压 解压缩文件拷贝到linux下 /usr/local/ 2、配置文件介绍 schema.xml 定义逻辑库&#xff0c;表、分片节点等内容 rule.xml 定义分片规则 server.xml 定义用户以及系统相关变量&#xff0c;如端口等 3、 配置文件修改 <?xml version”1.0…