高斯模糊(高斯滤波) | StriveZs的博客

高斯模糊(高斯滤波)

高斯模糊/高斯滤波

通常,图像处理软件会提供模糊滤镜,使图片产生模糊效果。

figure.1

模糊的算法有很多,其中有一种叫高斯模糊(Gaussian Blur),它将正态分布用于图像处理。
文本介绍了高斯模糊的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。

高斯模糊的原理

所谓模糊,可以理解成每一个像素都取周边像素的平均值。

figure.2

上图中,2是中间点,周边点都是1.

figure.3

中间点取周围点的平均值之后,就会从2变成了1.在数值上,这是一种平滑化。在图形上,就相当于产生模糊的效果,中间点失去了细节。

figure.4

显然计算平均值时,取值范围越大,模糊效果越强烈。

figure.5

上面分别是原图、模糊半径3像素,模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度来看,就是数值越平滑。

接下来的问题是,既然每个点都要取周边像素的平均值,那么该如何分配权重呢?
如果使用简单平均,显然是不合理的,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系就越疏远。因此,加权平均更合理,距离越近的点,权重就越大,距离越远的点,权重就越小。

正态分布的权重

正态分布显然是一种可取的权重分配模式。

figure.6

在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将中心点作为原点,其他点按照其在正态曲线上的位置,分配权重就可以得到一个加权平均值。

高斯函数

上面的正态分布是一维的,但是图像都是二维的,因此我们需要二维的正态分布。

figure.7

正态分布的密度函数叫做高斯函数,下面是一维高斯函数的公式:

$ G(x)=\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}} $

其中,$ \mu $是x的均值,σ是x的方差。因为计算平均值的时候,中心店是原点,因此均值等于0。

$ G(x)=\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{x^{2}}{2\sigma^{2}}} $

根据一维高斯函数,可以推导得到二维高斯函数:

$ G(x,y)=\frac{1}{2\pi \sigma^{2}}e^{-\frac{x^{2}+y^{2}}{2\sigma^{2}}} $

有了这个函数,就可以计算每个点的权重了。

权重矩阵

假设中心点的坐标是(0,0),那么距离它最近的个点的坐标如下:

figure.8

更远的同理计算方法。

为了计算权重矩阵,需要设置σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:

figure.9

这9个点的权重总和等于0.47877147,如果只计算这9个点的加权平均,还必须让他们的之和等于1,因此上面的9个值还要分别除以0.47877147,得到最终的权重矩阵(除以0.47877147会将每个数都进行调整,保证相加为1)

计算结果:

figure.10

计算高斯模糊

我们计算得到了权重矩阵,就可以根据它来计算高斯模糊的值了。

举例:
假设有9个像素点,灰度值(0-255)如下:

figure.11

每个点乘以自己的权重值:

figure.12

计算得到:

figure.13

最后我们将这个9个值加起来,就是中心点的高斯模糊值了(加权和)。
对所有点重复这个过程,就得到了高斯模糊处理后的图像,如果原图是彩色图片,我们要对RGB三个通道分别进行高斯模糊处理。

边界点处理

如果一个点处于边界,周边没有足够的点,该怎么办?

我们可以将该边界和另一侧对应的边界进行拼接,来模拟出一个完整的矩阵。同样也可以进行对称复制来得到一个矩阵。

文章内容参考:click here 我对缺失的公式进行了补充。

StriveZs wechat
Hobby lead  creation, technology change world.