svg feGaussianBlur:stdDeviation和size之间的相关性

时间:2016-04-21 21:47:47

标签: svg blur inkscape

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

这个号码来自哪里?我的猜测是 1 , null, 1 3 , null, 2 3 , 4 , null null, 2 , null ,但是这个2.4来自哪里?

1 个答案:

答案 0 :(得分:2)

来自the SVG 1.1 spec:

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

与'是x方向的标准偏差,' t'是'stdDeviation'指定的y方向的标准偏差。

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

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

对于较大的值' (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'.*