matlab求图像暗通道图像,基于暗通道先验条件图像去雾算法
基于暗通道先验条件图像去雾算法
香港大学何凯明博士于2009发表了一篇论文《Single Image Haze Removal Using Dark Channel Prior》。在文章中,何凯明博士提出了一种简单而有效的图像先验暗通道消除单输入图像雾的算法。暗通道先验是一种无雾室外图像的统计。这是基于一个关键的观察——大多数无雾室外图像的局部区域包含一些像素,这些像素在至少一个颜色通道(R,G,B)中的强度非常低。利用这一先验模型,可以直接估计图像中薄雾的厚度,并恢复高质量的无薄雾图像。各种室外雾霾图像的结果表明了该方法的有效性。此外,作为除雾的副产物,还可以获得高质量的深度图。
图1使用单个图像去除薄雾。
如图1所示,(a)为输入雾度图像,(b)为除雾后的图像,(c)深度图。
暗通道先验图像去雾计算流程:
图2 暗通道先验图像去雾计算过程
1 暗通道图像
暗通道先验是基于以下对无雾室外图像的观察:在大多数非天空斑块中,至少有一个颜色通道在某些像素处的强度非常低。换句话说,这样一个窗口的最小强度值应该很低。形式上,对于图像j,定义:
其中jc是j的颜色通道,Ω(x)是以x为中心的一个局部窗口。观察表明,除了天空区域,jdark的强度较低,如果j是无雾室外图像,则趋向于零(jdark__>0)。称jdark为j的暗通道,上面的统计观测或知识为暗通道先验。
2 透射率图像
透射率公式推导过程在此不再赘述,请参看《Single Image Haze Removal Using Dark Channel Prior》。
实际上,即使在晴朗的日子里,大气也不是绝对没有任何粒子的。所以,当我们看远处的物体时,雾仍然存在。此外,雾的存在是一个基本线索或人类感知深度。这种现象叫做空中透视。如果我们彻底消除图像中的雾,图像可能会显得不自然,深度感也可能会消失。所以可以选择通过在方程中引入一个常数参数ω(0
其中t(x)为透射率,ω(0
3 带雾图像去雾
图3 去雾效果
如图3所示,(a)为输入雾化图像,(b)为透射率图,(c)为Soft Matting后的精细透射图(d)为最终无雾图像。
典型的t0值为0.1,由于场景的亮度通常不如大气光的亮度,所以去雾后的图像看起来很暗淡。因此,增加了J(X)的曝光以达到最佳效果。如图3(d)是最后恢复的无雾图像。
图4除雾效果
如图4所示,顶部:输入模糊图像。中间:恢复无雾图像。底部:深度图。顶部行图像中的红色矩形指示的地方为自动获取大气光强的位置。
4 matlab基于暗通道先验实现图像去雾
图5 实验图1
图6 实验图2
图7 实验图3
Matlab 源码:
clearall
closeall
clc
w0=0.85;%0.65 乘积因子用来保留一些雾,1时完全去雾
t0=0.1;
I=imread('test1.jpg');
Ir = I(:,:,1);
[h,w,s]=size(I);
min_I=zeros(h,w);
dark_I = zeros(h,w);
%下面取得暗影通道图像
fori=1:h
forj=1:w
dark_I(i,j)=min(I(i,j,:));
end
end
dark_I = uint8(dark_I);
img_dark = ordfilt2(dark_I,1,ones(5,5));
Max_dark_channel=double(max(max(img_dark)))%天空亮度
dark_channel=double(img_dark);
t1=1-w0*(dark_channel/Max_dark_channel);%取得透谢分布率图
t2=max(t1,t0);
T=uint8(t1*255);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I1=double(I);
J(:,:,1) = uint8((I1(:,:,1) - (1-t2)*Max_dark_channel)./t2);
J(:,:,2) = uint8((I1(:,:,2) - (1-t2)*Max_dark_channel)./t2);
J(:,:,3) =uint8((I1(:,:,3) - (1-t2)*Max_dark_channel)./t2);
figure,
set(gcf,'outerposition',get(0,'screensize'));
subplot(221),imshow(I),title('原始图像');
subplot(222),imshow(J),title('去雾后的图像');
subplot(223),imshow(img_dark),title('dark channnel的图形');
subplot(224),imshow(T),title('透射率t的图形');
imwrite(J,'wu1.jpg');
图8 实验结果1
图9 实验结果2
图10 实验结果3
公众号回复"defog"获取何凯明博士论文,matlab和opencv源码。
图像处理往期
更多精彩推荐,请关注我们
万水千山总是情,点个 “好看” 行不行!!!
matlab求图像暗通道图像,基于暗通道先验条件图像去雾算法相关推荐
- A Fast Single Image Haze Removal Algorithm Using Color Attenuation Prior——基于颜色衰减先验单图片去雾算法原理...
本人最近在研究去雾方面的最新文献(2016年初),当然去雾方面的经典论文是何凯明博士的<Single Image Haze Removal Using Dark Channel Prior> ...
- YUV图像实时去雾算法的优化与改进
YUV图像实时去雾算法的优化与改进 2016-03-02 21:04 摘要:针对已有的基于DSP的实时去雾算法出现的问题进行优化和改进.在降采样倍数过大时,去雾效果会出现一些副作用,包括纹理细节丢失. ...
- 综述:视频和图像去雾算法以及相关的图像恢复和增强研究
综述:视频和图像去雾算法以及相关的图像恢复和增强研究 翻译自IEEE的一篇文章<Review of Video and Image Defogging Algorithms and Relate ...
- 基于MATLAB改进暗通道先验的图像去雾算法
基于MATLAB改进暗通道先验的图像去雾算法 摘要:暗通道先验去雾算法求得的的透射率比较精细,去雾效果优于大多数去雾算法.然而在暗通道求取过程中,最小值滤波的处理会使得暗色向外扩张,导致透射率扩张变大 ...
- 基于暗通道优先的单幅图像去雾算法(Matlab)
基于暗通道优先的单幅图像去雾算法(Matlab) 每一幅图像的RGB三个颜色通道中,总有一个通道的灰度值很低,几乎趋向于0.基于这个几乎可以视作是定理的先验知识,作者提出暗通道先验的去雾算法. 首 ...
- 图像去雾算法(二)基于暗通道先验算法学习笔记
在http://write.blog.csdn.net/postedit/78301999中介绍了图像去雾的相关研究方法,发现目前为止在图像去雾方面,何凯明博士基于暗通道先验的算法具有很好的效果,关于 ...
- c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十五 |一种基于亮度均衡的图像阈值分割技术...
前言 对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果.为了解决这个问题,论文<一种基于亮度均衡的图像阈值分割技术>提出了一种实用而简便的图像分割方法.该方法针对图像中不同亮度 ...
- 基于暗通道先验的单幅图像去雾算法小结
在开始之前,先看一组去雾的效果图. 1. 关于去雾的意义及算法 去雾在视频监控.航拍.遥感.自动/辅助驾驶等需要在室外复杂.恶劣天气下运行的视觉系统,都可能需要运用到这一技术. 目前去雾算法主要有两个 ...
- 暗通道优先的图像去雾算法(上)
FROM:http://blog.csdn.net/baimafujinji/article/details/27206237 11.1 暗通道优先的图像去雾算法 图像增强与图像修复二者之间有一定交 ...
最新文章
- C#线程间操作无效: 从不是创建控件 XX 的线程访问它
- 北漂经历 | 我在北京这几年
- spring中的单例工厂SingletonBeanRegistry设计与实现
- 2020 阿里云原生实战峰会开幕 云原生落地的正确姿势
- HDU 4631 Sad Love Story 平面内最近点对
- Andriod开发前准备
- ubuntu 18.04 设置中文输入法
- SQL中的「规则」 constraint 与「约束」 rule 的区别。
- 中文验证码识别 java_opencv Tesseract 验证码识别 文字识别
- ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。
- roller源码分析
- java软件开发是什么_java常用的开发软件是什么
- FIT2CLOUD飞致云荣膺“2021年度OSCHINA优秀开源技术团队”奖项
- Modem2G/3G/4G/5G:吐血总结:30分钟掌握高通modem RFFE driver(射频驱动)配置方法(一)
- 计算机日期的格式怎么写,在excel表格中怎么把日期格式改成文本格式(excle表格中改变日期格式)...
- 华为me909s与MT2503拨号上网流程总结
- Retrofit的封装
- c语言多个自我介绍编码,代码自我介绍.doc
- Channel Attention 通道注意力
- 阿里云的DMZ区网络
热门文章
- 汽车安全测试工具集 Vehicle-Security-Toolkit
- Pycharm配置(三)
- 基于Python,dlib实现人脸关键点检测
- std::any用法示例
- 计算机技术在心理学研究应用,面向心理学领域的计算机技术的应用
- 老人带小孩,我们是否要给钱的一些思考
- 对战平台有哪些和到底哪个好?
- SharePoint网站搜索规则(Search Query )
- 数据结构-高度为h的m叉树至多结点/n个结点的m叉树的最小高度(公式推导)
- 计算机意外地重新启动或遇到错误。Windows安装无法继续。若要安装Windows,请单击“确定”重新启动计算机,然后重新启动安装