繁体   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