[英]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.