给定如下图所示的图像,我想对其进行模糊处理,以使原始黑色像素的值不会发生变化。模糊效果应该有一个漂亮的 S 曲线,渐变为白色。
如果我对此图像应用 15px 高斯模糊,我会得到:
它淡出得很好,但是如果我在原来的黑色方块所在的位置放置一个红色方块,你可以看到实际上模糊已经暴露了它的某些部分:
现在我最近发现15px高斯模糊意味着1个标准偏差是15px,受影响像素的实际全半径更接近3/4√2π*σ。从技术上讲是无限的,但据我所知,大多数程序都将其限制于此。因此,对于 15 像素的模糊,如果我将框扩大 29 像素,然后将高斯模糊扩大 15 像素,模糊的范围应该刚好回到原来的框,使其不受干扰,对吗?
那个看起来相当不错,但是如果我再把我的红盒子放回去,我们可以看到仍然有区别:
红色看不出来,但我仍然可以看到一个硬轮廓。
有没有比高斯更适合的模糊算法?我想象的是我们找到盒子/形状边缘的法线,然后沿着该法线绘制一条 S 曲线。如果我有矢量图像,这可能会更容易,但我有位图,所以我不知道最接近的等价物是什么。
问题在于高斯模糊的设计是各向同性的,这意味着它在所有方向上均匀地扩散每个像素的强度。
您应该尝试生成黑色区域的二进制掩模,计算其距离变换,然后应用缩放曲线(指数衰减)将距离值映射到强度值。
如果我正确理解您想要实现的目标,阅读this可能会帮助您实现。