[英]The equivalent function of Matlab imfilter in Python
我知道conv2
和corr2
的等效函数是scipy.signal.correlate
和scipy.signal.convolve
。 但是函数imfilter
具有处理数组边界外的属性。 像symmetric
、 replicate
和circular
。 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返回预期答案的转置。
请参阅此处的文档以获取更多选
编辑1:
MATLAB提供了更多选项,如此处所述 。 具体来说,如果我们希望使用'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
我需要在 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 get a gaussian filter in python 中获取
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.