svg feGaussianBlur:stdDeviation 和大小之间的相关性

svg feGaussianBlur: correlation between stdDeviation and size

当我在 Inkscape 中将一个对象模糊 10% 时,它会得到一个带有 feGaussionBlur 的滤镜,其 stdDeviation 为 10% * size / 2。
然而,过滤器的大小为 124%(它实际上有那么大,Inkscape 不会增加一点只是为了安全起见)。

这个数字是从哪里来的?我的猜测是 100% + 2.4 * (2*stdDeviation/size),但是这个 2.4 从何而来?

来自the SVG 1.1 spec:

此滤镜基元对输入图像执行高斯模糊。 高斯模糊核是归一化卷积的近似:
G(x,y) = H(x)I(y) 在哪里 H(x) = exp(-x2/ (2s2)) / sqrt(2* pis2) 和 I(y) = exp(-y2/ (2t2)) / sqrt(2 pi*t2)

其中 's' 是 x 方向的标准偏差,'t' 是 y 方向的标准偏差,由“stdDeviation”指定。

‘stdDeviation’的值可以是一个或两个数字。如果提供了两个数字,第一个数字表示沿当前坐标系的 x 轴的标准偏差值,第二个值表示 Y 中的标准偏差。如果提供一个数字,则该值将同时用于 X 和Y.

即使只为“stdDeviation”提供一个值,也可以将其实现为可分离卷积。

对于较大的 's' 值(s >= 2.0),可以使用一个近似值:三个连续的框模糊构建一个分段二次卷积核,它将高斯核近似到大约 3 %.

让 d = floor(s * 3*sqrt(2*pi)/4 + 0.5)

...如果 d 是奇数,使用三个大小为 'd' 的框模糊,以输出像素为中心。 ...如果 d 是偶数,则两个大小为 'd' 的框模糊(第一个以输出像素和左侧的像素边界为中心,第二个以输出像素之间的像素边界为中心像素和右边的一个)和一个大小为 'd+1' 的框模糊,以输出像素为中心。

Note: the approximation formula also applies correspondingly to 't'.*