MATLAB filter2/conv2 函数在 Python 语言中的等价函数
MATLAB filter2 和 conv2 函数说明
在 MATLAB 中,filter2 函数实现二维数字滤波器.conv2 函数实现二维卷积.
filter2(H, X, mode) 等价于 conv2(X, rot90(H,2), mode). 其中,H 表示有理传递函数的系数(Coefficients of rational transfer function),即常说的滤波器核或卷积核.X 表示输入数据.mode 表示卷积或滤波所采用的模式,其决定了返回数据的长度,以及结果数据的不同部分.共有三种模式:'full', 'same', 'valid',具体含义详见 filter2 函数的shape 参数文档说明,或查看我的博文相关与卷积(数字信号处理)的数学原理及 Python 实现 的原理部分.
注:MATLAB 中,B = rot90(A, k) 将数组 A 逆时针旋转 k*90 度,其中 k 为整数.
Python 中的等价函数
在 Python 中,MATLAB filter2 的等价函数是scipy.signal.correlate2d;MATLAB conv2 的等价函数是 scipy.signal.convolve2d.
具体来说,filter2(H, X, mode) 等价于 scipy.signal.correlate2d(X, H, mode);conv2(X, H, mode) 等价于 scipy.signal.convolve2d(X, H, mode).
注意,filter2(MATLAB) 与 scipy.signal.correlate2d的输入参数 H, X 的顺序是不一致的.
如果二维滤波或卷积结果采用常用的 'same' 模式,还可以使用 Python 中的 cv2.filter2D (OpenCV模块), scipy.ndimage.correlate 和 scipy.ndimage.convolve 替代.对于二维滤波('same'模式)的具体用法为
cv2.filter2D(X, -1, H, borderType=cv2.BORDER_CONSTANT)
scipy.ndimage.correlate(X, H, mode='constant', cval=0.0)
scipy.ndimage.convolve(X, np.rot90(H,2), mode='constant', cval=0.0)
示例
MATLAB 代码
X = [ ]; % input data
H = [ ]; % kernel % display filter2() results
disp('filter2 results');
fprintf('full: '); disp(filter2(H, X, 'full'));
fprintf('same: '); disp(filter2(H, X, 'same'));
fprintf('valid: '); disp(filter2(H, X, 'valid'));
fprintf('\n'); % display conv2() results
disp('conv2 results');
fprintf('full: '); disp(conv2(H, X, 'full'));
fprintf('same: '); disp(conv2(H, X, 'same'));
fprintf('valid: '); disp(conv2(H, X, 'valid'));
fprintf('\n');
Python 代码
import numpy as np
import scipy.ndimage
import scipy.signal
import cv2 X = np.array([1, 2, 3]).reshape(1,3) # input data
H = np.array([4, 5, 6]).reshape(1,3) # kernel # display scipy.signal.correlate2 results
print ("scipy.signal.correlate2d results")
print ("full: {}".format(scipy.signal.correlate2d(X, H, 'full')))
print ("same: {}".format(scipy.signal.correlate2d(X, H, 'same')))
print ("valid: {}".format(scipy.signal.correlate2d(X, H, 'valid'))) print ('')
# display scipy.signal.convolve2 results
print ("scipy.signal.convolve2d results")
print ("full: {}".format(scipy.signal.convolve2d(X, H, 'full')))
print ("same: {}".format(scipy.signal.convolve2d(X, H, 'same')))
print ("valid: {}".format(scipy.signal.convolve2d(X, H, 'valid'))) # others
print ("\nother filters in Python ('same' mode)")
print ("cv2.filter2D: {}".format(cv2.filter2D(X.astype('float32'), -1, H, borderType=cv2.BORDER_CONSTANT)))
print ("scipy.ndimage.correlate: {}".format(scipy.ndimage.correlate(X, H, mode='constant', cval=0.0)))
print ("scipy.ndimage.convolve: {}".format(scipy.ndimage.convolve(X, np.rot90(H,2), mode='constant', cval=0.0)))
注:cv2.filter2D 在 OpenCV 3.4.0 中,不支持整数类型的输入数据,需要先转为浮点型如 'float32' 等,才能正确执行.
参考资料
1. Equivalent of Matlab filter2(filter, image, 'valid') in python. https://stackoverflow.com/questions/43270274/equivalent-of-matlab-filter2filter-image-valid-in-python
2. Equivalent function of matlabs filter2 in opencv. https://stackoverflow.com/questions/29212944/equivalent-function-of-matlabs-filter2-in-opencv
3. What is the difference between conv2, filter2 and imfilter..? https://www.mathworks.com/matlabcentral/answers/17529-what-is-the-difference-between-conv2-filter2-and-imfilter
MATLAB filter2/conv2 函数在 Python 语言中的等价函数的更多相关文章
- Python语言中各种进制相互转换
目录 Python语言中各种进制相互转换 将二进制.八进制.十进制的数分别转换成十进制的方法 将十进制转换成二进制.八进制.十六进制 Python语言中各种进制相互转换 本文参考自https://ww ...
- js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么
js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...
- Python语言中的关键字(自己做的读书笔记)
电脑配置:联想笔记本电脑 windows8系统 Python版本:2.7.8 本文章撰写时间:2015.1.1 作者:陈东陈 阅读说明: 1.本文都是先解释,后放图片: 2.文中斜体部分要么为需要输入 ...
- 了解 Python 语言中的时间处理
python 语言对于时间的处理继承了 C语言的传统,时间值是以秒为单位的浮点数,记录的是从1970年1月1日零点到现在的秒数,这个秒数可以转换成我们日常可阅读形式的日期和时间:我们下面首先来看一下p ...
- python语言中的编码问题
在编程的过程当中,常常会遇到莫名其妙的乱码问题.很多人选择出了问题直接在网上找答案,把别人的例子照搬过来,这是快速解决问题的一个好办法.然而,作为一个严谨求实的开发者,如果不从源头上彻底理解乱码产生的 ...
- python语言中的编码问题(续)
上文提到了python开发中非常重要的两处设置. 一个是编解码器的默认设置defaultencoding >>> import sys >>> sys.getdef ...
- python语言中的函数装饰器
装饰器 什么是装饰器? 装饰:给已有的对象(函数)添加新的功能 器:工具 在python中指具备某些功能的函数 装饰器:装饰器就是一个给其他函数增加功能的函数 一种设计原则: ...
- python语言中的数据类型之字典
数据类型 字典类型dict 用途:记录多个值,列表是索引对应值,而字典是key对应值,其中key对value有描述性 定义方式:在{ }用逗号分隔开多个元素,每个元素都是key:value形式,其中k ...
- 理解 Python 语言中的 defaultdict
众所周知,在Python中如果访问字典中不存在的键,会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined).但是有时候,字典中的每个键都存在默认值是非常 ...
随机推荐
- django第三课 模版
第一步 创建项目文件: django-admin.py startproject *** 第二步 进入该文件下创建文件夹templates,在该文件夹下创建thanks.html <!DOCTY ...
- 搭建互联网架构学习--005--框架初步拆分ssm单一框架
经过前边的准备步骤,服务器基本搭建完毕,接下来就开始一步步搭建框架了. 拆分单一结构:拆分的目的是为下一步引入dubbo做准备的. 把下边这个单一maven框架进行拆分 这个就是一个简单的maven项 ...
- Eclipse-查看jar源码乱码问题解决
步骤1: 在eclipse菜单栏中,Window–>Preferences–>General–>Content types,将JAR Content , Java Class Fil ...
- Asp.Net Core 连接Mysql
上一篇文章里最后在VS里测试是没有问题的,但是在Windows命令行模式下会报错. 首先用dotnet restore命令的时候会出现error: 然后用dotnet run会出现警告,但是依旧会成功 ...
- 按照Right-BICEP要求对实验二进行测试
我的代码实现的功能很简单,在最基本的功能上,包括有无括号(0/1),有无负数(0/1),有无乘除法(0/1)验证程序的正确性,测试用例为8个,2^3个,也就覆盖了所有的代码路径. 测试计划: 基本功能 ...
- ABP实战--集成Ladp/AD认证
参照Hunter的ABP-Zero模块中用户管理部分. 由于我们公司的各系统基本都是AD帐号登录的,所以我们需扩展ABP的AuthenticationSource. 添加MyLdapAuthentic ...
- elasticsearch分析系列
http://www.opscoder.info/category/ElasticSearch/?page=2 https://www.jianshu.com/p/0908b9ee65fc https ...
- [codeup] 1126 看电视
题目描述 暑假到了,小明终于可以开心的看电视了.但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目. 现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗? 输入 输入包含多组测试数据.每 ...
- mongodb自学
http://www.runoob.com/mongodb/mongodb-databases-documents-collections.html
- Spring Aop之@Before、@After、@Around、@AfterReturning
在项目中使用到了@Aspect注解,故研究了下与其配套的几个注解,将测试结果记录下来 import org.aspectj.lang.JoinPoint; import org.aspectj.lan ...