分享

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

 taotao_2016 2019-10-28

OpenCV是一个非常实用的计算机视觉库,现在它已经在诸多学科有应用,本文先暂不讲OpenCV本身,而只简单的讲解如何实现opencv中如何模糊成像,与卷积的简单介绍。

什么是高斯模糊?

模糊当然是人眼睛看不清当然就感觉模糊啦!至于高斯,可能高斯这个人是近视吧。好,模糊就讲到这为止。

当然不是这样,模糊是一种利用图像算法对源图像素色值进行重新合成的一种处理结果,而高斯模糊则是运用高斯函数(遵循数据正态分布)求出对应图像的卷积核在进行一定换算最后合成图像的一种特殊处理结果,当然其中有很多过程及概念,所以在了解高斯模糊成像的过程前,我们要先了解一下什么是卷积核。

卷积核

一看非常高大上的名字,但是它其实就是通过某种算法(平常所听的XX卷积,XXX卷积其实就是不同算法所得出的)得出的一个结果矩阵。首先我们知道图像其实就是一个个的像素点所构成的矩阵排列,而通过高斯函数求出来的目标矩阵在与源矩阵进行卷积滤波之后就能得出结果矩阵就是我们最后模糊的图像结果,效果如图所示:

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

卷积滤波

我们先把卷积核放到一边,重点先看一下原像素是如何通过卷积滤波来得到目标像素的。如图所示,如果我们想要得到图中的目标像素(第二排第二列),那么我需要同样的找到原像素和原像素周围的一圈像素(3*3的矩阵),然后根据周围一圈的值进行加权运算。

(-1*3)+(0*0)+(1*1)+(-2*2)+(0*6)+(2*2)+(-1*2)+(0*4)+(1*1)=-3

通过计算我们便能得到目标像素的值为-3,其实这就是高斯模糊的过程,原像素矩阵就是通过一大堆的类似的运算来得到高斯模糊后的目标像素矩阵的,这就是模糊成像的过程。当然我们还需继续理解一下模糊成像的原理。

模糊成像一般原理

我们现在仅仅了解模糊的一个过程那么我们还应该知道模糊成像的一般原理是什么样的。

还是让我们来画个图理解更好帮助解释(我们先假设每个头都是一个像素点):

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

例1

如上图所示,如果我们想对中心像素点可可萝进行一次模糊处理那么应该怎么做,既然是模糊处理那么就是要通过周边像素的值来确定自身的值应该是多少,显然照上图来看的话,完成模糊处理很简单,就是求出周边的加权平均,由于周围一圈全是臭鼬头,所以显而意见中间的可可萝也会被平均计算成臭鼬头。

即(臭鼬+臭鼬+臭鼬+臭鼬+可可萝+臭鼬+臭鼬+臭鼬+臭鼬)/(9*臭鼬)=臭鼬

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

噔噔咚

这样得出的结果就已经是经过简单的加权模糊后所生成的图像了,当然要应用到正式的图像模糊不可能通过这么简单的加权运算来得出模糊图像,因为不管从运算效率、时间复杂度还是实际的模糊效果来说都太差了,接下来我们要开始了解一下如何通过算法来优化模型进行图像模糊。

在统计学中有一个十分重要的权重分配模式叫“正态分布”,在高斯模糊中也是围绕正态分布来求出适应的模糊值,我们接下来就会带读者来了解一下正态分布,这可是在很多学科都有应用的一个重要理论(甚至连机械设计都要用,苦逼作者的秃头生活)

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

基数放大后就很难进行运算了

正态分布的基本图像

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

正态分布公式

正态分布是研究定量现象的一个数学模型,其一般的图像如下所示:

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

标准正态分布

很明显,正态分布图像是一个呈钟型的图像,从图中我们可以看出距离中心0的位置越小则函数的取值越大,同样的曲度也会越大,处于中心点就能得到权重,随着向周边靠近取值递减,将正态分布模型运用到模糊运算时,就会可以做到指定的越中心的像素将会获得更高的模糊权重,而偏外围的像素将得到低权重的模糊,这样就不会导致由于模糊的程度完全一样所导致的图像衔接问题。

高斯函数基础介绍

使用正态分布所得到的密度函数称为高斯函数,其一维函数如下图所示:

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

一维高斯函数

其中,μ是x的平均均值,σ是x的方差。因为计算平均值的时候,中心点就是原点(0,0),所以在计算平均值时μ=0。

可以通过一维函数推导得到二维高斯函数(推导过程不做解释,该去学概率论与数理统计啦!)。

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

二维高斯函数

现在我们就能通过高斯函数来计算模糊所需要的权重矩阵了。

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

原始矩阵

假定在此矩阵中的中心点的坐标是(0,0),那么距离它最近的8个点的坐标如上图所示。

为了计算权重矩阵,需要自己设定σ模糊半径(指的就是你中心点与周围像素的距离取值后所确定的值)。我们来定σ=1.5,则模糊半径为1.5的权重矩阵如下:

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

权重矩阵(1)

为了完成权重矩阵的归一化,我们还需要对上面的各值进行除于他们的总值的计算,目的是让最终的图像通道的权重总值为1,不然使用总值大于1的卷积滤镜会让图像偏亮,小于1的卷积滤镜会让图像偏暗。这九个权重值的总和等于0.4787147,所以我们直接进行除法运算,得到以下的权重矩阵。

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

权重矩阵(2)

这样我们的权重矩阵也就是卷积滤波矩阵就大功告成了,当然还没有完,假设我们有一个图像矩阵也就是未经过处理的图像矩阵,他们的灰度值如下图所示(如果是彩色RGB图像则需要分别计算3个通道的色值):

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

灰度值矩阵

OpenCV的初步简单讲解——高斯模糊与卷积核,通俗易懂

计算后的灰度值

之后我们将权重矩阵对准源图像的色值矩阵,然后将权重矩阵和色值矩阵相乘得出的结果全部相加就可以求出中心的模糊值。对一个图像的所有点都进行如上过程,就能最终得到高斯模糊后的图像。

关于高斯模糊与卷积核的介绍就到此为止了,如果有什么疑问可以在评论中进行提问,作者会做到及时回复。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多