【发布时间】:2014-04-04 05:48:10
【问题描述】:
我知道MATLAB的conv2和corr2的等效函数是scipy.signal.correlate和scipy.signal.convolve。但是函数imfilter 具有处理数组边界之外的属性。比如symmetric、replicate 和circular。 Python 能做到这些吗
【问题讨论】:
我知道MATLAB的conv2和corr2的等效函数是scipy.signal.correlate和scipy.signal.convolve。但是函数imfilter 具有处理数组边界之外的属性。比如symmetric、replicate 和circular。 Python 能做到这些吗
【问题讨论】:
我需要在 Python 中为 Matlab 中的高斯滤波器复制完全相同的结果,并得出以下结果:
Matlab:
A = imfilter(A, fspecial('gaussian',12,3));
Python:
A = scipy.ndimage.correlate(A, matlab_style_gauss2D((12,12),3), mode='constant', origin=-1)
其中matlab_style_gauss2D 可以取自How to obtain a gaussian filter in python
【讨论】:
只是为了添加一些可靠的代码,我希望 imfilter(A, B) 在 python 中等效于简单的二维图像和过滤器(内核)。我发现以下结果与 MATLAB 相同:
import scipy.ndimage
import numpy as np
scipy.ndimage.correlate(A, B, mode='constant').transpose()
对于给定的问题,这将起作用:
scipy.ndimage.correlate(A, B, mode='nearest').transpose()
请注意,由于某种原因,MATLAB 会返回预期答案的转置。
有关更多选项,请参阅文档 here。
编辑 1:
MATLAB 提供了更多选项,如 here 所述。具体来说,如果我们希望使用 'conv' 选项,我们有 MATLAB 代码(例如):
imfilter(x, f, 'replicate', 'conv')
这与 python 等价:
scipy.ndimage.convolve(x, f, mode='nearest')
注意 MATLAB 中的 'replicate' 与 Python 中 SciPy 中的 'nearest' 相同。
【讨论】:
使用函数scipy.ndimage.filters.correlate 和scipy.ndimage.filters.convolve
【讨论】:
profil2 = imfilter(profil,h,'replicate');。