ApplicationInImageProcessing
ApplicationInImageProcessing copied to clipboard
图像卷积操作
利用OpenCV的filter2D函数作图像的卷积操作和协相关操作
图像的卷积操作是图像处理中最常用的操作之一,一般是用核算子来实现卷积操作。什么叫核算子?
理论
OpenCV用函数filter2D来实现对图像或矩阵的卷积操作。这个函数本质上做的是协相关操作,但是当核算子是对称的,则协相关操作也是卷积操作,计算公式如下:
当核算子不是对称的时候,则需要把核算子旋转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:卷积的边界处理类型