scipy(或另一个流行的库)中是否内置了基于FFT的2D互相关或卷积函数?
有如下功能:
scipy.signal.correlate2d
-“convolveND
大数据执行的直接方法将很慢”scipy.ndimage.correlate
-“使用精确计算(即不使用FFT)将数组与给定内核相关联。”scipy.fftpack.convolve.convolve
,我不太了解,但似乎有误numarray有一个correlate2d()
带fft=True
switch的函数,但是我想numarray被折叠成numpy了,我找不到是否包含此函数。
我发现scipy.signal.fftconvolve
,因为还马格努斯指出,但它的时候并没有意识到
ñ 维。由于它是内置的并且可以产生正确的值,因此它似乎是理想的解决方案。
查看scipy.signal.fftconvolve,signal.convolve和signal.correlate(有一个signal.correlate2d,但它似乎返回一个移位的数组,而不是居中)。
从2D卷积示例中:
In [1]: a = asarray([[ 1, 2, 3],
...: [ 4, 5, 6],
...: [ 7, 8, 9]])
In [2]: b = asarray([[-1,-2,-1],
...: [ 0, 0, 0],
...: [ 1, 2, 1]])
In [3]: scipy.signal.fftconvolve(a, b, mode = 'same')
Out[3]:
array([[-13., -20., -17.],
[-18., -24., -18.],
[ 13., 20., 17.]])
正确!另一方面,STSCI版本需要做一些额外的工作才能使边界正确吗?
In [4]: stsci.convolve2d(a, b, fft = True)
Out[4]:
array([[-12., -12., -12.],
[-24., -24., -24.],
[-12., -12., -12.]])
(STSCI方法还需要编译,但我不成功(我刚刚注释掉了非python部分),有一些类似这样的错误并修改了输入([1,2]变成[[1,2]]),等等。因此,我更改了对内置fftconvolve()
函数的接受答案。)
当然,相关与卷积是一样的,但是其中的一个输入相反:
In [5]: a
Out[5]:
array([[3, 0, 0],
[2, 0, 0],
[1, 0, 0]])
In [6]: b
Out[6]:
array([[3, 2, 1],
[0, 0, 0],
[0, 0, 0]])
In [7]: scipy.signal.fftconvolve(a, b[::-1, ::-1])
Out[7]:
array([[ 0., -0., 0., 0., 0.],
[ 0., -0., 0., 0., 0.],
[ 3., 6., 9., 0., 0.],
[ 2., 4., 6., 0., 0.],
[ 1., 2., 3., 0., 0.]])
In [8]: scipy.signal.correlate2d(a, b)
Out[8]:
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[3, 6, 9, 0, 0],
[2, 4, 6, 0, 0],
[1, 2, 3, 0, 0]])
并且内部使用了2的幂次方加速了最新的修订版(然后我通过使用实数FFT作为实数输入并使用5平滑长度而不是2
:D的幂来加快了它的更新速度)。
有没有人知道关于Mayer FFT实现的任何事情(而不需要我花很多时间研究代码)? 我正在尝试执行一个卷积,而ifft似乎产生了我所谓的“镜像”输出。换句话说,我的内核+信号长度被限制为N/2,并且任何占据N=0....N/2的内容都被镜像到N=N...N/2左右。在负频率下,它看起来有点像我所期望的FFT...除了在负时间下,它就像一面镜子。 下面是我的卷积代码: 我曾经尝试用这个mayer F
对于用大内核(筛选器)卷积大图像来说速度慢得不切实际。将一个1024x1024的图像与一个相同大小的内核进行卷积需要几分钟的时间。为了进行比较,立即返回结果。 我找到了和。 然而,我并不清楚如何使用这些函数执行简单的图像过滤。 如何使用FFT与TensorFlow实现快速二维图像滤波?
问题内容: 几个用户询问在numpy的或SciPy的[图像卷积的速度或存储器消耗1,2,3,4 ]。从回答和我使用Numpy的经验来看,与Matlab或IDL相比,我认为这可能是numpy的主要缺点。 到目前为止,没有一个答案能解决整个问题,所以这里是:“用Python计算2D卷积最快的方法是什么?” 常见的python模块是公平的游戏:numpy,scipy和PIL(其他?)。为了比较具有挑战性
我试图设计和训练一个卷积神经网络来识别图像中的圆形细胞。我在完整图像的“切口”上训练它,这些图像中间要么有一个圆(正训练样本),要么没有(负训练样本)。 中间有一个圆圈的图像示例(热图颜色不稳定,图像均为灰度):http://imgur.com/a/6q8LZ 我希望网络输出是一个二进制位图,而不仅仅是对两种类型的输入图像(圆形或不在中间)进行分类,如果输入图像中没有圆形,则该位图是一个统一的值(
我有32760个音频频谱,计算维度=72(#帧)x 40(#频段),我试图将其输入“宽”卷积神经网络(第一层是4个不同conv层的合奏)。这些频谱没有深度,因此它们可以表示为72 x 40 2D数字浮点数组,因此分类器的X输入是一个32760个元素长的数组,每个元素都是这些72 x 40 x 1频谱之一。Y输入是一个标签数组,一个热编码,有32760个元素。 当尝试使用 我得到以下错误: 以下是我
图像的卷积(Convolution)定义为 $$f(x) = act(\sum{i, j}^n \theta{(n - i)(n - j)} x_{ij}+b)$$ 其计算过程为 示例1 import tensorflow as tf import numpy as np sess = tf.InteractiveSession() input_batch = tf.constant([