• 知乎神仙帖子:如何通俗易懂地解释卷积? ... ... 结论:卷积的本质就是滑动的加权叠加!!! 1.第一个链接讲了对公式的理解,联系了一些卷积的数学应用问题如:投骰子点数一定的概...

    知乎神仙帖子:如何通俗易懂地解释卷积?

    https://www.zhihu.com/question/22298352/answer/228543288

    https://www.zhihu.com/question/22298352/answer/34267457

    结论:卷积的本质就是滑动的加权叠加!!!

    1.第一个链接讲了对公式的理解,联系了一些卷积的数学应用问题如:投骰子点数和一定的概率呀/卖馒头呀

    2.重点中的重点:图像处理中所谓的‘卷积核’(各种算子)与图像矩阵作“卷积”运算的时候,‘卷积核’要先旋转180度!!!!

    为什么加引号,因为这里有一个天大的误会:很多书会口口声声把空间滤波行为(图像与模板对应元素相乘再全部相加)称为‘平面卷积’,模板也叫‘卷积核’,其实这种操作叫做“相关",而真正卷积是要先翻转再加权求和的,所以滤波时要先把模板旋转180度,再做加权求和。

    所以,空间滤波=相关≠卷积

    3.所以值得注意的是,在matlab里面调用imfilter(I,w)时,有个选项指定滤波方式是‘corr'还是’conv‘

    (相关和卷积的差别 这个博客讲的很好https://www.zhihu.com/question/22298352/answer/34267457

    展开全文
  • 图像处理中常常需要用一个滤波器做空间滤波操作。空间滤波操作有时候也被叫做卷积滤波,或者干脆叫卷积(离散的卷积,不是微积分里连续的卷积);滤波器也有很多名字:卷积模版、卷积核、掩模、窗口等。 空间滤波...

    图像处理中常常需要用一个滤波器空间滤波操作。空间滤波操作有时候也被叫做卷积滤波,或者干脆叫卷积(离散的卷积,不是微积分里连续的卷积);滤波器也有很多名字:卷积模版、卷积核、掩模、窗口等。

    空间滤波可以分为线性滤波和非线性滤波。非线性滤波常见的有中值滤波、最大值滤波等,相当于自定义一个函数,在数学上由于不满足线性变换因此叫做非线性滤波。这里不细研究它。

    线性滤波则通常是:将模版覆盖区域内的元素,以模版中对应位置元素为权值,进行累加。

    两种模式:

    相关(cross-correlation)

    将模版中元素从左到右、从上到下,作为使用顺序,那么卷积操作的结果,就是模版第一个元素乘以它覆盖的元素,加上模版第二个元素乘以它覆盖的元素,再加上模版第三个元素乘以它覆盖的元素,...,一直加到模版最后一个元素乘以它覆盖的元素。好吧,其实就是:模版覆盖区域内,元素逐一相乘然后累加,此时的对应位置就是上下投影后被覆盖的位置。

    卷积(convolution)

    将同样的模版旋转180°后,再做"相关"操作。当然,如果模版是180°对称的那么卷积和相关是相同的。但是并不是所有的模版都对称。

    即为如下:

    然后进行刚才同样的操作

    这里讲一下平时的拉普拉斯算子

    \left [ \begin{pmatrix} 0 & 1 & 0\\ 1& -4& 1\\ 0 & 1& 0 \end{pmatrix} \right ]

    旋转180°依然是

    \left [ \begin{pmatrix} 0 & 1 & 0\\ 1& -4& 1\\ 0 & 1& 0 \end{pmatrix} \right ]

    所以滤波到底使用的是卷积还是相关也无关紧要,只和数学原理有关

    但是

    并不是所有的模版都对称

    这里值得说的一点是:

    神经网络中的CNN卷积层,使用的是卷积模式,但是和别人讨论产生观点歧义,先按吴恩达的走,或许他是为了计算方便,反正是训练出来的模板,180是否翻转都是训练出来的,神经网络自己把翻转后的训练出来不就可以了嘛

    展开全文
  •  在图像处理中,卷积操作指的是使用一个卷积核对图像中的每个像素进行一系列操作。 卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是与原图像做运算的参数。卷积核通常是一个四方形的网格结构...

    一、 什么是卷积?

          在图像处理中,卷积操作指的是使用一个卷积核对图像中的每个像素进行一系列操作。 
          卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是与原图像做运算的参数。卷积核通常是一个四方形的网格结构(例如3*3的矩阵或像素区域),该区域上每个方格都有一个权重值。 
          使用卷积进行计算时,需要将卷积核的中心放置在要计算的像素上,一次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的结构就是该位置的新像素值。 
          以下两个算子中演示了具体的卷积计算过程。


    二、 相关算子

    定义:这里写图片描述 
    这里写图片描述,其中h称为相关核(Kernel). 
             
    步骤:

    • 1)滑动核,使其中心位于输入图像g的(i,j)像素上
    • 2)利用上式求和,得到输出图像的(i,j)像素值
    • 3)充分上面操纵,直到求出输出图像的所有像素值

    【例】 
      原始像素矩阵为: 

    17234101124561218171319258142021215162239[17241815235714164613202210121921311182529]

      卷积模板h为: 

    834159672[816357492]

    计算输出图像的(2,4)元素=1*8+8*1+15*6+7*3+14*5+16*7+13*4+20*9+22*2=585 
    如图所示: 
    这里写图片描述


    三、 卷积算子

    定义:这里写图片描述 
    这里写图片描述

    步骤: 
    - 1)将核围绕中心旋转180度 
    - 2)滑动核,使其中心位于输入图像g的(i,j)像素上 
    - 3)利用上式求和,得到输出图像的(i,j)像素值 
    - 4)充分上面操纵,直到求出输出图像的所有像素值 
    例:计算输出图像的(2,4)元素=1*2+8*9+15*4+7*7+14*5+16*3+13*6+20*1+22*8=575 
    如图所示: 
    这里写图片描述


    四、 边缘效应

          当对图像边缘的进行滤波时,核的一部分会位于图像边缘外面。 
    这里写图片描述 
    常用的策略包括: 
    - 1)使用常数填充:imfilter默认用0填充,这会造成处理后的图像边缘是黑色的。 
    - 2)复制边缘像素:I3 = imfilter(I,h,’replicate’); 
    这里写图片描述


    五、 常用的卷积核及其用途

    • 1)低通滤波器(常用于计算模糊后的效果)
      1/91/91/91/91/91/91/91/91/9[1/91/91/91/91/91/91/91/91/9]

      1/101/101/101/102/101/101/101/101/10[1/101/101/101/102/101/101/101/101/10]

      1/162/161/162/164/162/161/162/161/16[1/162/161/162/164/162/161/162/161/16]
    • 2)高斯滤波器(常用于计算高斯模糊后的效果) 
            高斯模糊的卷积核也是一个正方形的滤波核,其中每个元素通过以下公式计算得出: 
            G(x,y)=12πσ2ex2+y22σ2G(x,y)=12πσ2·ex2+y22σ2 
            该公式中σ是标准方差(一般取值为1),x和y分别对应了当前位置到卷积核中心的整数距离。通过这个公式,就可以计算出高斯核中每个位置对应的值。为了保证滤波后的图像不会变暗,需要对高斯核中的权重进行归一化。

    • 3)边缘检测(常用于计算图像边缘或者说梯度值) 

      101040101[−10−1040−10−1]


    展开全文
  • 在执行线性空间滤波时,经常会遇到两个概念相关和卷积 二者基本相似,在进行图像匹配是一个非常重要的方法。 相关是滤波器模板移过图像并计算计算每个位置乘积之处理 卷积的机理相似,但滤波器首先要旋转180度 ...

    在执行线性空间滤波时,经常会遇到两个概念相关和卷积
    二者基本相似,在进行图像匹配是一个非常重要的方法。
    相关是滤波器模板移过图像并计算计算每个位置乘积之和的处理
    卷积的机理相似,但滤波器首先要旋转180度
    相关的计算步骤:
    (1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方
    (2)将输入图像的像素值作为权重,乘以相关核
    (3)将上面各步得到的结果相加做为输出
    卷积的计算步骤:
    (1)卷积核绕自己的核心元素顺时针旋转180度
    (2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方
    (3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘
    (4)第三步各结果的和做为该输入像素对应的输出像素
    超出边界时要补充像素,一般是添加0或者添加原始边界像素的值
        可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。
    而计算相关过程中不需要旋转相关核。

    离散单位冲击:我们将包含单个1而其余全是0的函数成为离散单位冲击。
    重要性质:一个函数与离散单位冲击相关,在冲击位置产生这个函数的一
    个翻转版本。
    f 函数
    w 滤波器模板
    eg:
    f(x,y)
      0 0 0 0 0
      0 0 0 0 0 
      0 0 1 0 0
      0 0 0 0 0
      0 0 0 0 0
    w(x,y)
      1 2 3 
      4 5 6 
      7 8 9
    相关 f*w = 
         0     0     0     0     0
         0     9     8     7     0
         0     6     5     4     0
         0     3     2     1     0
         0     0     0     0     0
    卷积f*w=
         0     0     0     0     0
         0     1     2     3     0
         0     4     5     6     0
         0     7     8     9     0
         0     0     0     0     0
    相关的用途:图象的匹配
    假如函数f中存在w的一个复制版本,即f:
      0 0 0 0 0
      0 1 2 3 0 
      0 4 5 6 0
      0 7 8 9 0
      0 0 0 0 0
    f*w是多少呢?
        9    26    50    38    21
        42    94   154   106    54
        90   186   285   186    90
        54   106   154    94    42
        21    38    50    26     9
    是不是会发现w与f中w的复制版本重合时,该点的值最大。最大值为
    1^2+2^2+……+9^2 = 285
    这就是用相关进行图像匹配的基本原理。当然了,在图像匹配时还要进行
    相关函数的归一化等操作。
    展开全文
  • 本文索引: 一 什么是卷积相关算子 三 卷积算子 ... 卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是与原图像做运算的参数。卷积核通常是一个四方形的网格结构(例如3*3的矩阵或像

    本文索引:

    文章目录





    # 一、 什么是卷积?       在图像处理中,卷积操作指的是使用一个卷积核对图像中的每个像素进行一系列操作。       卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是与原图像做运算的参数。卷积核通常是一个四方形的网格结构(例如3*3的矩阵或像素区域),该区域上每个方格都有一个权重值。       使用卷积进行计算时,需要将卷积核的中心放置在要计算的像素上,一次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到的结构就是该位置的新像素值。       以下两个算子中演示了具体的卷积计算过程。
    # 二、 相关算子 定义:![这里写图片描述](https://img-blog.csdn.net/20160603125126517) 即![这里写图片描述](https://img-blog.csdn.net/20160603125155767),其中h称为相关核(Kernel).          步骤:
    • 1)滑动核,使其中心位于输入图像g的(i,j)像素上
    • 2)利用上式求和,得到输出图像的(i,j)像素值
    • 3)充分上面操纵,直到求出输出图像的所有像素值

    【例】
      原始像素矩阵为:
    \begin{bmatrix}
    17 & 24 & 1 & 8 & 15 \
    23 & 5 & 7 & 14 & 16 \
    4 & 6 & 13 & 20 & 22 \
    10 & 12 & 19 & 21 & 3\
    11 & 18 & 25 & 2 & 9
    \end{bmatrix}

    卷积模板h为:
    \begin{bmatrix}
    8 & 1 & 6 \
    3 & 5 & 7 \
    4 & 9 & 2
    \end{bmatrix}

    计算输出图像的(2,4)元素=18+81+156+73+145+167+134+209+22*2=585
    如图所示:
    这里写图片描述


    # 三、 卷积算子

    定义:这里写图片描述
    这里写图片描述

    步骤:

    • 1)将核围绕中心旋转180度
    • 2)滑动核,使其中心位于输入图像g的(i,j)像素上
    • 3)利用上式求和,得到输出图像的(i,j)像素值
    • 4)充分上面操纵,直到求出输出图像的所有像素值
      例:计算输出图像的(2,4)元素=12+89+154+77+145+163+136+201+22*8=575
      如图所示:
      这里写图片描述

    # 四、 边缘效应       当对图像边缘的进行滤波时,核的一部分会位于图像边缘外面。 ![这里写图片描述](https://img-blog.csdn.net/20160603143253118) 常用的策略包括: - 1)使用常数填充:imfilter默认用0填充,这会造成处理后的图像边缘是黑色的。 - 2)复制边缘像素:I3 = imfilter(I,h,'replicate'); ![这里写图片描述](https://img-blog.csdn.net/20160603143353525)
    # 五、 常用的卷积核及其用途
    • 1)低通滤波器(常用于计算模糊后的效果)\begin{bmatrix}
      1/9 & 1/9 & 1/9 \
      1/9 & 1/9 & 1/9 \
      1/9 & 1/9 & 1/9
      \end{bmatrix}
      \begin{bmatrix}
      1/10 & 1/10 & 1/10 \
      1/10 & 2/10 & 1/10 \
      1/10 & 1/10 & 1/10
      \end{bmatrix}
      \begin{bmatrix}
      1/16 & 2/16 & 1/16 \
      2/16 & 4/16 & 2/16 \
      1/16 & 2/16 & 1/16
      \end{bmatrix}

    • 2)高斯滤波器(常用于计算高斯模糊后的效果)
            高斯模糊的卷积核也是一个正方形的滤波核,其中每个元素通过以下公式计算得出:
            G(x,y)=12πσ2ex2+y22σ2G(x,y)=\frac{1}{2πσ^{2}}·e^{\frac{x^{2}+y^{2}}{2σ^{2}}}
            该公式中σ是标准方差(一般取值为1),x和y分别对应了当前位置到卷积核中心的整数距离。通过这个公式,就可以计算出高斯核中每个位置对应的值。为了保证滤波后的图像不会变暗,需要对高斯核中的权重进行归一化。

    • 3)边缘检测(常用于计算图像边缘或者说梯度值)
      \begin{bmatrix}
      -1 & 0 & -1 \
      0 & 4 & 0 \
      -1 & 0 & -1
      \end{bmatrix}


    # 六、 一个例子——使用卷积实现模糊效果       我们将对下面这张图进行模糊处理: ![这里写图片描述](https://img-blog.csdn.net/20160606172529227)       以下为compute shader中关于卷积处理的代码:
    [numthreads(32,32,1)]
    void Dim_Main (uint3 id : SV_DispatchThreadID)
    {
    
    	float sumR = 0;
    	float sumG = 0;
    	float sumB = 0;
    	float sumA = 0;
    	for (int i = -1; i <= 1; i++) 
    	{
    		for (int j = -1; j <= 1; j++) 
    		{
    			sumR += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].r * convolutionTempBuffer[(i+1)*3+(j+1)];
    			sumG += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].g * convolutionTempBuffer[(i+1)*3+(j+1)];
    			sumB += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].b * convolutionTempBuffer[(i+1)*3+(j+1)];
    			sumA += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].a * convolutionTempBuffer[(i+1)*3+(j+1)];
    		}
    	}
    
    	texBuffer[id.x*texWidth[0]+id.y].r = sumR;
    	texBuffer[id.x*texWidth[0]+id.y].g = sumG;
    	texBuffer[id.x*texWidth[0]+id.y].b = sumB;
    	texBuffer[id.x*texWidth[0]+id.y].a = sumA;
    
    	Result[id.xy] = float4(sumR, sumG, sumB, sumA);
    }
    

    效果如图所示:
    这里写图片描述

          图中可以明显的看到左右两边有明显的黑色线条,原图中是没有这样的黑色的,产生这种效果的原因是本文中之前提到过的边缘效应。下面我将修改一部分代码去除边缘效应带来的影响,这里使用的是相邻像素的值方法。
    代码如下:

    [numthreads(32,32,1)]
    void Dim_Main (uint3 id : SV_DispatchThreadID)
    {
    
    	float sumR = 0;
    	float sumG = 0;
    	float sumB = 0;
    	float sumA = 0;
    	for (int i = -1; i <= 1; i++) 
    	{
    		for (int j = -1; j <= 1; j++) 
    		{
    			if((id.x+i)*texWidth[0]+(id.y+j)>texWidth[0]*texWidth[0]-1)
    			{
    				sumR += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].r * convolutionTempBuffer[(i+1)*3+(j+1)];
    				sumG += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].g * convolutionTempBuffer[(i+1)*3+(j+1)];
    				sumB += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].b * convolutionTempBuffer[(i+1)*3+(j+1)];
    				sumA += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)-texWidth[0]].a * convolutionTempBuffer[(i+1)*3+(j+1)];
    			}
    
    			sumR += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].r * convolutionTempBuffer[(i+1)*3+(j+1)];
    			sumG += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].g * convolutionTempBuffer[(i+1)*3+(j+1)];
    			sumB += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].b * convolutionTempBuffer[(i+1)*3+(j+1)];
    			sumA += texBuffer[(id.x+i)*texWidth[0]+(id.y+j)].a * convolutionTempBuffer[(i+1)*3+(j+1)];
    		}
    	}
    
    	texBuffer[id.x*texWidth[0]+id.y].r = sumR;
    	texBuffer[id.x*texWidth[0]+id.y].g = sumG;
    	texBuffer[id.x*texWidth[0]+id.y].b = sumB;
    	texBuffer[id.x*texWidth[0]+id.y].a = sumA;
    
    	Result[id.xy] = float4(sumR, sumG, sumB, sumA);
    }
    

    效果如图所示:
    这里写图片描述

          可以看到,图中左边的黑色线条已经被滤除,右边也可以采用类似的方法来剔除。实际使用中,也可以根据情况使用纯色来做剔除,这样可以节省部分效率,如下图中我使用的是纯白色来剔除边缘效应。
    这里写图片描述

    展开全文
  • 图像处理之理解卷积

    2016-10-31 10:01:01
    图像处理之理解卷积   一:什么是卷积 离散卷积的数学公式可以表示为如下形式: f(x) = - 其中C(k)代表卷积操作数,g(i)代表样本数据, f(x)代表输出结果。 举例如下: 假设g(i)是一个一维的函数,而且代表的样本数...
  • 卷积,是把核矩阵顺时针旋转180度,在和图像做变换。这个变换类似书中有,这里不过多解释。我个人认为,虽然国外都是convolution,译为数学中的卷积是没错,并且人家就是这个数学上的卷积的概念但其实根据卷积定义,...
  • 1、图像处理的原理在一幅图像上,我们可以看到有很多的噪点,这些噪点一般都属于高频信号。高频信号就像是平地上凸起的山峰,平滑这山峰的办法就是,把山峰刨掉一些土,填到山峰周围去,即把山峰周围的土地平均一下...
  • 图像处理卷积

    2018-08-24 22:41:48
    图像处理卷积)作者太棒了,写的很好,推荐阅读 &nbsp; 原文&nbsp; http://blog.sina.com.cn/s/blog_4bdb170b01019atv.html 图像处理-线性滤波-1 基础(相关算子、卷积算子、边缘效应) 这里讨论...
  • 卷积运算与图像处理

    2019-09-06 14:32:34
    很多时候,我们都说卷积神经网络在图像处理方面具有很大的优势,主要原因就在于卷积运算,所以接下来就主要从图像处理和卷积的联系入手进行分析。 卷积运算在概率统计中关于随机变量的的计算中也有出现,从数学上...
  • 卷积数字图像处理

    2020-04-20 23:31:49
    数字图像处理有关卷积的介绍,线性系统理论 一、什么是线性系统 二、调谐信号分析 三、卷积 四、五个有用函数 五、卷积滤波及其应用 要点总结
  • 充分理解数字图像处理中的卷积原理
  • 图像处理中的卷积与模板 1.使用模板处理图像相关概念:   模板:矩阵方块,其数学含义是一种卷积运算。  卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别与卷积核(权矩阵)的每个元素...
  • 一:什么是卷积 离散卷积的数学公式可以表示为如下形式: f(x) = - 其中C(k)代表卷积操作数,g(i)代表样本数据, f(x)代表输出结果。 举例如下: 假设g(i)是一个一维的函数,而且代表的样本数为G = [1,2,...
  •  卷积图像处理中很常见的操作,它通过计算原图像一个卷积核的加权和来对图像进行滤波。根据卷积核的不同,可以完成对图像的模糊、锐化、降噪、边缘检测等其他功能。  离散二维卷积公式可以表示为,    ...
  • 通俗点说:卷积图像处理中的应用就是用一个模式矩阵原图像矩阵相乘,得到一个新的矩阵作为卷积结果 (核:指一组权重的集合,它会应用在源图像的一个区域,并由此生成目标图像的一个像素。比如大小为7的核意味...
  • 卷积,很多时候都是我们在各种工程领域,信号领域所看到的常用名词,比如系统 通俗易懂的说,就是 输出 = 输入 * 系统 虽然它看起来只是个复杂的数学公式,但是却有着重要的物理意义,因为自然界这样的系统...
  • 图像处理卷积代码

    2020-07-08 23:30:58
    图像处理卷积代码,有卷积原理的示意图,适合初学者。
  • 一,前言卷积神经网络(Constitutional Neural Networks, CNN)是在多层神经网络的基础上发展起来的针对图像分类识别而特别设计的一种深度学习方法。先回顾一下多层神经网络: 多层神经网络包括一个输入层一个...
  •  卷积是一种是数学运算,对于一维连续信号f(x)来说,f(x)g(x)的卷积是一种积分运算,如下    它的几何意义是这样的:第一步,先把g(x)关于原点对称,得到g(-x);第二步,把g(-x)向右平移a个单位得到g(a-x)的...
1 2 3 4 5 ... 20
收藏数 69,831
精华内容 27,932