2017-04-12 76 views

回答

1

为了这个目的,我强烈推荐使用openCV。但是原则上,你几乎可以直接使用“伪代码”的wiki-article on kernel convolution创建自己的功能...

ks = (kl-1)/2 ## kernels usually square with odd number of rows/columns 
kl = len(kernel) 
imx = len(matrix) 
imy = len(matrix[0]) 
for i in range(imx): 
    for j in range(imy): 
    acc = 0 
    for ki in range(kl): ##kernel is the matrix to be used 
     for kj in range(kl): 
     if 0 <= i-ks <= kl: ## make sure you don't get out of bound error 
      acc = acc + (matrix[i-ks+ki][j-ks+kj] * kernel[ki][kj]) 
    matrix[i][j] = acc 

此原则上应做的伎俩(但我还没有测试它... )

我希望这是有帮助的。

1

你SciPy的的ndimage它允许你用convolve进行N维卷积:

from scipy.ndimage import convolve 
convolve(data, kernel) 

我知道你说你想避免SciPy的......但我会建议反对。 Scipy在很多方面都很棒。如果你想在Windows上安装它,请尝试Anaconda Distribution,它已安装scipy。

Anaconda是一个多平台的python发行版,其中包含预装的所有基本库(包括大量科学计算库)以及诸如pipconda之类的工具来安装新的库。不,他们不付钱给我做广告:/但让你的多平台生活更容易。

+0

感谢您的建议,但SciPy方法不太可行,因为我开发的是被其他人使用,所以我更喜欢简单的方法来安装任何先决条件,'pip install [package]'是一个众所周知的方法,需要人们使用是合理的,但安装Anaconda Distribution之类的东西是另一种球类游戏。 – EquipDev

+0

@EquipDev Scipy被认为是Python核心包之一。也许python不是你的语言。在没有scipy/numpy的情况下使用python进行数据分析就像使用没有工具箱的matlab。 –