Python中matlab imfilter的等效函数
Posted
技术标签:
【中文标题】Python中matlab imfilter的等效函数【英文标题】:The equivalent function of Matlab imfilter in Python 【发布时间】:2014-04-04 05:48:10 【问题描述】:我知道MATLAB的conv2
和corr2
的等效函数是scipy.signal.correlate
和scipy.signal.convolve
。但是函数imfilter
具有处理数组边界之外的属性。比如symmetric
、replicate
和circular
。 Python 能做到这些吗
【问题讨论】:
【参考方案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
可以取自How to obtain a gaussian filter in python
【讨论】:
【参考方案2】:对我来说,之前的选项与 MATLAB 的 imfilter
的工作方式不同,而是我使用了 cv2.filter2D
。代码是:
import cv2
filtered_image = cv2.filter2D(image, -1, kernel)
原图是:
使用 MATLAB 的imfilter
:
使用scipy.ndimage.convolve
或scipy.ndimage.correlate
:
还有cv2.filter2D
:
由于我从 MATLAB 和 cv2
保存图像的方式,它们在这里看起来并不完全相同,但相信我,它们是。
【讨论】:
【参考方案3】:只是为了添加一些可靠的代码,我希望 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'
相同。
【讨论】:
【参考方案4】:使用函数scipy.ndimage.filters.correlate
和scipy.ndimage.filters.convolve
【讨论】:
您能详细说明一下吗?我正在尝试完全复制profil2 = imfilter(profil,h,'replicate');
。以上是关于Python中matlab imfilter的等效函数的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 matlab 中使用 imfilter 计算两个图像之间的相关性吗?
matlAB中gv=imfilter(I2,sv,'replicate')是啥意思
python中Matlab的等效命令'end'是啥? [复制]
MATLAB中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()或im2double()将数据类型转换为浮点型