当前位置: 代码迷 >> 综合 >> 卷积是什么?使用opencv与python进行图像卷积 Convolutions with OpenCV and Python
  详细解决方案

卷积是什么?使用opencv与python进行图像卷积 Convolutions with OpenCV and Python

热度:45   发布时间:2024-01-19 14:16:13.0

图像卷积是什么?


图像卷积是计算机视觉,图像处理领域经常用到的操作,比方说模糊操作(blurring),平滑操作(smoothing),以及边缘检测(edge detection)等都是卷积操作。卷积操作是计算机视觉以及图像处理领域中最重要以及最基础的操作之一。

我们可以简单理解卷积是对两个矩阵进行按元素(element-weise)的乘法,然后再对得到的矩阵结果个元素求和。

所以,在实际中,卷积是这样的:

  1. 选取两个矩阵(需要一样的尺寸)。
  2. 两个矩阵对应的元素进行按元素的乘法(注意,不是点乘,就是基本乘法)
  3. 把元素相加。




可以这样理解,原始图像是大矩阵,核是一个小矩阵(相对原始的图像来说)
核是在大一些的图片上从左到右,从上到下滑动的小矩阵
在上图中,我们将核在原始图像上从左到右,从上到下滑动。
下面是一个核的例子:
 一个3*3的核
一般来说,核可以是任意M * N像素大小,其中M,N 是奇数。值得注意的是,大多数核是N*N矩阵。

理解图像卷积


在图像处理中,卷积包含这三个方面:

  1. 一个输入图像。
  2. 一个将要应用到输入图像上的核矩阵。
  3. 一个输出图像来储存输入图像域核卷积的输出结果。

在对图像进行卷积操作时,有这样几个步骤:
4. 在原始图像中选择一个(x,y)坐标。
5. 把核的正中心放在(x,y)坐标上。
6. 对核与输入图像对应区域进行按元素的乘法运算,然后把乘法运算得到的结果相加,得到一个值。这个值就是核输出。
7. 在输出图像上对应于(x,y)坐标的位置上,储存核输出的值。

下面是一个具体的示例,一个3 * 3的图像区域与一个3 * 3的核卷积操作来实现模糊化(bluerring):
一个3*3的图像区域与一个3*3的核卷积操作来实现模糊化(bluerring)
因此,卷积操作的结果存储在输出图像中
经过卷积,我们将输出图像位于坐标(i,j)位置的像素值设置为126。

卷积在深度学习中扮演的角色


对于在卷积中使用的核,我们需要手动定义,来进行不一样的操作,比如:平滑操作(smoothing),锐化操作(sharpening),以及边缘检测(edge detection)。

这些不错,但是如果有一些途径能自主学习这些操作呢?能否定义一个机器学习方法来学习这些操作呢?

事实上,这些算法是存在的。这种类型的算法是神经网络(Neural Networks)的子类型,卷积神经网络(Convolutional Neural Networks (CNNs))。通过使用卷积滤波器,非线性激活函数,乘积和和反向传播算法,CNNs 可以对检测浅层神经网络的简单结构如边缘和斑点的滤波器进行学习,然后使用这些边缘和结构作为构建块,最终完成检测深层神经网络的较高级别的对象(面部,猫,狗,杯子等)的工作。

会在之后继续这方面的探讨和分享。

原文:Convolutions with OpenCV and Python