基于引导滤波的暗通道优先去雾算法

不多说,是何凯明的去雾算法,直接上代码。
dehaze.m

function dehaze()
I=double(imread('WM.bmp')) / 255;
w0 = 0.95 ;%去雾系数选0.95
[h,w,c]=size(I) ;
for i= 1 : h
    for j= 1 : w
        dark_channel(i,j)=min(I(i,j,:)) ;
    end
end
%求到暗通道,并对它进行最小值滤波
dark_channel=ordfilt2(dark_channel,1,ones(9,9),'symmetric');
%求大气亮度值A
A = max(max(dark_channel));
[a,b]=find(dark_channel == A);
a=a(1);
b=b(1);
A=mean(I(a,b,:));
%求初始透射率
transmission=1 - w0 * dark_channel ./ A;
guided_image=I(:,:,1);
%引导滤波Matlab R2014a能直接调用了,对初始透射率进行引导滤波
transmission2=imguidedfilter(transmission,guided_image,'NeighborhoodSize',[30,30]);
t0=0.1;
t=max(transmission2,t0);
for l = 1:c
    dehaze(:,:,l)=(I(:,:,l)-A)./t + A;
end
imshow([I,dehaze]);
end

效果如图:
这里写图片描述

基于导向滤波暗通道去雾算法是一种常用的图像去方法,它能够有效地消除图像中的霾、提高图像的清晰度和对比度。 该算法的核心理念是,影响图像霾的主要因素是图像的深度值和的密度。因此,通过计算图像在一些已知区域的最小值,可以得到图像的暗通道信息,根据这个信息就可以估计出图像中的的密度。接着,将这些估计值作为导向滤波器的引导图像,对原图像进行滤波,即可去除图像中的。 在MATLAB中,实现基于导向滤波暗通道去雾算法,主要需要进行以下步骤: 1. 读入图像。可通过imread函数读入图像文件,并使用im2double将图像转换成双精度浮点型。 2. 计算暗通道。使用min滤波器计算每个像素在整张图像中的最小值,得到暗通道信息。 3. 估计大气光。利用暗通道信息可以估计出大气光的值,即图像中最亮的区域的像素值。 4. 估计的密度。根据大气光的值,通过公式来估计图像中每个像素处的的密度。 5. 计算透射率。利用估计出的的密度和大气光值,可以计算出每个像素处的透射率。 6. 使用导向滤波器进行滤波。将估计出的透射率作为引导图像,利用MATLAB内置函数进行导向滤波操作。 7. 输出处理后的图像。将滤波后的结果进行输出保存,或直接显示在屏幕上。 总的来说,基于导向滤波暗通道去雾算法是一种有效的图像处理方法,它能够较为完美地去除图像中的霾,并提高图像的清晰度和对比度,具有很高的工程应用价值。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔法战胜魔法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值