二维卷积/矩阵卷积

article/2025/9/12 7:59:29

二维卷积/矩阵卷积的计算方程

设有矩阵A和矩阵B,它们的卷积结果矩阵的元素可由下列公式计算得来:

C(j,k)=pqA(p,q)B(jp+1,kq+1)

其中的index只要在A,B中valid都要参与运算。
举例来说,令矩阵M为卷积核矩阵,矩阵I为图像矩阵,其元素如下:
M=[1324],I=123234345

要计算二者的卷积,首先令卷积核旋转 180 ,那么M的变态过程如下
首先行翻转:
M1=[3241]

然后列翻转:
M2=[4132]

(为什么称为180°翻转呢,这可以看作是原来的矩阵一行一行写成一个行向量,1 2 3 4,然后倒着写回去(180°翻转),变成 4 3 2 1,再写成矩阵的形式,跟上面的变化结果是一样的。)为了便于书写,将反转后的矩阵记为 K
如果将矩阵的重叠看作是二维平面上两个矩形的相交,那么相交有无重叠的情况也分为几种:
1. 不相交,没有重叠的部分
不交叉
2. 上边相交,重叠区域在大矩形的上边。
上边交叉

  1. 左边相交,重叠区域在大矩形的左边
    左交叉
    上两种情况的一个交集就是在大矩形的左上角有相交:
    左上交叉
  2. 完全重叠的相交,小矩形套在大矩形里面。
    全交叉
  3. 右边的相交,重叠区域在大矩形的右边。
    右交叉
  4. 下边缘的相交,重叠区域在大矩形的下边。
    下交叉
    右下的相交,重叠区域在大矩形的右下角。
    右下交叉
    类比卷积中,两个矩阵的元素的重叠也有这么几种。那么最终我们要使用这个相交产生的并集或者交集,或者是并集的一部分作为最后卷积结果的尺寸。
    在matlab的conv2函数里有个’shape’参数,是这样解释的:

    Subsection of the convolution, specified as one of these values:

    1. ’full’ — Return the full 2-D convolution.
    2. ‘same’ — Return the central part of the convolution, which is the same size as A.
    3. ‘valid’ — Return only parts of the convolution that are computed without zero-padded edges.

    现在我们默认conv2(I,M),即第一个array的size比第二个array的size要大一些。(如果相反,那么这三种情况又不太一样,此处不涉及)。分别来看一下

Valid 型卷积

这种类型只取用M(自己计算时是K,即180°反转后的矩阵)完全与I重叠的情况,就像是矩阵相交的第4种情况。完全不给任何矩阵补0,最终的卷积结果矩阵与M的尺寸一样(小矩阵的尺寸)。
就我们的M和I的例子,设结果矩阵为V,一个个元素计算的话,其过程如下:
V11=41+32+22+13=17
如下图,
第一个元素
V12=42+33+23+14=27
第二个计算
V21=42+33+23+14=27
第三个计算
V22=43+34+24+15=37
第四个计算
最终Valid型结果为:

V=[17272737]

Same型卷积

这种类型除了包含valid型的所有结果之外,还要包含小矩阵与大矩阵的右边缘、以及下边缘有重叠的情况。就像是矩阵相交的第4、第5和第6种情况。给矩阵I补0,已完成右边缘重叠和下方时的计算。最终的卷积结果矩阵与I的尺寸一样(大矩阵的尺寸)。
就我们的M和I的例子,设结果矩阵为S。I矩阵补零后为

I=1230234034500000

(说明:其实给矩阵补零后相交情况就只有4那种了)
一个个元素计算的话,其过程如下: S11,S12,S21,S22 与前面计算的V一样。
S13=43+30+24+10=20
S23=44+30+25+10=26
S31=43+34+20+10=24
S32=44+35+20+10=31
S33=45+30+20+10=20
same
最终Same型结果为:
S=172724273731202620

结合卷积的物理意义,就是加权叠加,再回头看一下计算.
S11 是矩阵K和 I11 周围的像素加权求和,这里的周围指的是右,右下,下还有其本身。
卷积结果矩阵中的其他元也是这样解释。

full 型卷积

包含所有重叠的情况,在Same型基础上添加了小矩阵与大矩阵左边重叠的情况。即矩形相交的2,3,4,5种情况。这也是最复杂的一类。
如果从valid转换为same还比较好理解的话,再转换为full原理也是一样的,不过这次I矩阵是在左边,上边,右边,下边都要补零,为什么要这么做呢?请看下图(博主为了偷懒,就把好几种情况放一起了):
why
是不是必须要前后左右全方位补零才可以呢?而且如果M的size更大一些的话,补的就不止是一行一列的0了。(补就是pad,pad就是补)
最终补零后的I矩阵变成:

I=0000001230023400345000000

(再次强调:其实给矩阵补零后相交情况就只有4那种了)
就我们的M和I的例子,设结果矩阵为F。
F11=40+30+20+11=1
F12=40+30+21+12=4
......
依次类推
full

最终,Full型的卷积结果为:

F=1599417272472737316202620

结合卷积的物理意义,就是加权叠加,再回头看一下计算.
F 矩阵中的元素也是矩阵K I <script type="math/tex" id="MathJax-Element-919">I</script>周围的像素加权求和,这里的“周围”则比较广义了,既有右边和下边,也有左边和上边。


http://chatgpt.dhexx.cn/article/JRInFlsa.shtml

相关文章

如何计算矩阵的卷积

昨天立下flag&#xff0c;要开始学习深度学习&#xff0c;深度学习中十分重要的就是卷积神经网络&#xff0c;顾名思义&#xff0c;卷积神经网络中一定会用到卷积。喵哥在博友的一篇博文中看到卷积运算用于图像边缘检测的应用实例&#xff0c;博友十分细心的在截图上做了卷积的…

矩阵乘法实现卷积运算

1. 对于普通卷积运算&#xff0c;是使用滑动窗口实现卷积运算&#xff1a; 矩阵根据卷积核的大小进行&#xff0c;从左到右、从上到i下的移动&#xff0c;对应数据相乘再相加得到的数据为该区域的值。 ​​​​​​​ ​​​​​​​ 2.矩阵乘法实现卷积 原理&#xff1a;根据…

各种卷积操作及其矩阵运算

前言 简单来讲&#xff0c;卷积是一种函数和函数产生一个新函数的数学运算&#xff0c;该数学运算的自变量是两个函数f, g&#xff08;连续或离散都可以,&#xff0c;定义域之外的部分记函数值填充为0&#xff09;&#xff0c;输出为一个函数h,满足 ,或者说&#xff0c;就是对…

矩阵卷积运算的具体过程

矩阵卷积运算的具体过程&#xff0c;很简单 最近在看图像处理&#xff0c;卷积运算这一块也查了很多&#xff0c;但是感觉都写的太复杂&#xff0c;我这里简单的写一下卷积到底是一个什么计算过程。 假设有一个卷积核h&#xff0c;就一般为3*3的矩阵&#xff1a; 有一个待处理…

矩阵卷积运算过程讲解

写了那么久的博客&#xff0c;始于Python爬虫&#xff0c;目前专于Java学习&#xff0c;终于有了属于自己的小窝&#xff0c;欢迎各位访问我的个人网站&#xff0c;未来我们一起交流进步。 在爬虫处理验证码的过程中接触到矩阵卷积运算&#xff0c;关于该类运算&#xff0c;记录…

矩阵的卷积以及使用python计算方法

1、离散⼆维卷积公式 其中A为被卷积矩阵&#xff0c;K为卷积核&#xff0c;B为卷积结果&#xff0c;该公式中&#xff0c;三个矩阵的排序均从0开始。 卷积核、滤波器通常为较小尺寸的矩阵&#xff0c;比如3333、5555等&#xff0c;数字图像是相对较大尺寸的2维&#xff08;多…

矩阵卷积

1. 矩阵的卷积运算主要用在图像处理中&#xff0c;假设输入信号为x[m,n]&#xff0c;激活响应为h[m,n]&#xff0c;则其卷积定义为&#xff1a; 2.如果矩阵的中心在边缘就要将原矩阵进行扩展&#xff0c;例如补0 3.卷积的计算步骤&#xff1a; (1) 卷积核绕自己的核心…

隐马尔可夫模型(HMM)及Viterbi算法

HMM简介 对于算法爱好者来说&#xff0c;隐马尔可夫模型的大名那是如雷贯耳。那么&#xff0c;这个模型到底长什么样&#xff1f;具体的原理又是什么呢&#xff1f;有什么具体的应用场景呢&#xff1f;本文将会解答这些疑惑。   本文将通过具体形象的例子来引入该模型&#x…

viterbi算法实例及python实现

Python中hmmlearn给出了三种HMM模型&#xff1a;MultiomialHMM,GaussianHMM,GMMHMM。本文以MultiomialHMM为例&#xff0c;使用《从机器学习到深度学习》中第六章的活动/天气模型进行推算。 假设有这样一个问题&#xff0c;远在另一个城市上大学的儿子每天通过邮件向你汇报他今…

在HMM中实际应用Viterbi算法的例子

在HMM中实际应用Viterbi算法的例子 Viterbi概念动态规划使用HMM的Viterbi算法参考Viterbi概念 本质:动态规划算法 维特比算法是多步骤每步多选择模型的最优选择问题。 其在每一步的所有选择都保存了前续所有步骤到当前步骤当前选择的最小总代价(或者最大价值)以及当前代价…

HMM和viterbi算法初步实践-----中文分词

马尔科夫性质:当一个随机过程在给定现在状态及所有过去状态情况下&#xff0c;其未来状态的条件概率分布仅依赖于当前状态。换句话说&#xff0c;在给定现在状态时&#xff0c;它与过去状态&#xff08;即该过程的历史路径&#xff09;是条件独立的&#xff08;也就是没有任何的…

HMM和Viterbi算法

一、隐马尔可夫模型&#xff08;Hidden Markov Model&#xff09; 1、简介 隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的&#xff0c;而是美国数学家鲍姆提出的&#xff0c;隐含马尔可夫模型的训练方法&#xff08;鲍姆-韦尔奇算法&#xff09;也是以他名字命名的。隐含马…

基于Hmm模型和Viterbi算法的中文分词和词性标注

使用 python 实现基于Hmm模型和Viterbi算法的中文分词及词性标注&#xff1b;使用 最大概率算法 进行优化。最终效果&#xff1a;人民日报语料&#xff1a;分词(F1:96.189%)&#xff1b;词性标注(F1:97.934%) 完整代码和数据&#xff0c;参见本实验的 github地址&#xff1a;h…

【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

利用HMM纠正测序错误&#xff08;Viterbi算法的python实现&#xff09; 问题背景 对两个纯系个体M和Z的二倍体后代进行约~0.05x的低覆盖度测序&#xff0c;以期获得后代个体的基因型&#xff0c;即后代中哪些片段分别来源于M和Z。已知&#xff1a; 后代中基因型为MM、MZ&…

Viterbi算法实现中文分词和词性标注

Viterbi算法 目标过程词典分词统计分词词性标注 附录附录二附录三 源码地址 目标 实现基于词典的分词方法和统计分词方法对分词结果进行词性标注对分词及词性标注结果进行评价&#xff0c;包括4个指标&#xff1a;正确率、召回率、F1值和效率 过程 词典分词 基于词典的分词…

viterbi 算法与python实现

Viterbi算法 &#xff08;部分内容转自知乎&#xff1a;《如何通俗地讲解 viterbi 算法&#xff1f;》&#xff09; 1、问题描述 如下如所示&#xff0c;如何快速找到从 S 到 E 的最短路径&#xff1f; 一&#xff1a;遍历穷举法&#xff0c;可行&#xff0c;但速度太慢&am…

维特比算法(viterbi)原理以及简单实现

维特比算法 看一下维基百科的解释&#xff0c;维特比算法&#xff08;Viterbi algorithm&#xff09;是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列&#xff0c;特别是在马尔可夫信息源上下文和隐马尔可夫模型中。 通俗易懂的解释知乎…

flask中jsonify遇到的坑

1.jsonify可以将字典转换成json对象传入前端 data {"movie": movie_list,"page": page,"dic_list": dic,"total_page": total_page}>>坑1 字典的值不能为range(x,x)&#xff0c;上图dic就是像range(x,x)&#xff0c;会报错 …

flask中的jsonify返回的是乱码

用flask返回json时遇到了返回字符串支持中文显示的问题&#xff0c;在web端显示的是utf-8的编码如图; 虽然不影响接口的读取&#xff0c;但是可读性太差&#xff0c;于是研究了一下怎么直接显示成中文。最后找到了解决方案如下&#xff0c;在配置中加入下面一行代码就OK了。 …

request jsonify

python的flask框架为用户提供了直接返回包含json格式数据响应的方法&#xff0c;即jsonify&#xff0c;在开发中会经常用到。如下一段简单的flask后端代码&#xff0c;服务端视图函数根据请求参数返回json格式的数据到客户端。 转载于:https://www.cnblogs.com/daqingzi/p/9018…