高斯模糊(高斯滤波)原理以及计算过程
高斯模糊/高斯滤波
通常,图像处理软件会提供模糊滤镜,使图片产生模糊效果。
模糊的算法有很多,其中有一种叫高斯模糊(Gaussian Blur),它将正态分布用于图像处理。
文本介绍了高斯模糊的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。
高斯模糊的原理
所谓模糊,可以理解成每一个像素都取周边像素的平均值。
上图中,2是中间点,周边点都是1.
中间点取周围点的平均值之后,就会从2变成了1.在数值上,这是一种平滑化。在图形上,就相当于产生模糊的效果,中间点失去了细节。
显然计算平均值时,取值范围越大,模糊效果越强烈。
上面分别是原图、模糊半径3像素,模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度来看,就是数值越平滑。
接下来的问题是,既然每个点都要取周边像素的平均值,那么该如何分配权重呢?
如果使用简单平均,显然是不合理的,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系就越疏远。因此,加权平均更合理,距离越近的点,权重就越大,距离越远的点,权重就越小。
正态分布的权重
正态分布显然是一种可取的权重分配模式。
在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将中心点作为原点,其他点按照其在正态曲线上的位置,分配权重就可以得到一个加权平均值。
高斯函数
上面的正态分布是一维的,但是图像都是二维的,因此我们需要二维的正态分布。
正态分布的密度函数叫做高斯函数,下面是一维高斯函数的公式:
G ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 G(x)=\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}} G(x)=2πσ1e−2σ2(x−μ)2
其中, μ \mu μ 是x的均值,σ是x的方差。因为计算平均值的时候,中心店是原点,因此均值等于0。
G ( x ) = 1 2 π σ e − x 2 2 σ 2 G(x)=\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{x^{2}}{2\sigma^{2}}} G(x)=2πσ1e−2σ2x2
根据一维高斯函数,可以推导得到二维高斯函数:
G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x,y)=\frac{1}{2\pi \sigma^{2}}e^{-\frac{x^{2}+y^{2}}{2\sigma^{2}}} G(x,y)=2πσ21e−2σ2x2+y2
有了这个函数,就可以计算每个点的权重了。
权重矩阵
假设中心点的坐标是(0,0),那么距离它最近的个点的坐标如下:
更远的同理计算方法。
为了计算权重矩阵,需要设置σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:
这9个点的权重总和等于0.47877147,如果只计算这9个点的加权平均,还必须让他们的之和等于1,因此上面的9个值还要分别除以0.47877147,得到最终的权重矩阵(除以0.47877147会将每个数都进行调整,保证相加为1)
计算结果:
计算高斯模糊
我们计算得到了权重矩阵,就可以根据它来计算高斯模糊的值了。
举例:
假设有9个像素点,灰度值(0-255)如下:
每个点乘以自己的权重值:
计算得到:
最后我们将这个9个值加起来,就是中心点的高斯模糊值了(加权和)。
对所有点重复这个过程,就得到了高斯模糊处理后的图像,如果原图是彩色图片,我们要对RGB三个通道分别进行高斯模糊处理。
边界点处理
如果一个点处于边界,周边没有足够的点,该怎么办?
我们可以将该边界和另一侧对应的边界进行拼接,来模拟出一个完整的矩阵。同样也可以进行对称复制来得到一个矩阵。
文章内容参考:click here 这里我对缺失的公式进行了补充。
更多推荐
所有评论(0)