%guidefilter.m guide滤波函数
%建立函数q,q为经过指导性滤波处理之后的图像
function q=guidedfilter(I,p,r,eps)
%I为经过改进的Welsh算法得到的图像,同时复制与I相同的一幅图像P
[hei,wid] = size(I);%读取输入图像的尺寸 其中 hei为高 wid为宽
N = boxfilter(ones(hei,wid),r); %产生一个hei*wid的值全为1的矩阵 只有一个矩阵,此时N是一维的
%在主函数中,将得到的三维的上色图,分解为R G B,分别通过对R G B进行指导性滤波最后得到一个综合的结果
mean_I = boxfilter(I,r)./N;
mean_p = boxfilter(p,r)./N;
mean_Ip = boxfilter(I.*p,r)./N;
%求得每一个像素点的协方差
cov_Ip = mean_Ip - mean_I.*mean_p;%公式5中的分子
mean_II = boxfilter(I.*I,r)./N;
var_I = mean_II - mean_I.*mean_I;%公式5中的分母第一项
a = cov_Ip./(var_I + eps);%Eqn. (5) in the paper;
b = mean_p - a.* mean_I;%Eqn. (6) in the paper;
% mean_a = uint8(boxfilter(a,r)./N);
% mean_b = uint8(boxfilter(b,r)./N);
mean_a = boxfilter(a,r)./N;
mean_b = boxfilter(b,r)./N;
%q为经过指导性滤波处理后的结果图
q = mean_a.*I + mean_b;%Eqn. (8) in the paper;
end