一、什么是卷积

        卷积可以理解为两个函数f和g的重叠运算,通过将一个函数翻转并滑动到另一个函数上,计算它们在重叠点的乘积并求和,从而生成一个新的函数。数学上,卷积的表达式通常为:

                                                (f∗g)(t)=∫−∞+∞​f(τ)g(t−τ)dτ

        其中,f和g是两个函数,t是卷积结果函数的自变量。在离散形式中,卷积通过翻转一个序列g[n],然后按时间值平移,计算每个平移位置上两个序列的乘积并求和。

        这是通过数学公式进行的描述,但是我们要了解的是关于图像处理方面的,所以就没有那么的抽象。我们只需要知道,是怎么通过卷积去处理图像的,处理完成后的图像是什么样的就可以。

二、应用方面

        在图像处理方面,卷积操作指的就是使用一个卷积核,对图像上的像素进行处理。经常用来进行边缘检测和图像的模糊处理。

        卷积核一般是四方形的网格结构(2X2、3X3),是一个方形的结构,每一个区块都有相应的权重值。

        卷积核对像素的计算过程

                step1:把卷积核的中心放在要进行计算的该像素上

                step2:翻转核之后再依次计算核中每个元素的权重值和其覆盖的图像像素值相乘

                step:将相乘之后的结果求和,得到当前像素的新像素值

三、边缘检测

        用于边缘检测的卷积核,也就是边缘检测算子。

        有常见的边缘检测算子:

        Sobel算子,缺点容易产生伪边缘。

        

        Prewitt算子,缺点:通常会产生较粗的边缘

        

        我们来检测边缘,也是看如果相邻的像素之间,存在明显的差异,比如颜色、亮度、纹理等,我们就认为它们之间应该存在边缘。相邻像素之间的差值,用梯度表示。

        如果存在边缘,那么梯度的绝对值肯定会比较大。

        在计算的时候,我们会分别对水平和竖直方向进行计算。对每个像素都进行卷积的计算,然后就会获得水平梯度(Gx)和竖直梯度(Gy)。接下来,我们计算整体的梯度:

        
        这里我们用绝对值代替开根号:

                      G越大,越有可能是边缘。

四、模糊处理

        模糊处理,我们提到的是高斯模糊。因为高斯模糊也是使用了卷积的计算,这里的卷积核为高斯核。

        高斯核其中的每个元素都是基于高斯方程计算得来的。高斯方程就很好的模拟了相邻的每个像素对当前处理像素的影响程度。

        我们使用高斯核的时候,可以把N X N的方形,转换为两个一维的高斯核。操作过程基本上就是把横向的权重相加,得到水平的一维高斯核;纵向的权重相加,得到竖直的一维高斯核。这样我们计算起来,数值上就减少了很多。

五、关于Unity Shader

        边缘检测、高斯模糊等对图像的处理,都是在Shader的屏幕后处理时候用到的操作。对图像进行描边操作和模糊操作。通常搭配OmRenderImage函数完成。

        具体的文字讲解,在《入门精要》中可以阅读。

        具体的视频讲解,在bilibili中可以看到,博主讲解的通俗易懂,链接放在下方
        【设计知识补全——图像滤镜与卷积】https://www.bilibili.com/video/BV12i4y1e72G?vd_source=f4c487d7bb3af3ddc4709b161074756f

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐