【已解决】Matlab函数imfilter在Python中的对应

更新于2020/11/30,记录Matlab中的imfilter函数在Python下的对应函数。


首先给出结论:

MatlabPython
imfilter中的’conv’scipy.ndimage.convolve
imfilter中的’corr’scipy.ndimage.correlate
imfilter中的’replicate’选项上述函数中的mode='nearest’选项
n × n n\times n n×n的核相同的核
n × 1 n\times 1 n×1的核将数值放于 n × n n\times n n×n的核的第 n / 2 + 1 n/2+1 n/2+1列(注意起始下标id=0),其余位置为0
1 × n 1\times n 1×n的核将数值放于 n × n n\times n n×n的核的第1列,其余位置为0

其中,可以用命令scipy.ndimage.filters.convolvescipy.ndimage.filters.correlate,也可以用scipy.ndimage.convolvescipy.ndimage.correlate,这两个命令是等价的

Conv

核尺寸为n×n时

下面的例子中,输入为:
在这里插入图片描述
核函数为:
在这里插入图片描述

Matlab命令:

imfilter(img, kernel, 'conv', 'replicate')

对应Python命令:

scipy.ndimage.filters.convolve(input, kernel, mode='nearest')

二者结果对比:
在这里插入图片描述
在这里插入图片描述
需要注意的是,上述命令中,Matlab下kernel的尺寸可以是列或行向量,但是Python下必须是一个 n ∗ n n*n nn的矩阵,否则会报错。

核尺寸为n×1时

当核为列向量时,在Matlab中可以直接使用。比如当核为kernel = [1, 0, 1, 2, 1, 2, 3, 7, -1]'时,Matlab命令:

output_tmp = imfilter(tmp, kernel, 'conv', 'replicate');

的运行结果如下:
在这里插入图片描述
此时,如果想要得到相同的运算结果,则需要在Python下将值放置于中心位置,如下图所示:

在这里插入图片描述
此时,Python下的计算结果为:
在这里插入图片描述
与Matlab相同。
如果核尺寸为偶数,Python核有值的位置为 n / 2 n/2 n/2(Python中下标从0开始)。比如当 n = 10 n=10 n=10的时候,需要将第6列变成当前需要的数值(即对应Python下id=5)。例如,Matlab中核为kernel = [1, 0, 1, 2, 1, 2, 3, 7, -1, 1]';,则Python下的核需要写成:
在这里插入图片描述
同样用命令

output_tmp = imfilter(tmp, kernel, 'conv', 'replicate')  % Matlab命令
scipy.ndimage.filters.convolve(input, kernel, mode='nearest')  # Python命令

得到如下结果:
在这里插入图片描述
在这里插入图片描述

核尺寸为1×n时

当核为行向量时,在Matlab中可以直接使用。比如当核为kernel = [1, 0, 1, 2, 1, 2, 3, 7, -1]时,Matlab命令:

output_tmp = imfilter(tmp, kernel, 'conv', 'replicate')

的计算结果如下:
在这里插入图片描述
如果想得到同等对应的Python结果,则需要将核变成:
在这里插入图片描述
Python下的结果为
在这里插入图片描述
对于 n n n为偶数的情况也是相同的。如,Matlab下的核为kernel = [1, 0, 1, 2, 1, 2, 3, 7, -1, 1]时,命令

output_tmp = imfilter(tmp, kernel, 'conv', 'replicate')

的结果为:
在这里插入图片描述
此时对应的Python核为:

在这里插入图片描述
结果为:
在这里插入图片描述

Corr

核尺寸为n×1时和核尺寸为1×n时的对应关系与前文Conv中所述相同,这里不再赘述。

下面的例子中,输入为:
在这里插入图片描述
核函数为:
在这里插入图片描述

Matlab命令:

imfilter(img, kernel, 'corr', 'replicate')

对应Python命令:

scipy.ndimage.filters.correlate(input, kernel, mode='nearest')

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值