簡體   English   中英

Python中Matlab imfilter的等效功能

[英]The equivalent function of Matlab imfilter in Python

我知道conv2corr2的等效函數是scipy.signal.correlatescipy.signal.convolve 但是函數imfilter具有處理數組邊界外的屬性。 symmetricreplicatecircular 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.correlatescipy.ndimage.filters.convolve

之前的選項對我來說與 MATLAB 的imfilter工作方式不同,而是我使用了cv2.filter2D 代碼將是:

import cv2

filtered_image = cv2.filter2D(image, -1, kernel)

原圖是: 在此處輸入圖片說明

使用 MATLAB 的imfilter 在此處輸入圖片說明

使用scipy.ndimage.convolvescipy.ndimage.correlate 在此處輸入圖片說明

並使用cv2.filter2D 在此處輸入圖片說明

由於我從 MATLAB 保存圖像的方式和從cv2保存圖像的方式,它們在這里看起來並不完全相同,但相信我,它們是。

我需要在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM