【图像去雾】基于matlab颜色衰减先验图像去雾【含Matlab源码 2036期】
一、颜色衰减先验去雾算法简介
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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/126324040
- 点赞
- 收藏
- 关注作者
评论(0)