[论文复现]何恺明博士CVPR2009去雾算法(2)

一、前言

终于,简单实现了何博士论文去雾算法的基础部分。由于CVPR2009论文中的优化方法比较麻烦,速度比较慢,何博士于2010ECCV补充了一篇Guided Image Filtering优化求解速度,此处后面的优化我直接调用了何博士的函数。

主要参考文献:

[1] He K, Jian S, Tang X. Single image haze removal using dark channel prior[C]// IEEE Conference on Computer Vision & Pattern Recognition. 2009.

[2] He K, Jian S, Tang X. Guided image filtering[C]// European Conference on Computer Vision. 2010.

[3] 论文原文及相关资料下载 http://kaiminghe.com/

关键词:暗通道先验、去雾、导向滤波

二、实现

论文求解核心公式是:

现有图已知,未知量为待求图,全局大气光和未被散射光。

A全局大气光采用亮度值(hsv-v)最高的前0.1%像素的rgb值去分别估计三通道的全局大气光

t(x)未被散射光结合暗通道先验公式如下去估计。

因此即可求待求图J(x),为了控制误差,对t(x)做一个最小值约束,计算公式如下:

三、代码

mydehaze.m

%%
% 未被散射系数t估计
% 2018年12月29日
% 使用方法:
% Yuquan Campus, bamboopu
% 待改进功能:

%%
% clean
close all;
clear;
clc;

%%
% 读图显示图片
a_rgb=im2double(imread(‘tiananmen1.bmp‘));
% a_rgb=im2double(imread(‘stone.jpg‘));
a_gray=rgb2gray(a_rgb);
[height,weight,scale]=size(a_rgb);
% 转hsv
a_hsv=rgb2hsv(a_rgb);
% 暗通道,min(x,[],3)取每个像素位置最小值
c_minrgb=min(a_rgb,[],3);% 先取RGB最小
radius=15;
c_dark=ordfilt2(c_minrgb,1,ones(radius,radius),‘symmetric‘);%窗口最小值滤波
% 暗通道灰度对比
imwrite(c_dark,‘c_dark.bmp‘);
fig=figure;
h1=subplot(1,2,1);
imshow(c_dark);
title(‘The dark channel image‘);
h2=subplot(1,2,2);
imshow(a_gray);
title(‘The grayscale image‘);
% 全局大气光估计(采用最高亮度值)
k_find=0.001;
k_pixel=fix(k_find*height*weight);
k_sort=sort(c_dark(:),‘descend‘);
k_threshold=k_sort(k_pixel);
a_v=a_hsv(:,:,1);
a_v(c_dark<k_threshold)=0;
% ar估计
a_rgb_max=a_rgb(:,:,1);
a_rgb_max(a_v==0)=[];
a_rgb_max=a_rgb_max(:);
ar=sum(a_rgb_max)/length(a_rgb_max);
% ag估计
a_rgb_max=a_rgb(:,:,2);
a_rgb_max(a_v==0)=[];
a_rgb_max=a_rgb_max(:);
ag=sum(a_rgb_max)/length(a_rgb_max);
% ab估计
a_rgb_max=a_rgb(:,:,3);
a_rgb_max(a_v==0)=[];
a_rgb_max=a_rgb_max(:);
ab=sum(a_rgb_max)/length(a_rgb_max);
% ar ag ab最大值修正
max_a=255/255;
if ar>max_a
    ar=max_a;
end
if ag>max_a
    ag=max_a;
end
if ab>max_a
    ab=max_a;
end
% t(x)估计
a_rgb_a=zeros(height,weight,scale);
a_rgb_a(:,:,1)=a_rgb(:,:,1)/ar;
a_rgb_a(:,:,2)=a_rgb(:,:,2)/ag;
a_rgb_a(:,:,3)=a_rgb(:,:,3)/ab;
a_rgb_a_min=min(a_rgb_a,[],3);% 先取RGB最小
w=0.95;
tx=1-w*ordfilt2(a_rgb_a_min,1,ones(radius,radius),‘symmetric‘);
imwrite(tx,‘tx.bmp‘);
% 白场过渡
t0=0.1;
tx(tx<0.1)=0.1;
%tx=guidedfilter_color(a_rgb,tx,100,0.04);
tx=guidedfilter(a_gray,tx,60,0.01);
imwrite(tx,‘tx_guided.bmp‘);
figure;imshow(tx);
% 简化版去雾图估计-rgb
dh_rgb=zeros(height,weight,scale);
dh_rgb(:,:,1)=(a_rgb(:,:,1)-ar)./tx+ar;
dh_rgb(:,:,2)=(a_rgb(:,:,2)-ag)./tx+ag;
dh_rgb(:,:,3)=(a_rgb(:,:,3)-ab)./tx+ab;
figure;
h1=subplot(1,2,1);
imshow(dh_rgb);
title(‘The dehaze image‘);
h2=subplot(1,2,2);
imshow(a_rgb);
title(‘The origin image‘);
imwrite(dh_rgb,‘dh_rgb.bmp‘);

guidedfilter.m

function q = guidedfilter(I, p, r, eps)
%   GUIDEDFILTER   O(1) time implementation of guided filter.
%
%   - guidance image: I (should be a gray-scale/single channel image)
%   - filtering input image: p (should be a gray-scale/single channel image)
%   - local window radius: r
%   - regularization parameter: eps

[hei, wid] = size(I);
N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.

mean_I = boxfilter(I, r) ./ N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip = boxfilter(I.*p, r) ./ N;
cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance of (I, p) in each local patch.

mean_II = boxfilter(I.*I, r) ./ N;
var_I = mean_II - mean_I .* mean_I;

a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
b = mean_p - a .* mean_I; % Eqn. (6) in the paper;

mean_a = boxfilter(a, r) ./ N;
mean_b = boxfilter(b, r) ./ N;

q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
end

  

四、效果

图4-1暗通道与灰度图对比

图4-2暗通道经导向滤波优化后结果

图4-3去雾效果图

图4-4优化前后去雾效果对比

五、心得

大音希声,大象无形。这篇论文关键部分的原理很简单明了,作为何博士第一篇文章,精雕细琢质量很高适合精读。论文求解模糊去雾图部分实现起来较为简单,但是优化部分编程具有一定难度。本文优化部分直接调用了官方导向滤波函数,去雾后的色调饱和度调整未添加,程序仅供参考。

原文地址:https://www.cnblogs.com/bamboopu/p/10239442.html

时间: 2024-10-01 06:09:49

[论文复现]何恺明博士CVPR2009去雾算法(2)的相关文章

何恺明经典去雾算法

何恺明经典去雾算法 一:由简至美的最佳论文(作者:何恺明  视觉计算组) [视觉机器人:个人感觉学习他的经典算法固然很重要,但是他的解决问题的思路也是非常值得我们学习的] 那是2009年4月24日的早上,我收到了一封不同寻常的email.发信人是CVPR 2009的主席们,他们说我的文章获得了CVPR 2009的最佳论文奖(Best Paper Award).我反复阅读这封邮件以确认我没有理解错误.这真是一件令人难以置信的事情. 北京灰霾照片的去雾结果 CVPR的中文名是计算机视觉与模式识别会议

暗通道优先的图像去雾算法(下)

书接上文 http://blog.csdn.net/baimafujinji/article/details/27206237 我们已经了解了暗通道图像去雾算法的基本原理,下面我们来编程实现,然后对结果再做一些讨论. 上述代码中调用了几个函数,限于篇幅这里仅给出其中的暗通道处理函数,其余函数读者可以尝试自己写写看,当然其中最关键的就是暗通道处理函数,这也是算法的核心内容. 另外,代码里我们使用了导向滤波函数,导向滤波代码来自何恺明博士,读者可以访问他的网页获得源码,已经论文的原文,链接如下: h

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果

本文完全转载:http://www.cnblogs.com/Imageshop/p/3281703.html,再次仅当学习交流使用.. <Single Image Haze Removal Using Dark Channel Prior>一文中图像去雾算法的原理.实现.效果(速度可实时) 本文算法合作联系QQ: 33184777, 非诚勿扰 邮件地址:   [email protected] 最新的效果见 :http://video.sina.com.cn/v/b/124538950-125

高级图像去雾算法的快速实现(转载)

原文:http://blog.csdn.net/laviewpbt/article/details/11555877 最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者何凯明博士,2007年清华大学毕业

暗通道优先的图像去雾算法(上)

?? 11.1  暗通道优先的图像去雾算法 图像增强与图像修复二者之间有一定交叉,尽管它们一个强调客观标准,一个强调主观标准,但毕竟最终的结果都改善了图像的质量.图像去雾就是这两种技术彼此交叉领域中最典型的代表.如果将雾霾看作是一种噪声,那么去除雾霾的标准显然是非常客观的,也就是要将图像恢复至没有雾霾下所获取的情况.但是如果将在雾霾环境下拍摄的照片就看作是一种图像本来的面貌,那么去雾显然就是人们为了改善主观视觉质量而对图像所进行的一种增强.早期图像去雾的研究并没有得到应有的重视,很多人认为它的实

避免图像去雾算法中让天空部分出现过增强的一种简易方法。

在经典的几种去雾算法中,包括何凯明的暗通道去雾.Tarel的基于中值滤波的去雾以及一些基于其他边缘保留的方法中,都有一个普遍存在的问题:即对天空部分处理的不好,天空往往会出现较大的面积的纹理及分块现象.究其主要原因,还是因为天空部位基本上是不符合暗通道去雾先验这个前决条件的.目前,针对这一问题,我搜索到的主要有以下几篇文章进行了处理: 1. 改进的基于暗原色先验的图像去雾算法 作者: 蒋建国\侯天峰\齐美彬   合肥工业大学 2011. 2.Single image dehazing Algor

纯C++去雾算法

去雾算法 前言:经过不断的改进研究,该算法终于稳定,高效的问世了! 经过研究使该算法适应大雾环境,对该算法的内存优化,能够实时的高效的运行. 一.实时视频: 二.视频文件: 三.图片文件 追梦QQ:245656042 纯C++去雾算法,布布扣,bubuko.com

MATLAB图像处理_去雾算法

使用MATLAB进行图像的去雾操作,网上一搜,这方面的东西很多,貌似已然成为研究的一个方向,大牛辈出! 这里仅仅给出一个代码,能实现图像的去雾操作,详细的看后边有没有时间,想自己研究研究. function darktest(filename) %暗影去雾算法 %filename------文件名或文件绝对路径 %用法:darktest('7.png') close all clc w0=0.65; %0.65 乘积因子用来保留一些雾,1时完全去雾 t0=0.1; I=imread(filena

图像去雾算法

题记:——首先交代一下背景,之前一直做FPGA硬件方面的东西,由于业务需要转做图像处理.由一个小白做起,从阅读冈萨雷斯开始了图像处理之路.中间也经历了很多坎坷曲折,不多说了开图. 阅读了一些图像去雾方面的论文与资料,发现大部分都是围绕“何凯明博士(香港大学)提出的暗通道先验理论做研究”,鄙人也拜读了何博士的文章,真是心悦诚服之感. 论文名称为“single image haze removal using dark channel prior” 论文中是这样解释各个参数的:I(X)就是有雾图像(