Python中与Matlab imfilter等效的函数
我知道MATLAB中的conv2
和corr2
函数在Python中对应的是scipy.signal.correlate
和scipy.signal.convolve
。不过,MATLAB的imfilter
函数有一个特点,就是它可以处理数组边界之外的情况,比如symmetric
(对称)、replicate
(复制)和circular
(循环)。那么,Python能做到这些吗?
4 个回答
1
我需要在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
的代码可以从这个链接获取:如何在Python中获得高斯滤波器
8
我想分享一些实用的代码,关于在Python中实现和MATLAB中imfilter(A, B)
相同的功能,适用于简单的二维图像和滤波器(内核)。我发现下面的代码能得到和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中的'nearest'
是相同的。
3
使用函数 scipy.ndimage.filters.correlate
和 scipy.ndimage.filters.convolve