计算机视觉基础:矩阵运算

矩阵及其表示方式

一个矩阵是由行(row)和列(column)组成的一个矩形数组,通常包含数字。我们可以用大写字母(如 A、B)来表示一个矩阵。例如,矩阵 A 可能看起来像这样:

A = [ a11 a12 a13 ][ a21 a22 a23 ][ a31 a32 a33 ]

其中,a11是位于第一行第一列的元素,a12是第一行第二列的元素,以此类推。图像可以被看作是一个巨大的矩阵,其中每个像素点对应矩阵中的一个元素。

矩阵基础运算

  • 矩阵加法和减法:矩阵的加减法是对应位置元素相加或相减。例如,如果有两个相同大小的矩阵 A 和 B,它们的加法 A+B 将产生一个新矩阵 C,其中 cij = aij + bij。
  • 矩阵数乘:矩阵 A 与一个标量 k 的数乘是将 A 中的每个元素乘以 k。

矩阵乘法

矩阵乘法是线性代数中的一个核心操作,它在图像处理、计算机图形学以及数据科学的许多方面都非常重要。现在,我将更详细地解释矩阵乘法以及如何计算两个矩阵的产品。

矩阵乘法详解

当你乘以两个矩阵时,你其实是在将第一个矩阵的行与第二个矩阵的列组合。对于两个矩阵 A 和 B,矩阵 A 的列数必须等于矩阵 B 的行数才能进行乘法。

我们来逐步分析一下具体的操作步骤:

  1. 确认矩阵 A 的列数等于矩阵 B 的行数。
  2. 创建结果矩阵 C,其维度将是矩阵 A 的行数乘以矩阵 B 的列数(如果 A 是 m×n 维,B 是 n×p 维,那么 C 是 m×p 维)。
  3. 计算矩阵 C 的每个元素 cij。为了找到 cij,你需要取矩阵 A 的第 i 行和矩阵 B 的第 j 列。
  4. 将 A 的第 i 行与 B 的第 j 列上的对应元素进行相乘,并将乘积相加。这个总和就是矩阵 C 的元素 cij。

简单举例解释

使用一个 2×3 的矩阵 A 和一个 3×2 的矩阵 B。

A = [ a11 a12 a13 ]     B = [ b11 b12 ][ a21 a22 a23 ]         [ b21 b22 ][ b31 b32 ]

令矩阵 A 和 B 为:

A = [ 1 2 3 ]    B = [ 7 8 ][ 4 5 6 ]        [ 9 0 ][ 1 2 ]

根据矩阵乘法的规则,我们可以计算矩阵 A 和 B 的乘积 C,结果矩阵 C 的大小将是 2×2。我们现在按步骤计算,并将乘积算式放到结果矩阵 C 中:

C = [ (a11*b11 + a12*b21 + a13*b31) (a11*b12 + a12*b22 + a13*b32) ][ (a21*b11 + a22*b21 + a23*b31) (a21*b12 + a22*b22 + a23*b32) ]

代入我们给定的矩阵:

C = [ (1*7 + 2*9 + 3*1) (1*8 + 2*0 + 3*2) ][ (4*7 + 5*9 + 6*1) (4*8 + 5*0 + 6*2) ]

计算得到结果矩阵 C 的每个元素:

C = [ (7 + 18 + 3) (8 + 0 + 6) ][ (28 + 45 + 6) (32 + 0 + 12) ]

将每个元素中的数值相加:

C = [ 28 14 ][ 79 44 ]

所以,矩阵 A 和 B 的乘积 C 是:

C = [ 28 14 ][ 79 44 ]

这就是矩阵乘法的结果。

稍复杂举例解释

我们让矩阵 A 是一个 2×3 的矩阵,矩阵 B 是一个 3×4 的矩阵。下面是 A 和 B 的示例:

A = [ a11 a12 a13 ]     B = [ b11 b12 b13 b14 ][ a21 a22 a23 ]         [ b21 b22 b23 b24 ][ b31 b32 b33 b34 ]

由于矩阵 A 的大小是 2×3,矩阵 B 的大小是 3×4,矩阵 A 的列数和矩阵 B 的行数相同,我们可以计算出它们的乘积 C。结果矩阵 C 的大小将是 2×4。

让我们具体计算矩阵 A 和 B 的乘积,并将乘积算式直接写在结果矩阵 C 中。

C = [ (a11*b11 + a12*b21 + a13*b31) (a11*b12 + a12*b22 + a13*b32) (a11*b13 + a12*b23 + a13*b33) (a11*b14 + a12*b24 + a13*b34) ][ (a21*b11 + a22*b21 + a23*b31) (a21*b12 + a22*b22 + a23*b32) (a21*b13 + a22*b23 + a23*b33) (a21*b14 + a22*b24 + a23*b34) ]

现在,我们来设定具体的数字来完成乘法:

A = [ 1 2 3 ]     B = [ 2 0 1 4 ][ 4 5 6 ]         [ 0 1 3 2 ][ 7 8 5 6 ]

计算出结果矩阵 C 的每个元素:

C = [ (1*2 + 2*0 + 3*7) (1*0 + 2*1 + 3*8) (1*1 + 2*3 + 3*5) (1*4 + 2*2 + 3*6) ][ (4*2 + 5*0 + 6*7) (4*0 + 5*1 + 6*8) (4*1 + 5*3 + 6*5) (4*4 + 5*2 + 6*6) ]

进行计算,我们得到:

C = [ (2 + 0 + 21) (0 + 2 + 24) (1 + 6 + 15) (4 + 4 + 18) ][ (8 + 0 + 42) (0 + 5 + 48) (4 + 15 + 30) (16 + 10 + 36) ]

将 C 中的每个元素简化:

C = [ 23 26 22 26 ][ 50 53 49 62 ]

所以,经过计算,我们得到的最终结果矩阵 C 是:

C = [ 23 26 22 26 ][ 50 53 49 62 ]

这个结果就是我们从矩阵 A 和 B 计算得到的乘积。

练习

假设我们有两个矩阵 A 和 B:

A = [1 2]    B = [5 6][3 4]        [7 8]

矩阵 A 是一个 2×2 的矩阵,矩阵 B 也是一个 2×2 的矩阵。它们的乘积 AB 将产生另一个 2×2 的矩阵 C。那么 C 就是:

C = [ c11 c12 ][ c21 c22 ]

我们现在来计算 C 的每一个元素。

  • 计算 c11:
    我们取 A 的第一行 [1 2] 和 B 的第一列 [5 7],
    之后将对应元素相乘并相加:1×5 + 2×7 = 5 + 14 = 19。
  • 计算 c12:
    我们取 A 的第一行 [1 2] 和 B 的第二列 [6 8],
    之后将对应元素相乘并相加:1×6 + 2×8 = 6 + 16 = 22。
  • 计算 c21:
    我们取 A 的第二行 [3 4] 和 B 的第一列 [5 7],
    之后将对应元素相乘并相加:3×5 + 4×7 = 15 + 28 = 43。
  • 计算 c22:
    我们取 A 的第二行 [3 4] 和 B 的第二列 [6 8],
    之后将对应元素相乘并相加:3×6 + 4×8 = 18 + 32 = 50。

所以,矩阵 C 就是:

C = [19 22][43 50]

这就完成了矩阵 A 和 B 的乘积。

矩阵乘法不符合交换律,也就是说,通常 AB ≠ BA。这是计算矩阵乘积时要特别注意的一点。

理解好矩阵乘法之后,在处理图像时,你会经常用到它来进行变换、过滤和其他操作。希望这个例子能够帮助你理解矩阵乘法的具体过程。

单位矩阵和逆矩阵

  • 单位矩阵:是一个特殊的方阵,其所有对角线上的元素都是 1,其余元素都是 0,记为 I。例如:
I = [ 1 0 0 ][ 0 1 0 ][ 0 0 1 ]
  • 逆矩阵:对于一个方阵 A,如果存在另一个方阵 B,使得 AB = BA = I,则我们说 B 是 A 的逆矩阵,记作 A^(-1)。不是所有矩阵都有逆矩阵,只有那些行列式(determinant)不为 0 的方阵才有逆矩阵。

矩阵的转置

转置操作将矩阵的行和列交换位置。对于矩阵 A,它的转置记为 A^T。A 的一个元素 aij 在 A^T 中的位置变成了 aji。

例如,如果有矩阵 A:

A = [ 1 2 ][ 3 4 ]

那么 A^T 就是:

A^T = [ 1 3 ][ 2 4 ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 虚拟桌面信息(一)分析注册表

目录 前言 一、理论分析 二、代码实现 总结 本文为原创文章,转载请注明出处: https://blog.csdn.net/qq_59075481/article/details/136110636 前言 Win 10/11 的虚拟桌面微软暂时没有开放接口,有很多信息对开发者是闭塞的,…

阿里文档类图像的智能识别,文档分类自定义分类器

阿里云文档类图像智能识别服务为用户提供了强大的文档处理能力,可以将文档图像中的文本内容、表格数据和结构化信息自动识别并提取出来。而自定义分类器则允许用户根据自己的需求,训练出更适合自己场景的文档分类模型。本文将详细介绍阿里云文档类图像智…

Python学习之路-爬虫提高:selenium

Python学习之路-爬虫提高:selenium 什么是selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器&#xff09…

react【六】 React-Router

文章目录 1、Router1.1 路由1.2 认识React-Router1.3 Link和NavLink1.4 Navigate1.5 Not Found页面配置1.6 路由的嵌套1.7 手动路由的跳转1.7.1 在函数式组件中使用hook1.7.2 在类组件中封装高阶组件 1.8 动态路由传递参数1.9 路由的配置文件以及懒加载 1、Router 1.1 路由 1.…

面试经典150题——无重复字符的最长子串

我生来就是高山而非溪流,我欲于群峰之巅俯视平庸的沟壑 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力解法 看到这个题目,我们是不是发现和上一篇内容刚刚讲过的长度最小的子数组题目很像?首先自然的暴力解法,就是遍历字符…

音视频基础

本篇文章我们来讲一下音视频基础 像素点: 将以下图片的美女眼睛放大 能够看到一个一个的小方块 这就是像素点 照片像素宽像素点*高像素点 像素点 代码实例&#xff1a; #include <opencv2/opencv.hpp>int main() {// 创建一个200x100的黑色图像cv::Mat image(100, 200,…

大模型基础知识

主流的开源模型体系 GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列&#xff1a;由OpenAI发布的一系列基于Transformer架构的语言模型&#xff0c;包括GPT、GPT-2、GPT-3等。GPT模型通过在大规模无标签文本上进行预训练&#xff0c;然后在特定任务上进行…

web3知识体系汇总

web3.0知识体系 1.行业发展 2. web3的特点&#xff1a; 1、统一身份认证系统 2、数据确权与授权 3、隐私保护与抗审查 4、去中心化运行 Web3.0思维技术思维✖金融思维✖社群思维✖产业思维”&#xff0c;才能从容理解未来Web3.0时代的大趋势。 3.技术栈 Web3.jsSolidit…

拼写检查应用程序:基于词典编辑的解释

一、说明 拼写检查器项目涉及创建一个可以自动检测并纠正给定文本中的拼写错误的程序。此类项目在各种应用程序中非常有用&#xff0c;例如文字处理器、电子邮件客户端和网络浏览器&#xff0c;可确保用户生成的文本没有拼写错误。 您可以找到我创建的拼写检查器应用程序&#…

Waymo数据集下载与使用

在撰写论文时&#xff0c;接触到一个自动驾驶数据集Waymo Dataset 论文链接为&#xff1a;https://arxiv.org/abs/1912.04838v7 项目链接为&#xff1a;https://github.com/waymo-research/waymo-open-dataset 数据集链接为&#xff1a;https://waymo.com/open waymo提供了两种…

23种计模式之Python/Go实现

目录 设计模式what?why?设计模式&#xff1a;设计模式也衍生出了很多的新的种类&#xff0c;不局限于这23种创建类设计模式&#xff08;5种&#xff09;结构类设计模式&#xff08;7种&#xff09;行为类设计模式&#xff08;11种&#xff09; 六大设计原则开闭原则里氏替换原…

vscode的cmake工具小三角符号旁边没有目标的解决方法

vscode里面写了个项目&#xff0c;找了半天没办法用cmake调试&#xff0c;最后发现是cmake里面的set(CMAKE_BUILD_TYPE Release)导致的&#xff0c;都是release模式了当然不能调试了&#xff1b;改成Debug就行了 参考&#xff1a;https://stackoverflow.com/questions/7549672…

「MySQL」多表查询

多表关系 一对多&#xff08;多对一&#xff09; 实现&#xff1a;在多的一方建立外键&#xff0c;指向一的一方的主键 多对多 实现&#xff1a;: 建立第三张中间表&#xff0c;中间表至少包含两个外键&#xff0c;分别关联两方主键 一对一 实现&#xff1a;在任意一方加入外键…

单链表基础知识点

单链表的读取 对于单链表实现获取第i个元素的数据的操作 GetElem&#xff0c;在算法上&#xff0c;相对要麻烦一些。 获得链表第i个数据的算法思路: 声明一个结点p指向链表第一个结点&#xff0c;初始化j从1开始;当j<i时&#xff0c;就遍历链表&#xff0c;让p的指针向后移…

【小赛1】蓝桥杯双周赛第5场(小白)思路回顾

我的成绩&#xff1a;小白(5/6) 完稿时间&#xff1a;2024-2-13 比赛地址&#xff1a;https://www.lanqiao.cn/oj-contest/newbie-5/ 相关资料&#xff1a; 1、出题人题解&#xff1a;“蓝桥杯双周赛第5次强者挑战赛/小白入门赛”出题人题解 - 知乎 (zhihu.com) 2、矩阵快速幂&…

【flutter-DIO-JSON】多层嵌套读取

当JSON返回结果是多层嵌套的时候&#xff0c;可以通过逐层解析来提取所需的数据。以下是一个简单的示范例子&#xff0c;展示了如何处理一个3层嵌套的JSON返回结果&#xff1a; import package:dio/dio.dart;void main() async {Dio dio Dio();try {Response response await…

MATLAB | 情人节画个花瓣venn图?

之前七夕节情人节各种花&#xff0c;相册&#xff0c;爱心啥的都快画够了&#xff0c;今年画个花瓣韦恩图&#xff1f; 花瓣上的数字是仅属于该类的样本数&#xff0c;而中心的数字是属于每一类的样本数 教程部分 0 数据准备 % 给组起名t1 t2 t3...t15 setName compose(t%d,…

企业级DevOps实战

第1章 Zookeeper服务及MQ服务 Zookeeper&#xff08;动物管理员&#xff09;是一个开源的分布式协调服务&#xff0c;目前由Apache进行维护。 MQ概念 MQ&#xff08;消息队列&#xff09;是一种应用程序之间的通信方法&#xff0c;应用程序通过读写出入队列的消息&#xff0…

NLP是什么?神经语言编程和自然语言处理是同一种技术吗?

NLP是什么? 可能是两种技术&#xff1a;神经语言编程&#xff08;Neuro Linguistic Programming&#xff0c;NLP&#xff09; 和 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09; Neuro Linguistic Programming和Natural Language Process…

mysql数据库concat指定连接符号

SELECT CONCAT_WS(;;;, 你好,华为) FROM DUAL;