相关疑难解决方法(0)

Python中基于FFT的2D卷积和相关

是否有基于FFT的2D互相关或卷积函数内置于scipy(或其他流行的库)?

有这样的功能:

  • scipy.signal.correlate2d- "实施的直接方法convolveND对于大数据来说会很慢"
  • scipy.ndimage.correlate - "使用精确计算(即不是FFT)将数组与给定内核相关联."
  • scipy.fftpack.convolve.convolve,我真的不明白,但似乎错了

numarray有一个correlate2d()fft=True开关功能,但我猜numarray被折叠成numpy,我无法找到是否包含此功能.

python signal-processing numpy image fft

21
推荐指数
3
解决办法
3万
查看次数

改善Numpy表现

我想使用python提高卷积的性能,并希望能够对如何最好地提高性能有所了解.

我目前正在使用scipy执行卷积,使用的代码有点像下面的代码片段:

import numpy
import scipy
import scipy.signal
import timeit

a=numpy.array ( [ range(1000000) ] )
a.reshape(1000,1000)
filt=numpy.array( [ [ 1, 1, 1 ], [1, -8, 1], [1,1,1] ] )

def convolve():
  global a, filt
  scipy.signal.convolve2d ( a, filt, mode="same" )

t=timeit.Timer("convolve()", "from __main__ import convolve")
print "%.2f sec/pass" % (10 * t.timeit(number=10)/100)
Run Code Online (Sandbox Code Playgroud)

我正在处理图像数据,使用灰度(0到255之间的整数值),我目前每个卷积得到大约四分之一秒.我的想法是做以下其中一项:

使用corepy,最好进行一些优化使用icc和ikml重新编译numpy.使用python-cuda.

我想知道是否有人对这些方法有任何经验(什么样的增益是典型的,如果值得花时间),或者是否有人知道有更好的库与Numpy进行卷积.

谢谢!

编辑:

通过使用Numpy在C中重写python循环来加速大约10倍.

python math numpy convolution scipy

18
推荐指数
1
解决办法
6285
查看次数

使用python和numpy的2d卷积

我试图使用numpy在python中执行2d卷积

我有一个2d数组,如下所示,行内核为H_r,列为H_c

data = np.zeros((nr, nc), dtype=np.float32)

#fill array with some data here then convolve

for r in range(nr):
    data[r,:] = np.convolve(data[r,:], H_r, 'same')

for c in range(nc):
    data[:,c] = np.convolve(data[:,c], H_c, 'same')

data = data.astype(np.uint8);
Run Code Online (Sandbox Code Playgroud)

它不会产生我期望的输出,这段代码看起来不错,我认为问题在于从float32到8bit的转换.什么是最好的方法来做到这一点

谢谢

python numpy convolution

14
推荐指数
3
解决办法
4万
查看次数

标签 统计

numpy ×3

python ×3

convolution ×2

fft ×1

image ×1

math ×1

scipy ×1

signal-processing ×1