基于高斯模糊原理的模糊图片的研究
时间:2022-05-25 00:39:01 | 来源:网络营销
时间:2022-05-25 00:39:01 来源:网络营销
通常,我们不想让对方看到图片的真实情景或者只想突出我们要表达的某一块的时候,我们就要对不想展示的部分通过图片处理给隐藏起来。一般的图像处理软件都会提供“模糊”(blur)滤镜,使图片产生模糊的效果。产生“模糊”效果的方法有很多种,但今天我要在亿企邦上跟大家分享的是一种叫做“高斯模糊”(Gaussian Blur),它将正态分布(又名“高斯分布”)用于图像处理。
高斯模糊(Gaussian Blur)是美国Adobe图像软件公司开发的一个图像处理软件:Adobe Photoshop(系列)中的一个滤镜,具体的位置在:滤镜—模糊——高斯模糊!高斯模糊的原理中,它是根据高斯曲线调节象素色值,它是有选择地模糊图像。说得直白一点,就是高斯模糊能够把某一点周围的像素色值按高斯曲线统计起来,采用数学上加权平均的计算方法得到这条曲线的色值,最后能够留下人物的轮廓,即曲线,是指当Adobe Photoshop将加权平均应用于像素时生成的钟形曲线。
一、高斯模糊的原理 本文要介绍的“高斯模糊”的算法,本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。其实所谓的“模糊”,可以理解成每一个像素都取周边像素的平均值。
上图中,2是中间点,周边点都是1。
“中间点”取“周围点”的平均值,就会变成1。在数值上,这是一种“平滑化”。在图形上,就相当于产生“模糊”效果,“中间点”失去细节。
显然,计算平均值时,取值范围越大,“模糊效果”越强烈。
上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。
接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?
如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。
二、正态分布的权重 正态分布显然是一种可取的权重分配模式。
在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。
三、高斯函数 上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。
正态分布的密度函数叫做“高斯函数”(Gaussian function)。它的一维形式是:
其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ等于0。
根据一维高斯函数,可以推导得到二维高斯函数:
有了这个函数 ,就可以计算每个点的权重了。
四、高斯模糊的方程式 高斯模糊背后的基本想法是采取加权平均,每个像素是平均周围的像素,而不是简单地以平均的所有的像素。每个像素的权重更大,如果它是接近你目前的像素就会越模糊。高斯模糊技术的简单描述如何权衡每个相邻像素。想象一下你正在模糊的像素是位于峰的驼峰下面的图片和它周围的像素正在接受更少的重量作为他们得到远。你可以考虑下面的图片是考虑到5像素之外,这意味着高斯模糊有一个“窗口”的大小10,也被称为一个内核大小。
这就是高斯方程式,通过它我们可以找到我们想要的重量是多少?根据其距离中心像素每个像素接收和像素较少受到重量。
让我们解释一下这个方程分别代表着什么:
σ(小写字母σ)——这是模糊因素,这个因素值越大,平滑的图像变得就越模糊。
e -这仅仅是欧拉数,一个常数2.71828182846
x -这是原点的距离——水平距离中心像素。
y -这是原点的距离——垂直距离中心像素。
这意味着,x和y在这个方程将零对中心像素(当前像素我们想模糊),x ^ 2 + y ^ 2增加随着我们越来越远离中心,导致较低的权重像素远。
五、权重矩阵 假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
更远的点以此类推。
为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:
这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵:
六、计算高斯模糊 有了权重矩阵,就可以计算高斯模糊的值了。
假设现有9个像素点,灰度值(0-255)如下:
每个点乘以自己的权重值:
得到
将这9个值加起来,就是中心点的高斯模糊的值。
对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。
七、计算一个高斯矩阵 如果我们想找出如何权衡邻近像素,我们要一个“窗口”或“内核大小”为3的高斯模糊。当然该中心像素(像素我们实际上是模糊)将获得最重量。允许选择一个σof 1.5我们希望我们如何模糊图像。
我们可以得到:
每个权重评估它看起来像这样:(注意:权重为中心像素是最大的)
如果你很细心的你会发现这个矩阵并不增加1。这代表一个权重,所有的重量加在一起时将不得不增加1。我们可以乘每个号码1 /金额,确保这是真的。这个矩阵的总和是0.4787147。这意味着我们需要乘矩阵的所有元素1/0.4787147以便最终增加到1。于是我们可以得到以下矩阵公式来模糊每个像素。
八、边界点的处理 如果一个点处于边界,周边没有足够的点,怎么办?
一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。
九、利用高斯核矩阵到一个图像 假如说下面图片展示的是我们的图片:(每个数字代表一个像素的颜色从0 - 255)
模糊这张照片我们需要使用我们的内核矩阵对每个像素进行模糊处理。
让我们说我们想模糊像素#25(像素的颜色是25在我们图像矩阵)。这意味着我们得到像素25和替换25平均像素。我们权衡每个相邻像素(和25本身)与我们先前创建的内核矩阵。所以它将如下:
现在我们有适当的权衡每个相邻像素,我们需要添加和替换这个新值25,然后循环这个过程和每一个像素点,你会有一个模糊的图像。