卷积在信号处理领域有极其广泛的应用,也有严格的物理和数学定义。
OpenCV中对图像进行模糊操作,其背后的原理就是卷积运算,可是究竟卷积运算是什么,模糊的卷积算法又是如何实现的呢?本文将进行讨论。考虑到大部分读者的非专业性,本人将尽量不使用专业术语,而使用通俗易懂的“白话”进行讲述,若有任何疑问或建议,望读者斧正。注:需要读者有一定数学基础,能有一定矩阵基础或矩阵的概念,同时对统计学正态分布有概念,这对理解卷积算法很有帮助。
一、概述
(一)一维卷积运算
卷积运算需要两个对象,一个是被卷积的对象(操作数矩阵),一个是决定卷积效果的对象(卷积数矩阵),两着共同决定卷积运算的结果。
假设P为一个一维操作数矩阵,其值为[1,2,3,4,5,6,7,8,9];
假设R为一个一维卷积数矩阵,其值为[-1,0,1]。
对操作数矩阵中的每个数值,计算它左右两个数值和卷积数矩阵中对应位置的数值的乘积,然后把结果相加,最终得到的值就作为操作数矩阵中每个数值的新值。
如图1所示,每行灰色方格为操作数矩阵,橙色方格为卷积数矩阵,橙色方格依次向右移动:
1.如图1第1行所示,卷积数矩阵[-1,0,1]覆盖了操作数矩阵中的[1,2,3],那么操作数矩阵中的第2个数,原本为2,经过卷积运算后的新值为-1 * 1 + 0 * 2 + 1 * 3 = 2。
2.如图1第2行所示,卷积数矩阵[-1,0,1]覆盖了操作数矩阵中的[2,3,4],那么操作数矩阵中的第3个数,原本为3,经过卷积运算后的新值为-1 * 2 + 0 * 3 + 1 * 4 = 2。
3.如图1第3行所示,卷积数矩阵[-1,0,1]覆盖了操作数矩阵中的[3,4,5],那么操作数矩阵中的第4个数,原本为4,经过卷积运算后的新值为-1 * 3 + 0 * 4 + 1 * 5 = 2。
4.以此类推,第7次运算,卷积数矩阵[-1,0,1]覆盖了操作数矩阵中的[7,8,9],那么操作数矩阵中的第8个数,原本为8,经过卷积运算后的新值为-1 * 7 + 0 * 8 + 1 * 8 = 2。
图1 一维卷积运算
综上,除去第1位数值1和第9位数值9没有运算,P经过R卷积后的矩阵为[1,2,2,2,