本论文是清华大学写的基于均值滤波的去雾算法。
% 基于单幅图像的快速去雾算法 fileName = 'D:\\image\\haze image\\He\\canon3.bmp'; % step1: 输入:有雾图像H(x) H = imread(fileName); H = double(H) / 255.0; imtool(H); [h, w] = size(H); sv = ceil(max(h, w) / 50); if mod(sv, 2) == 0 sv = sv + 1; end % step2: 求取H(x)三通道的最小值M(x) M = min(H, [], 3); % step3: 对M(x)进行均值滤波,得到Mave(x) f = fspecial('average', sv); Mave = imfilter(M, f, 'symmetric'); % step4: 求取M(x)中所有元素的均值Mav [h, w] = size(Mave); n = 0.0; for i=1:h for j=1:w n = n + Mave(i, j); end end Mav = n / (h * w); % step5: 利用Mave(x)求出L(x) e = 2.0; % e是一个用来调节的参数,当e值越大时,去雾后的图像就越暗,去雾效果就越明显,e值越小时,图像偏白,有明显的雾气。 L = min(min(e*Mav, 0.9)*Mave, M); % step6: 利用Mave(x)和H(x),求出A temp = max(H, [], 3); A = 0.5 * (max(temp(:)) + max(Mave(:))) * [1; 1; 1]; % step7: 去雾后图像F(x) [h, w, c] = size(H); F = zeros(h, w, c); for i=1:h for j=1:w for k=1:c F(i,j,k) = (H(i,j,k) - L(i,j)) / (1 - L(i,j)/A(k)); end end end imtool(F);