2016-04-21 112 views
1

当我在Inkscape中模糊一个对象,例如10%时,它会得到一个带有stdDeviation为10%* size/2的feGaussionBlur的过滤器。但是,过滤器的大小的124%(这实际上是那么大,Inkscape并没有增加一点,只是为了安全起见)。svg feGaussianBlur:stdDeviation和大小之间的相关性

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

回答

1

the SVG 1.1 spec:

该过滤器原语执行输入图像上的高斯模糊。 (x,y)= H(x)I(y) 其中, H(x)= exp(-x2 /(2s2))/ sqrt( 2 * PI S2) 和 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 =地板(S * 3 * SQRT(2 * PI)/ 4 + 0.5)

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

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

所以2.4是3 * sqrt(2 * pi)/ 4 + 0.5≈2.37997的近似值,对吗? – Mat2095

+0

是的,这是数学 –