📜  卷积与相关(1)

📅  最后修改于: 2023-12-03 14:50:30.788000             🧑  作者: Mango

卷积与相关

卷积(Convolution)和相关(Correlation)是信号处理中常用的操作。它们在模式识别、图像处理、语音识别等领域中都有广泛应用。

概述

卷积和相关都是基于滑动窗口的原理,对输入信号进行的一种线性变换。以一维信号为例,假设有一个长度为 $N$ 的信号序列 $x$,以及一个长度为 $M$ 的滤波器序列 $h$。则卷积和相关定义如下:

卷积: $$y[n] = \sum\limits_{k=0}^{M-1} x[n-k]h[k]$$

相关: $$y[n] = \sum\limits_{k=0}^{M-1} x[n+k]h[k]$$

其中 $n$ 表示滑动窗口的当前位置,$y$ 表示卷积或相关的输出。

二维信号的卷积和相关同理。

实现

卷积和相关的实现方法比较简单,只需要按照公式依次计算即可。但是由于信号长度和滤波器长度可能都很大,因此直接计算效率较低。常见的优化方法包括:

  • 快速傅里叶变换(FFT);
  • Strassen算法;
  • Winograd算法等。

这些方法都能在一定程度上提高计算效率。

用 Python 实现一维卷积和相关,代码如下:

def convolution(x, h):
    y = []
    M = len(h)
    padding = M - 1  # 补零数
    x = [0] * padding + x + [0] * padding  # 填充输入信号
    for n in range(len(x) - M + 1):
        y.append(sum([x[n+k]*h[k] for k in range(M)]))
    return y

def correlation(x, h):
    h.reverse()  # 将滤波器翻转相当于相关
    return convolution(x, h)
应用

卷积和相关在信号处理中有着广泛应用,包括图像的边缘检测、滤波、卷积神经网络(CNN)的卷积操作等等。

以图像处理为例,常用的卷积滤波器包括:

  • Sobel算子:用于图像边缘检测;
  • 高斯滤波器:用于图像模糊处理。

如下图所示,对于一张 5x5 的灰度图像进行 Sobel 算子卷积操作,得到边缘检测后的结果:

Sobel

总结

卷积和相关是信号处理中常用的操作,它们能够提取出信号中的特征,广泛应用于各个领域。在实现时需注意长度扩展、FFT等性能优化技巧。