我从维基百科阅读了双边过滤,我理解所有部分(我认为)。
所以我试图理解 Matlab 中的实现,并从这里获取代码。我不明白以下部分:
function B = bfltGray(A,w,sigma_d,sigma_r)
% Pre-compute Gaussian distance weights.
[X,Y] = meshgrid(-w:w,-w:w);
G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));
我知道该meshgrid函数将为我们提供 2 个矩阵X,Y它们一起将为我提供所有可能的坐标组合,其中 x 和 y 范围从-w到w(2w+1内核的窗口大小在哪里)。但我不明白G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));完成了什么。因为对于 (i,j) 的空间权重,每个相邻像素 (k,l) 将通过类似
w(i,j,k,l) = exp(-((i-k)^2+(j-l)^2)/sigma_d^2)
在代码中,我了解如何计算高斯强度权重,因为它是一次性完成的,如下所示:
% Compute Gaussian intensity weights.
H = exp(-(I-A(i,j)).^2/(2*sigma_r^2));
而对于高斯距离权重,再次进行一些计算:
% Calculate bilateral filter response.
F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);
所以基本上,我不明白高斯距离权重是如何计算的。