close all;
clear;
clc;
tic;
img_name = 'T4.BMP';
img = double(imread(img_name))/255; % 加载图像
figure;
imshow(img);
title('原图像');
[h,w,c] = size(img);
Dark_img = ones(h,w);
win_size = 7;
for j=1+win_size:w-win_size
for i=1+win_size:h-win_size
m_min = min(img(i,j,:));
for n=j-win_size:j+win_size
for m=i-win_size:i+win_size
if(Dark_img(m,n)>m_min)
Dark_img(m,n) = m_min;
end
end
end
end
end
figure;
imshow(Dark_img);
title('暗通道图像');
Th = 0.99*max(Dark_img(:));
NUM = 0;
AR = 0; AG = 0; AB = 0;
for i=1:h
for j=1:w
if Dark_img(i,j) > Th
NUM = NUM + 1;
AR = AR + img(i,j,1);
AG = AG + img(i,j,2);
AB = AB + img(i,j,3);
end
end
end
AR = AR/NUM;
AG = AG/NUM;
AB = AB/NUM;
factor = 0.95;
T = 1 - factor*Dark_img*3/(AR+AG+AB);
figure;
imshow(T);
title('折射率图');
J = zeros(h,w,3);
for i=1:h
for j=1:w
if T(i,j) < 0.1
T(i,j) = 0.1;
end
end
end
J(:,:,1) = (img(:,:,1) - AR)./T + AR;
J(:,:,2) = (img(:,:,2) - AG)./T + AG;
J(:,:,3) = (img(:,:,3) - AB)./T + AB;
figure;
imshow(J);
title('暗通道先验复原图');
r = 24; eps = 10^-6;
Filtered = Guided_Image_Filter(rgb2gray(img), T , r, eps);
T = Filtered;
figure;
imshow(T);
title('引导滤波器折射率图');
J = zeros(h,w,3);
for i=1:h
for j=1:w
if T(i,j) < 0.1
T(i,j) = 0.1;
end
end
end
J(:,:,1) = (img(:,:,1) - AR)./T + AR;
J(:,:,2) = (img(:,:,2) - AG)./T + AG;
J(:,:,3) = (img(:,:,3) - AB)./T + AB;
figure;
imshow(J);
title('引导滤波器复原图');
toc;