【CV】图像卷积计算即二维矩阵卷积(Python)
卷积与数字图像
- 什么是卷积
- 一维线性卷积
- 参数'full'
- 参数'same'
- 参数'valid'
- 二维线性卷积
什么是卷积
一维线性卷积
线性卷积(linear convolution) 在时域描述线性系统输入和输出之间关系的一种运算。这种运算在线性系统分析和信号处理中应用很多,通常简称卷积。中文名:数字信号处理
什么是线性卷积,抛出代码:
import numpy as np>>np.convolve([1, 2, 3], [1, 2, 3], 'full')
>>np.convolve([1, 2, 3], [1, 2, 3], 'same')
>>np.convolve([1, 2, 3], [1, 2, 3], 'valid')
array([ 1, 4, 10, 12, 9])
array([ 4, 10, 12])
array([ 10])
根据线性卷积的计算性质,长度x的序列1与长度y的序列2进行线性卷积,可以得到x+y-1的长度的卷积序列。而卷积规则,可以通过不进位相乘法计算出来。
即:
参数’full’
拿到完整的卷积结果,即[1, 4, 10, 12, 9]
参数’same’
以中间向两边散开,拿到第一个输入数组同样长度的卷积数组
ps:如果输入数组是偶数长度,则最后一个数向左边取,即:
>>np.convolve([1, 2, 3, 4], [1, 2, 3, 4], 'same')array([ 1, 4, 10, 20, 25, 24, 16])
参数’valid’
拿到卷积序列的中间部分的一个/两个数(若x×y-1为奇数则取1个,偶数则取2个)
>>np.convolve([1, 2, 3, 4], [1, 2, 3, 4], 'valid')
>>np.convolve([1, 2, 3, 4], [1, 2, 3], 'valid')array([10])
array([10, 16])
二维线性卷积
现在有一张图片 f(x,y) 和一个kernel核 w(a,b)。
二维卷积又是个怎么卷法呢?从二维矩阵f(x,y)中拿到第一个值1,1的位置对上卷积核kernel w(a,b)中心位置(卷积核就是一个矩阵),对应位置的值与矩阵元素相乘最后求和,得到的值便是新的值-8,以此类推,取得所有位置的新值,最后图片的最外层填上0就可以了。二维卷积得到的大小取决与卷积核,而卷积核大小一般是奇数大小(例1×1, 3×3, 5×5),设图片大小为X1×Y1,卷积核大小为X2×X2,新的图片大小就是[X1 + (X2-1)÷2]×[Y1 + (X2-1)÷2]。为什么卷积核的大小一般是奇数呢,以3×3的卷积核,上图的图片左上角的1为例子,卷积后图片的像素值取决1周围一圈的像素值,取决的权重由卷积核决定,又因卷积核只有左上角值为4和右下角的值为-4,所以在图片的含义就是将左上角与右下角的像素亮度相减再加强。这是不是就好理解一点了呢
那么,python如何进行二维线性卷积呢?
from scipy import signaldata = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
nurcle = np.array([[0, 0, 0], [0, 1, 0], [0, 0, 0]])
signal.convolve2d(data, nurcle)
signal.convolve2d(data, nurcle, 'same')
signal.convolve2d(data, nurcle, 'valid')第一个得到的是:
[0 0 0 0 0]
[0 1 2 3 0]
[0 4 5 6 0]
[0 7 8 9 0]
[0 0 0 0 0]
第二个得到的是:
[1 2 3]
[4 5 6]
[7 8 9]
第三个得到的是:
[5]
【CV】图像卷积计算即二维矩阵卷积(Python)相关推荐
- python 轮廓矩阵_二进制二维矩阵的python轮廓
我想计算一个二元NxM矩阵中一个形状的凸壳.凸壳算法需要一个坐标列表,所以我采用纽比.阿尔格何处(im)具有所有形状点坐标.但是,这些点中的大多数并没有对凸包起作用(它们位于形状的内部).因为凸包计算 ...
- 【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵
首先,使用下面的代码,创建3个2×2的矩阵A.B.C. import numpy as np A = [[1, 2], [3, 4]] B = [[5, 6], [7, 8]] C = [[9, 9] ...
- python图像卷积_图像处理——卷积原理、二维卷积python实现
一:什么是卷积 离散卷积的数学公式可以表示为如下形式: f(x) = - 其中C(k)代表卷积操作数,g(i)代表样本数据, f(x)代表输出结果. 举例如下: 假设g(i)是一个一维的函数,而且代 ...
- 二维矩阵与二维矩阵之间的卷积
最近在学习数字图像处理(Digital Image Processing,DIP)这门课,感觉有些吃力.由于在数字信号处理(Digital Singal Processing, DSP)这门课中只学了 ...
- matlab 把图像变成二维的,matlab图像怎么变成二维矩阵
求:matlab二维直方图图像分割程序.. 我给你个网站``里面的教学很详细~~希望能帮到你~~~~反正里面的软件教程很多``就是不知道有没你要找的``如果有~~给我加分哈``http://tech. ...
- 基于二维矩阵的FFT计算原理
FFT算法是信号处理领域最基本.最经典的算法,在工程实践中用处十分广泛,但是在一些对FFT点数要求较大或者计算FFT实时性要求较高的场合,按常规方式直接计算FFT难以满足工程实际的要求.本文针对长点数 ...
- Linux下采用lapack科学计算包来实现二维矩阵
1.调用lapack包的方式,写一个头文件 my_lapack.h (Linux如何安装lapack包?) #ifndef MY_LAPACK_H #define MY_LAPACK_Hextern ...
- 二维反卷积 matlab,二维反卷积的实现(实际意义不明确)
前言 一维反卷积(deconv),可以很好的实现一维卷积的反过程!但是二维反卷积就很难恢复了!为什么呢?因为我们知道二维卷积计算的过程就是:卷积核不断滑动,卷积核不断与原始数据中的小矩阵做" ...
- 图像的傅里叶变换,二维傅里叶变换的物理意义
从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换.它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分.在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变 ...
最新文章
- 程序员的自我修养--链接、装载与库笔记:Windows下的动态链接
- apple tv 开发_如何防止Apple TV进入睡眠状态
- java 配置参数_给你的JAVA程序配置参数(Properties的使用)
- Prime Distance On Tree-树分治+FFT
- wampserver服务器无法启动(图标颜色不对)
- LeetCode-114: 二叉树展开为链表
- Ext.Net 最新版(2011-06-24)License 问题
- 奇安信代码安全实验室帮助Red Hat修复多个QEMU高危漏洞,获官方致谢
- opencv linux 编译好,linux下编译opencv
- DirectX Audio和DirectShow入门
- VScode中SVN插件详细配置【官网】
- CI框架之连接数据库
- 强化学习之Q-Learning(附代码)
- 雨过天晴电脑保护系统校园版
- word计算机公式怎么算,word怎么实现自动计算公式
- Pandas数据分析3-统计、可视化、创建数据框、时间序列、删除数据
- Linux学习笔记----01
- 《北国之春》--华为总裁:任正非
- NVMe 协议详解(一)
- 程序员婚恋那点事儿(四):程序员与程序媛的婚礼