ApplicationInImageProcessing icon indicating copy to clipboard operation
ApplicationInImageProcessing copied to clipboard

图像卷积操作

Open zibuyu1995 opened this issue 7 years ago • 0 comments

利用OpenCV的filter2D函数作图像的卷积操作和协相关操作

图像的卷积操作是图像处理中最常用的操作之一,一般是用核算子来实现卷积操作。什么叫核算子

理论

  OpenCV用函数filter2D来实现对图像或矩阵的卷积操作。这个函数本质上做的是协相关操作,但是当核算子是对称的,则协相关操作也是卷积操作,计算公式如下: image 当核算子不是对称的时候,则需要把核算子旋转180度,然后再把核算子的锚点改为(kernel.cols - anchor.x - 1, kernel.rows - anchor.y - 1),这样做的运算就是卷积运算了。

函数filter2D的原型如下:

void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT )

参数意义说明:

  • src:源矩阵或图像
  • dst:输出矩阵或图像
  • ddepth:输出图像的深度。如果这个值是负者,那么输出图像的深度和源图像一致。可以是如下的组合: src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F src.depth() = CV_64F, ddepth = -1/CV_64F
  • kernel:核算子,即我上面说的窗口矩阵。它的类型是单通道的浮点矩阵。如果你想处理多通道的图像矩阵,则可以一个通道一个通道的处理。
  • anchor:锚点。窗口遍历运算结果替换的位置。默认值为(-1,-1),代表锚点是窗口的中心点。
  • delta:结果偏移值。
  • borderType:卷积的边界处理类型

zibuyu1995 avatar May 20 '18 03:05 zibuyu1995