“ signal.convolve2d”和“ signal.correlate2d”(具有相同的参数)何时会产生不同的结果?
我刚刚开始使用Scipy,我无法确定使用signal.correlate2d(array,filter,'same')和signal.convolve2d(array,filter,'same')的区别,尽管结果相同我尝试过的所有情况。
答案 0 :(得分:0)
看看他们的代码。它们看起来几乎相同,除了一种用途:
sigtools._convolve2d(in1, in2.conj(), 0, val, bval, fillvalue)
和另一个:
sigtools._convolve2d(in1, in2, 1, val, bval, fillvalue)
大概您对卷积知识了解得足够多了,对吧?
why this code
的答案通常涉及一个历史,可以追溯到几年前。不同的人编写不同的代码位,将它们合并,有时仅出于向后兼容性的缘故仍保留微小的差异。保留几个类似的版本比告诉用户“您必须切换”要容易得多。
答案 1 :(得分:0)
之所以这样做,是因为他们实际上在执行不同的任务
signal.convolve2d() #does convolving
signal.correlate2d() #does just cross-correlation
Convolving正在与水平和垂直镜像的滤镜进行互相关。
交叉相关通常是在深度学习中完成的,在深度学习中,您按原样使用滤波器进行乘法。
对于非对称滤波器,结果是不同的。但是,对于对称滤波器,您无法观察到这些功能的用法有什么区别。