【问题标题】:svg feGaussianBlur: correlation between stdDeviation and sizesvg feGaussianBlur:stdDeviation 和大小之间的相关性
【发布时间】:2023-03-18 10:12:01
【问题描述】:

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

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

【问题讨论】:

    标签: svg blur inkscape


    【解决方案1】:

    来自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 和是的。

    即使只为“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'.*
    

    【讨论】:

    • 所以 2.4 是 3*sqrt(2*pi)/4 + 0.5 ≈ 2.37997 的近似值,对吧?
    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2016-05-10
    • 2013-01-09
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多