一维卷积二维卷积的计算公式
时间: 2024-12-29 20:26:24 浏览: 5
### 一维卷积计算公式
对于一维离散信号 \( f[n] \) 和滤波器 \( g[n] \),两者的一维卷积定义如下:
\[ (f * g)[n] = \sum_{m=-\infty}^{\infty} f[m]g[n-m] \]
这里,\( n \) 是输出序列的位置索引;\( m \) 表示滑动窗口中的位置偏移量。当应用于有限长度的向量时,通常会假设超出边界的值为零。
```python
import numpy as np
def convolve_1d(signal, kernel):
output_length = signal.size + kernel.size - 1
result = np.zeros(output_length)
for i in range(output_length):
sum_val = 0
for j in range(max(0, i+1-kernel.size), min(i+1, signal.size)):
sum_val += signal[j]*kernel[i-j]
result[i] = sum_val
return result
```
### 二维卷积计算公式
给定一个输入矩阵 \( I(x,y) \) 和核函数(也称为滤波器或权重矩阵)\( K(u,v) \),则它们之间的二维卷积可以表示成:
\[ C(x,y)=(I*K)(x,y)=\sum _{u}\sum _{v}{I}(x-u,\ y-v)\cdot {K}(u,\ v) \]
其中 \( u \) 和 \( v \) 分别代表内层求和变量,在实际应用中,核函数往往会被先水平垂直翻转再执行上述操作[^1]。
```python
from scipy import signal
def convolve_2d(image, kernel):
flipped_kernel = np.flipud(np.fliplr(kernel))
result = signal.convolve2d(image, flipped_kernel, mode='same', boundary='fill')
return result
```
阅读全文