最快卷积操作:公式证明傅里叶变换与卷积等效

scipy示例

FFT卷积速度相较于一般的卷积提升1000倍!!!
首先使用scipy或者astropy实例论证一下,傅里叶变换和卷积的速度和结果。
代码:

import numpy as np
from skimage import io
import matplotlib.pyplot as plt
from scipy.signal import convolve2d, fftconvolve
from skimage.color import rgb2hsv, rgb2gray, rgb2yuv


def gaussian_kernel(size, sigma):
    x, y = np.meshgrid(np.linspace(-1,1,size), np.linspace(-1,1,size))
    d = np.sqrt(x*x+y*y)
    return np.exp(-(d**2 / (2.0*sigma**2)))


image = rgb2gray(io.imread('galaxy.jpg'))
kernel = gaussian_kernel(256, 0.05)

scipy_image = convolve2d(image, kernel, 'same').astype('float32')
scipy_fft = fftconvolve(image, kernel, 'same').astype('float32')

plt.subplot(141)
plt.imshow(image)
plt.title('raw image')
plt.xticks([])
plt.yticks([])

plt.subplot(142)
plt.imshow(scipy_fft)
plt.title('scipy convolve')
plt.xticks([])
plt.yticks([])

plt.subplot(143)
plt.imshow(scipy_image)
plt.title('scipy fftconvolve')
plt.xticks([])
plt.yticks([])

plt.subplot(144)
plt.imshow(scipy_image - scipy_fft)
plt.title('scipy fftconvolve')
plt.xticks([])
plt.yticks([])

plt.show()

速度对比:

conv time:  0:02:44.446224
fft time:  0:00:00.050510

如果没算错的话,相差1000倍!!!
结果对比:
在这里插入图片描述

PS:示例中使用的图片是 256 × 256 256\times256 256×256的,卷积核也是 256 × 256 256\times256 256×256的高斯核!!!

卷积

在信号处理中,卷积是一种数学操作,它通常被用于信号滤波、信号重构等领域。卷积的定义如下:

假设有两个连续时间信号 F(t) 和 G(t),它们的卷积函数是 h(t)。卷积函数的定义为:
h ( t ) = ∫ [ f ( τ ) ∗ g ( t − τ ) ] d τ h(t) = \int [f(τ) * g(t-\tau)] d\tau h(t)=[f(τ)g(tτ)]dτ
这个公式的含义是,将一个信号(f(t))和另一个信号(g(t))反向后移位,然后以每个τ的位置进行乘积并对每个τ积分,最后得到积分值作为卷积函数(h(t))在时间点(t)的值。卷积函数 h(t) 描述的是信号 f(t) 和 g(t) 重叠部分的积分,因此卷积函数 h(t) 反映了信号 f(t) 和 g(t) 之间的相互作用。
值得注意的是,卷积函数 h(t) 的定义是在连续时间下的,如果信号 f(t) 和 g(t) 是离散时间的,则卷积函数的定义方式也需要做相应的变换,具体方式为:
h ( n ) = ∑ [ f ( k ) ∗ g ( n − k ) ] h(n) = \sum [f(k) * g(n-k)] h(n)=[f(k)g(nk)]
其中 k 取值范围是负无穷到正无穷,但是只有 f(k) 和 g(n-k) 在信号长度范围内时才计算。

傅里叶变换

傅里叶变换是一种将信号从时间域转换到频率域的数学操作。在信号处理中,傅里叶变换通常用于分析信号的频域成分,对信号进行滤波、压缩、去噪等处理。
在连续时间信号处理中,假设一个信号为 f(t),它的傅里叶变换函数为 F(w),傅里叶变换的定义如下:
F ( w ) =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下0516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值