【图像去雾】基于matlab暗通道先验的图像去雾算法【源码20期】

一、简介

基于matlab暗通道先验的图像去雾算法,基于暗通道先验的图像去雾算法是一种有效的图像处理技术,用于消除图像中的雾霾效果,提高图像的清晰度和可视性。这种算法主要基于以下观察结果:对于非雾图像中的任意一对像素点,它们在暗通道中的最小值应该趋近于零。这是因为在非雾图像中,相邻像素点之间的最小值通常会很小,而大气散射对图像的影响会使得暗通道中的最小值变得更小。

二、部分源码

function dehaze
J=imread('test images\haze1.jpg');
J=double(J);%将unit8类型转换为double类型,进行计算
J=J./255;
dark=darkChannel(J);
%figure(2);imshow(dark);
%求大气光
[m1,n1,~]=size(J);
imsize=m1*n1;
numpx=floor(imsize/1000);

JDarkVec=reshape(dark,imsize,1);
ImVec=reshape(J,imsize,3);

[JDarkVec,indices]=sort(JDarkVec);
indices=indices(imsize-numpx+1:end);

atmSum=zeros(1,3);
for ind=1:numpx
    atmSum=atmSum+ImVec(indices(ind),:);
end
atmospheric=atmSum/numpx;

%求透射率
w=0.95;
im=zeros(size(J));
for ind=1:3
    im(:,:,ind)=J(:,:,ind)./atmospheric(ind);
end
dark_2=darkChannel(im);
t=1-w*dark_2;

r = 60;
eps = 10^-6;
%导向滤波
t_filter=guidedfilter_color(J, t, r, eps);
%figure(3);imshow(t_filter);

t0=0.1;
original= zeros(m1,n1,3);
for i=1:1:m1
    for j=1:1:n1
        for k=1:1:3
        original(i,j,k) = (J(i,j,k)-atmospheric(k))./ max(t_filter(i,j),t0) + atmospheric(k);
        end
    end
end

figure;imshow(J);title('原始图像');
figure;imshow(original),title('去雾后图像');
figure;imshow(dark),title('暗通道图像');
figure;imshow(t_filter),title('透射率图');
saveas(gcf,'haze5.jpg');
end

三、运行结果

四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信(有偿)

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值