卷积(convolution)与互相关(cross-correlation)的一点探讨

这几天在学习计算摄影的基础知识,刚好看到两者的一点区别,也解决了我在以前一篇文章下评论中的疑问,所以贴在这里先

Cross-correlation

图片最易于说明问题,如下,假设我们有一张image和一个filter

我们对图像中的蓝色区域进行Cross-correlation

那么在点E,也就是 G[3,3]=a*A+b*B+c*C+d*D+e*E+f*F+g*G+h*H+i*I

上面这个式子又臭又长,我们把它简化下并适用与所有情况,即

G[i,j]=\sum_{u=-k}^{k}\sum_{v=-k}^{k}h[u,v]F[i+u,j+v] ,漂亮多了,注意求和时loop的顺序

(k表示neighbor数,如上k=1,h[u,v]表示filter的权重)

你可能觉得这好像有点熟悉,不就是卷积吗,其实卷积和它还是有点区别的

Convolution

先看公式 G[i,j]=\sum_{u=-k}^{k}\sum_{v=-k}^{k}h[u,v]F[i-u,j-v] ,就改了个符号有什么区别呢

我们还是用上面那幅图,我们记得cross-correlation的loop顺序是从左到右,从上到下

而convolution是从右到左,从下到上,即 G[3,3]=a*I+b*H+c*G+d*F+e*E+f*D+g*C+h*B+i*A 那么这就相当于将‘filter翻转’了,

上下翻转、左右翻转

然后进行cross-correlation运算,即

G[3,3]=i*A+h*B+g*C+f*D+e*E+d*F+c*G+b*H+a*I

可是我们为什么要这么做呢,有什么意义呢,下面让我们来看下

区别

考虑,一张图如下,我们进行cross-correlation,得到的结果如下

如果换成真实点的图

我们看到得到的结果就像filter,只不过翻转了下

现在我们考虑convolution,它相当于将filter翻转了一次再进行cross-correlation,那再加上上面的这次翻转就是两次,也就不变了

于是convolution就有了下面的性质

Identity:E=[...0,0,1,0,0...],F*E=F(你可以想下cross-correlation行不行)

更不用说交换律结合律

那么什么时候convolution和cross-correlation是一样的呢?

当filter关于x轴y轴对称时,通常的Average filter和Gaussian filter都是,两者相同

OK,就到这里

参考资料

Computational photograph-Udacity

编辑于 2018-01-23