前言:尽最大努力,把【卷积】和【互相关】的诞生、原理,及其物理意义搞清楚。
目录
1 卷积
1.1 卷积是什么
1.2 卷积公式的定义
1.3 卷积运算的物理意义
1.3.1 离散卷积例子:信号分析
1.3.2 连续卷积例子:馒头的腐败量
该例子总结:馒头的生产总量是一个‘输出信号’,馒头的腐败公式描述了‘食物腐败系统’的特性。利用卷积公式,我们能解决这个【信号和系统】问题。
1.3.3 卷积在图像处理中例子:
2 互相关
2.1 互相关的定义
2.2 互相关的例子——雷达回波分析
2.3 互相关在图像中的应用——模板匹配
备注:这里介绍的卷积最本源的卷积,不是卷积神经网络中卷积,卷积神经网络中卷积计算规则其实是互相关计算。当然,因为神经网络中卷积核参数最终是从数据中学习得到的,所以卷积神经网络中无论是卷积计算规则还是互相关计算规则,最终能够实现的功能和效果是一致的。
从数学上讲,卷积就是一种运算规则,跟加减法规则、积分规则等同类。而某种运算规则被定义出来,是因为这个规则在生活、科研中有广泛的用途。
其次,卷积最开始是【信号与系统】中的概念,用来解决某种信号经过某种系统后会发生怎样变化的问题。
连续的定义:
上述公式表示 f 和 g 做卷积。
离散的定义:
讲3个例子来阐述这个公式为什么有用且常见!
在信号与系统中,经常用的卷积这个工具。我们假设有个这样的问题:在一个平静的湖面上方,有个滴水石不停地往下滴水,水滴形成的大小也是周期性的发生变化,现在我们要研究湖面某处水波形成的振幅强度,怎么搞?
首先,我们要清楚一些重要的物理机理,然后数学建模来求得结果。
我们可以建模如下:
(1)把‘水滴’视为整个系统的输入信号,简单建模如下:
其中横坐标是不同时刻,水滴形成并落下时自身的大小,纵坐标是水滴落下时在水面某个位置所能导致的最大上下震动幅度(水滴越大,落下时对湖面产生的冲击力越大)。
(2)对湖面某处‘复原’能力简单建模如下:
我们知道,被外力冲击的水面,自身有一种‘复原’能力。上图物理意义是说,假设一滴水落在平静的湖面,水面某处涟漪的振幅大小,会随时间逐渐变小,最终趋于0。我们假设经过10个单位时间后,水滴的能量会被完全消耗完,则有:
(3)计算水面某个位置某个时刻的震动幅度大小
要知道,水面某处涟漪的振幅,是和历史能量有关的,我们简单认为是一种纯线性叠加态,即假设最近一次水滴降落产生的能量,要叠加过去所有水滴产生的能量。
那么计算t10时刻某处涟漪的振幅,我们就只要累加t10时刻的前10个水滴的剩余能量之总和,具体公式是:
振幅 = f(10)g(0) + f(9)g(1) + f(8)g(2) + …… + f(0)g(10)
计算示意图如下:
如果我们把 g 函数图对折过来,变成这样:
我们再右平移 g 函数图像,变成这样:
所以,上图这个计算过程,可以用一个公式表示,就是离散形式的卷积公式!(其中n就是例子中T=10时刻)
在以上计算 T 时刻的卷积时,要维持的约束就是: t+ (T-t) = T 。这也是为什么公式中要平移n并且翻转自变量τ,这种约束的意义,大家可以自己体会。
图像是用一个二维矩阵表示,如下:
如果我们要对图像进行如平滑、去噪等操作,怎么做?
最直白易懂的平滑方法是邻域平均法(均值滤波),即原图每个像素点的值用其自身和周围8个像素点求平均来替换,具体计算就是用一个3x3的矩阵,在原图上逐像素滑动累加求和然后除以9,把新值赋予在一张新图上,这个‘核’长这样:
逐像素平滑的过程和结果如下:(其中 f 代表原图并填充了一层边缘,g 代表新图,n和m代表像素点坐标)
根据一维卷积公式的定义,我们可以定义二维卷积公式如下:
有了这种定义,那么很多图像处理都可以通过卷积计算实现。如下:(注意:下面的卷积核计算时,是需要旋转核180度后,才能去做求和)
原图效果:
平移效果:(往右平移1个像素点)
平滑效果:
锐化效果:
本质上,图像处理也是种【信号和系统】模式,每次输出的‘信号’是从原图抠出来的3x3的切片图,系统响应是‘卷积核’,核的尺寸和核内元素值定义了系统的特性。
有个问题,滤波为什么要用卷积规则去计算,而不是直接用互相关计算?
答:
首先,卷积计算具备交换律、分配律、结合律,而互相关只具备结合律,如下图:
其次,一般用到的滤波器是可分离滤波器,可分离滤波器(也就是核)可以用两个向量的矩阵乘积表示。
因为具备分配律,所以图像使用可分离滤波器滤波,使用卷积计算就可以简化运算。例子如下:
如果一个图像是n x n大小,用m x m去卷积,计算复杂度为:
解释:一个像素点,就要计算n x n次加法(即一次卷积的计算量),然后有n x n个像素点要做卷积运算。
如果核是分离的,则计算复杂度为:
解释:先对图像‘行’做卷积,计算复杂度是m x n^2,再对结果做一次卷积,计算复杂度同样是 m x n^2,所以总复杂度是2 x n^2 x m也就是n^2 x m(2倍这东西不算入计算复杂度)
备注一个卷积【交换性】的证明:
互相关就没这种交换性质。
互相关的计算过程跟卷积非常像,唯一不同的是‘核’不需要翻转180度。
卷积神经网络中的卷积运算,其实是一种互相关计算过程(即没有旋转核180度),为什么也叫卷积,最主要原因是卷积核的参数是不断学习得到的,是否旋转180度后计算并不重要,第二个原因是卷积核相当于一个‘信号处理系统’,这个‘信号处理系统’要对输入信号‘图像’进行处理,也即特征提取,特征提取的目的是使后续的解码能实现图像分类、目标检测等功能。而‘互相关’操作代表相似度物理意义,和特征提取这一目标不同。
离散的互相关公式如下:
过程可以理解为:将其中一个信号延迟之后,计算两个信号的内积。也就是说互相关研究室的是两个对象产生一段时间差 L 之后的关系,也就是相不相关。
模板匹配方法有很多种,这里仅初步介绍基于互相关的模板匹配法。
我们知道,要找到图像中和模板相似的区域,意思就是那个区域的像素值和模板中像素值分布接近,也即像素值距离最小。
下面这个PPT上说,要使加权和最小,也即后面那项 -2f * t 要最大,这一点我思考了很久,一直不理解为什么这是等价的,因为后面 -2f*t越大,前面的 f^2+t^2也越大,这怎么就等价呢?网上也搜了其他资料,并没找到互相关值越大就表示模板和被检索区域相关性就越大的数学证明。
这个疑问先放这,后面有机会看看能不能回答的了。
其中互相关公式就是:
但是有个问题,真正用‘模板’作为‘核’去滑窗遍历图像时,得到的一个结果矩阵,并不能直接去找最高亮的那个点当做原图中和模板相似度最高的中心区。原因是,根据互相关计算公式,和模板做互相关运算的背景图,越是高亮,那么结果值当然就越大,如下图:
实际上,直接这么做效果如下:(用模板图像,找货架图像中位置,那个蓝色的‘X’是可视化标示结果矩阵中最亮点坐标在原图中位置)
怎么解决这个问题?一个改进方法是,让模板图自身所有元素值减去自身的均值。结果如下:
但是这还是有问题,当原图整体的光照明显变暗时,此方法也将失效,如下图:
这怎么解决?方法竟然也有,就是把原图和模板都做个归一化,然后再做互相关运算。公式是:
这么做的结果是:
或者看这个例子: