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).但是有时候,字典中的每个键都存在默认值是非常 ...
 
随机推荐
- java数据结构之三叉链表示的二叉树
			
三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点.右孩子结点.父亲结点[三叉]的引用(指针)数据和数据组成. package datastructure.tree.btree; ...
 - Centos下Kubernetes+Flannel部署(新)
			
一.准备工作 1) 三台centos主机 k8s master: 10.11.151.97 tc-151-97 k8s node1: 10.11.151.100 tc-151-100 k8s no ...
 - web前端html快速入门
			
HTML 学前端之间不得不知道一个网站:http://www.w3school.com.cn/ 网上有很多教程关于前端的,写的特别详细,也写的特别好.我们应该要自已理解,一些相应的前端的知识,不能只是 ...
 - 用as3.0制作一个滚动条组件
			
本实例演示了实现一个滚动条基本功能的制作方法,没有添加改变皮肤,修改滚动条视框大小等功能,有兴趣的朋友可根据自己要求自行添加.使用时只需要通过以下一行代码创建滚动条组件: var myScrollba ...
 - 【Express系列】第4篇——使用session
			
session 在 web 应用中使用很普遍,不过在 node 上面,要用 session 还真得折腾一番才行. 从加入中间件,到 session 的写入.清除,当时是遇到了不少坑的. 当然也可能是我 ...
 - 共识算法:PBFT、RAFT
			
转自:https://www.cnblogs.com/davidwang456/articles/9001331.html 区块链技术中,共识算法是其中核心的一个组成部分.首先我们来思考一个问题:什么 ...
 - ASP .NET Core 基本知识点示例 目录
			
ASP.NET Core 的 运行机制 文章 ASP.NET Core 中的 配置 文章 源代码 ASP.NET Core 中的 依赖注入 文章 源代码 ASP.NET Core 中的 日志 文章 源 ...
 - JAVA   对象的行为 总结
			
对象的行为 1. 断点调试 a:定位(设置断点) b:启动调试 c:单步执行 观察变量(F5单步执行 F6单步跳过)d:修改2 static 静态 静态成员,为类的所有对象共享 在 ...
 - redis实战笔记(10)-第10章 扩展Redis
			
本章主要内容 扩展读性能 扩展写性能以及内存容量 扩展复杂的查询 随着Redis的使用越来越多, 只使用一台Redis服务器没办法存储所有数据或者没办法处理所有读写请求的问题迟早都会出现, 这 ...
 - linux下在线升级nodejs
			
因现有项目需要用一个截屏node包,此包必须新版本,所以紧急升级下测试环境nodejs,后续再升级线上,小小试了下node在线升级 方案1,使用npm安装n模块,使用n来升级nodejs 首先要知道n ...