【发布时间】:2019-03-04 12:08:08
【问题描述】:
我从 Wikipedia 阅读了双边过滤,我理解了其中的所有部分(我认为)。
所以我试图了解 Matlab 中的实现,并从here 获取代码。我不明白以下部分:
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(其中 @987654328 @ 是内核的窗口大小)。但我不明白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);
所以基本上,我不明白高斯距离权重是如何计算的。
【问题讨论】:
-
我到底是什么? (在 H 公式中) i 用于 w 哪里?
-
这只是计算本地邻域的空间权重。我认为它已被所有社区重复使用,因此 i 和 j 不是必需的。
-
@PabloJeken I 是原始图像,(i,j) 是我们要过滤的像素,(k,l) 是相邻像素
-
你所说的对我来说实际上是有道理的,但我不太明白什么是空间权重以及它们的用途..任何指针? @CrisLuengo
标签: matlab image-processing filtering