一、简介
基于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
文中部分源码仅供参考,若需要全部代码可以私信(有偿)