foggy_image = imread('foggy_image.jpg');
dark_channel = min(foggy_image, [], 3);
window_size = 15; % 窗口大小,可以根据图像尺寸调整
p = 0.001; % 保留最亮像素的百分比,可以根据图像特性调整
p_size = round(window_size^2 * p);
atmos_light = max(reshape(dark_channel, [], 1));
[~, indices] = sort(dark_channel(:), 'descend');
atmos_light = max(atmos_light, max(dark_channel(indices(1:p_size))));
omega = 0.95; % 透射率调整因子,可以根据图像特性调整
transmission = 1 - omega * min(foggy_image, [], 3) ./ atmos_light;
eps = 0.001; % 防止除零错误
recovered_image = zeros(size(foggy_image));
for c = 1:3
recovered_image(:,:,c) = (foggy_image(:,:,c) - atmos_light) ./ max(transmission, eps) + atmos_light;
end
imshow(recovered_image);