Tensorflow之矩阵变换

article/2025/9/14 10:03:53

----------------------- 摘自 【维基百科】-----------

变换矩阵是数学线性代数中的一个概念。

在线性代数中,线性变换能够用矩阵表示。如果T是一个把Rn映射到Rm的线性变换,且x是一个具有n个元素的列向量,那么

{\displaystyle T({\vec {x}})=\mathbf {A} {\vec {x}}}T({\vec  x})={\mathbf  {A}}{\vec  x}

我们把m×n的矩阵A,称为T的变换矩阵

目录

   [隐藏] 
  • 1应用
  • 2寻找变换矩阵
  • 3在二维图形中的应用示例
    • 3.1旋转
    • 3.2缩放
    • 3.3切变
    • 3.4反射
    • 3.5正投影
  • 4组合变换与逆变换
  • 5其它类型的变换
    • 5.1仿射变换
    • 5.2透视投影
  • 6参考资料
  • 7参见
  • 8外部链接

应用[编辑]

任意线性变换都可以用矩阵表示为易于计算的一致形式[1],并且多个变换也可以很容易地通过矩阵的相乘连接在一起。

线性变换不是唯一可以用矩阵表示的变换。Rn维的仿射变换与透视投影都可以用齐次坐标表示为RPn+1维(即n+1维的真实投影空间)的线性变换。因此,在三维计算机图形学中大量使用着4x4的矩阵变换。

寻找变换矩阵[编辑]

如果已经有一个函数型的线性变换{\displaystyle T(x)}T(x),那么通过T对标准基每个向量进行简单变换,然后将结果插入矩阵的列中,这样很容易就可以确定变换矩阵A,即

{\displaystyle \mathbf {A} ={\begin{pmatrix}T({\vec {e}}_{1})&T({\vec {e}}_{2})&\cdots &T({\vec {e}}_{n})\end{pmatrix}}}{\mathbf  {A}}={\begin{pmatrix}T({\vec  e}_{1})&T({\vec  e}_{2})&\cdots &T({\vec  e}_{n})\end{pmatrix}}

例如,函数{\displaystyle T(x)=5x}T(x)=5x是线性变换,通过上面的过程得到(假设n = 2)

{\displaystyle T({\vec {x}})=5{\vec {x}}={\begin{pmatrix}5&&0\\0&&5\end{pmatrix}}{\vec {x}}}T({\vec  x})=5{\vec  x}={\begin{pmatrix}5&&0\\0&&5\end{pmatrix}}{\vec  x}

在二维图形中的应用示例[编辑]

最为常用的几何变换都是线性变换,这包括旋转、缩放、切变、反射以及正投影。在二维空间中,线性变换可以用2×2的变换矩阵表示。

旋转[编辑]

绕原点逆时针旋转θ度角的变换公式是{\displaystyle x'=x\cos \theta -y\sin \theta }x'=x\cos \theta -y\sin \theta{\displaystyle y'=x\sin \theta +y\cos \theta }y'=x\sin \theta +y\cos \theta,用矩阵表示为:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}\cos \theta &-\sin \theta \\\sin \theta &\ cos\theta \end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}\cos \theta &-\sin \theta \\\sin \theta &\ cos\theta \end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}

缩放[编辑]

缩放(反矩阵)公式为{\displaystyle x'=s_{x}\cdot x}x'=s_{x}\cdot x{\displaystyle y'=s_{y}\cdot y}y'=s_{y}\cdot y,用矩阵表示为:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}s_{x}&0\\0&s_{y}\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}s_{x}&0\\0&s_{y}\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}

切变[编辑]

切变有两种可能的形式,平行于x轴的切变为{\displaystyle x'=x+ky}x'=x+ky{\displaystyle y'=y}y'=y,矩阵表示为:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}1&k\\0&1\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}1&k\\0&1\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}

平行于y轴的切变为{\displaystyle x'=x}x'=x{\displaystyle y'=y+kx}y'=y+kx,矩阵表示为:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}1&0\\k&1\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}1&0\\k&1\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}

反射[编辑]

为了沿经过原点的直线反射向量,假设(uxuy)为直线方向的单位向量。变换矩阵为:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}2u_{x}^{2}-1&2u_{x}u_{y}\\2u_{x}u_{y}&2u_{y}^{2}-1\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}2u_{x}^{2}-1&2u_{x}u_{y}\\2u_{x}u_{y}&2u_{y}^{2}-1\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}

不经过原点的直线的反射是仿射变换,而不是线性变换。

若一座标(x, y)沿直线 {\displaystyle y=(tan\theta )x}{\displaystyle y=(tan\theta )x} 进行反射,则其影像(x', y')可用以下公式求得:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}cos2\theta &sin2\theta \\sin2\theta &-cos2\theta \end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}cos2\theta &sin2\theta \\sin2\theta &-cos2\theta \end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}

正投影[编辑]

为了将向量正投影到一条经过原点的直线,假设(uxuy)是直线方向的单位向量,变换矩阵为:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}u_{x}^{2}&u_{x}u_{y}\\u_{x}u_{y}&u_{y}^{2}\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}}{\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}u_{x}^{2}&u_{x}u_{y}\\u_{x}u_{y}&u_{y}^{2}\end{pmatrix}}{\begin{pmatrix}x\\y\end{pmatrix}}

同反射一样,正投影到一条不经过原点的直线的变换是仿射变换,而不是线性变换。

平行投影也是线性变换,也可以用矩阵表示。但是透视投影不是线性变换,必须用齐次坐标表示。

组合变换与逆变换[编辑]

用矩阵表示线性变换的一个主要动力就是可以很容易地进行组合变换以及逆变换。

组合可以通过矩阵乘法来完成。如果AB是两个线性变换,那么对向量x先进行A变换,然后进行B变换的过程为:

{\displaystyle \mathbf {B} (\mathbf {A} {\vec {x}})=(\mathbf {BA} ){\vec {x}}}{\mathbf  {B}}({\mathbf  {A}}{\vec  x})=({\mathbf  {BA}}){\vec  x}

换句话说,AB变换的组合等同于两个矩阵乘积的变换。需要注意的是先AB表示为BA而不是AB

能够通过两个矩阵相乘将两个变换组合在一起这样的能力就使得可以通过逆矩阵进行变换的逆变换。A -1表示A的逆变换。

变换矩阵并不都是可逆的,但通常都可以进行直观的解释。在上一节中,几乎所有的变换都是可逆的。只要{\displaystyle s_{x}}s_{x}{\displaystyle s_{y}}s_{y}都不为零,那么缩放变换也是可逆的。另外,正投影永远是不可逆的。

其它类型的变换[编辑]

仿射变换[编辑]

为了表示仿射变换,需要使用齐次坐标,即用三维向量(xy, 1)表示二维向量,对于高维来说也是如此。按照这种方法,就可以用矩阵乘法表示变换。{\displaystyle x'=x+t_{x}}x'=x+t_{x}{\displaystyle y'=y+t_{y}}y'=y+t_{y}变为

{\displaystyle {\begin{pmatrix}x'\\y'\\1\end{pmatrix}}={\begin{pmatrix}1&0&t_{x}\\0&1&t_{y}\\0&0&1\end{pmatrix}}{\begin{pmatrix}x\\y\\1\end{pmatrix}}}{\begin{pmatrix}x'\\y'\\1\end{pmatrix}}={\begin{pmatrix}1&0&t_{x}\\0&1&t_{y}\\0&0&1\end{pmatrix}}{\begin{pmatrix}x\\y\\1\end{pmatrix}}

在矩阵中增加一列与一行,除右下角的元素为1外其它部分填充为0,通过这种方法,所有的线性变换都可以转换为仿射变换。例如,上面的旋转矩阵变为

{\displaystyle {\begin{pmatrix}\cos \theta &-\sin \theta &0\\\sin \theta &\cos \theta &0\\0&0&1\end{pmatrix}}}{\begin{pmatrix}\cos \theta &-\sin \theta &0\\\sin \theta &\cos \theta &0\\0&0&1\end{pmatrix}}

通过这种方法,使用与前面一样的矩阵乘积可以将各种变换无缝地集成到一起。

当使用仿射变换时,齐次坐标向量w从来不变,这样可以把它当作为1。但是,透视投影中并不是这样。

透视投影[编辑]

三维计算机图形学中另外一种重要的变换是透视投影。与平行投影沿着平行线将物体投影到图像平面上不同,透视投影按照从投影中心这一点发出的直线将物体投影到图像平面。这就意味着距离投影中心越远投影越小,距离越近投影越大。

最简单的透视投影将投影中心作为坐标原点,z = 1作为图像平面,这样投影变换为{\displaystyle x'=x/z}x'=x/z{\displaystyle y'=y/z}y'=y/z,用齐次坐标表示为:

{\displaystyle {\begin{pmatrix}x_{c}\\y_{c}\\z_{c}\\w_{c}\end{pmatrix}}={\begin{pmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&1&0\end{pmatrix}}{\begin{pmatrix}x\\y\\z\\1\end{pmatrix}}}{\begin{pmatrix}x_{c}\\y_{c}\\z_{c}\\w_{c}\end{pmatrix}}={\begin{pmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&1&0\end{pmatrix}}{\begin{pmatrix}x\\y\\z\\1\end{pmatrix}}

(这个乘法的计算结果是{\displaystyle (x_{c},y_{c},z_{c},w_{c})}(x_{c},y_{c},z_{c},w_{c}) = {\displaystyle (x,y,z,z)}(x,y,z,z)。)

在进行乘法计算之后,通常齐次元素wc并不为1,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以wc

{\displaystyle {\begin{pmatrix}x'\\y'\\z'\end{pmatrix}}={\begin{pmatrix}x_{c}/w_{c}\\y_{c}/w_{c}\\z_{c}/w_{c}\end{pmatrix}}}{\begin{pmatrix}x'\\y'\\z'\end{pmatrix}}={\begin{pmatrix}x_{c}/w_{c}\\y_{c}/w_{c}\\z_{c}/w_{c}\end{pmatrix}}

更加复杂的透视投影可以是与旋转、缩放、平移、切变等组合在一起对图像进行变换。






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

相关文章

three.js中的矩阵变换(模型视图投影变换)

文章目录 1. 概述2. 基本变换2.1. 矩阵运算2.2. 模型变换矩阵2.2.1. 平移矩阵2.2.2. 旋转矩阵2.2.2.1. 绕X轴旋转矩阵2.2.2.2. 绕Y轴旋转矩阵2.2.2.3. 绕Z轴旋转矩阵 2.3. 投影变换矩阵2.4. 视图变换矩阵 3. 着色器变换3.1. 代码3.2. 解析 4. 其他 1. 概述 我在《WebGL简易教程…

矩阵变换及其数学原理

矩阵变换及其数学原理 矩阵变换及其数学原理引子各种变换 平移矩阵缩放矩阵旋转变换 引子 推荐这篇文章线性代数的本质,这篇文章挺不错的,揭示了矩阵和向量的内涵。首先概要性的提一下 向量刻画的是线性空间中的对象。矩阵刻画的是向量在线性空间中的运…

计算机图形学之矩阵变换的深度理解

对于图形学来说,矩阵计算不可避免,既直观又方便。而如果线性代数学的不透彻的话,那么基本上是做不到应用的,这里推荐看一下3Blue1Brown的线性代数的视频,可以对矩阵计算有深刻的认识。 之后就是应用阶段,我…

图像处理-矩阵变换

Android中通过矩阵来处理图像问题是非常常见的。 图像中的每一个像素点都是一个颜色矩阵分量,然后我们让这两个矩阵相乘就能得到一个新的矩阵(新的颜色矩阵分量),这就是矩阵变换对图像中的每一个点的处理,使得对整个图…

shader中的常用矩阵变换

unity shader 矩阵学习 矩阵运算法则(1)矩阵和标量的乘法(2)矩阵和矩阵的乘法矩阵相乘的条件 和 结果的行数和列数 变换的基本概念(1)变换(2)线性变换(3)平移变换(4)仿射变换(5)齐次坐标 2D 矩阵变换&#…

【Matlab】矩阵变换与矩阵求值

矩阵变换与矩阵求值 对角矩阵:只有对角线上有非零元素的矩阵。 数量矩阵:对角线上的元素相等的对角矩阵。 单位矩阵:对角线上的元素都为1的对角矩阵。 diag函数 提取矩阵的对角线元素 diag(A):提取矩阵A主对角线元素&#x…

闫令琪图形学入门笔记(矩阵变换篇)

整个坐标变化过程贯穿管线渲染,它与光栅化、着色一同构成GPU完整的渲染过程。所以理解三维世界的坐标与矩阵变换是首要的学习内容 1.1 向量的点乘与叉乘 点乘 向量的点乘可以求得一个数,利用点乘可以进一步计算两向量的夹角大小,或者一个…

点云矩阵变换

点云矩阵变换 变换矩阵工作原理 : |-------> 变换矩阵列| 1 0 0 x | \| 0 1 0 y | }-> 左边是一个3阶的单位阵(无旋转)| 0 0 1 z | /| 0 0 0 1 | -> 这一行用不到 (这一行保持 0,0,0,1)要进行点云旋转,需要对3阶矩阵进行赋值 如何赋值参考&#xf…

OpenGL矩阵变换

参考内容: 1. 这次,彻底搞懂 OpenGL 矩阵转换 2. Article - World, View and Projection Transformation Matrices 模型变换的基本流程图: 1. 模型变换 模型变换解决的是,把物体在世界坐标系下的位置拆分成平移、缩放、旋转的…

MATLAB矩阵变换

目录 对角阵与三角阵 1、对角阵 (1)提取矩阵的对角线元素 (2)构造对角阵 2、三角阵 (1)上三角阵 (2)下三角阵 矩阵的转置与旋转 1、矩阵的转置 2、矩阵的旋转 3、矩阵的左右翻转 4、矩阵的上下翻转 矩阵的逆与伪逆 1、矩阵的逆 2、矩阵的伪…

Cesium 矩阵变换

在Cesium和其他三维开发中中经常用到矩阵变换。比如将一个物体移动、缩放、平移都可以用变换矩阵来计算。 再比如将三维场景中的物体转换为屏幕上显示的二维图形,需要用到透视投影(perspective projection)矩阵。 变换(tansform…

浅谈矩阵变换——Matrix

矩阵变换在图形学上经常用到。基本的常用矩阵变换操作包括平移、缩放、旋转、斜切。 每种变换都对应一个变换矩阵,通过矩阵乘法,可以把多个变换矩阵相乘得到复合变换矩阵。 矩阵乘法不支持交换律,因此不同的变换顺序得到的变换矩阵也是不相同…

变换矩阵

1、变换矩阵 变换矩阵可以分解为缩放,旋转,平移矩阵的乘积: M T * R * S - 右手坐标系 当均匀缩放时,旋转和缩放可以交换顺序 缩放和平移不可以交换顺序 2、子坐标系与父坐标系 由在父坐标系中的坐标位置P,和三…

矩阵基础与变换

矩阵基础 矩阵的基本概念 由 m n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m n矩阵(引用百度百科)。记作: 这mn 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列。 矩阵的加法 同型…

2.2 矩阵变换

写在前面:作者本人是纯纯的菜鸟,学习的内容来自于 中国大学MOOC 中南大学 《科学计算与MATLAB语言》,欢迎各位大佬或新手在这里和平讨论,如果我有错误请各位不吝赐教,提前感谢各位捧场! 何为矩阵变化&#…

线性代数学习笔记——第七十二讲——共轭矩阵

1. 本讲内容概要 2. 复数及其性质及复数的运算 3. 复共轭及模 4. 共轭矩阵的定义及性质

共轭矩阵 正定矩阵

https://blog.csdn.net/know9163/article/details/80551764

共轭 、 共轭转置、共轭矩阵、酉矩阵、正定矩阵、半正定矩阵

共轭复数 实数部分相同而虚数部分互为相反数的两个复数。 矩阵的共轭转置 把矩阵转置后,再把每一个数换成它的共轭复数。 自共轭矩阵 矩阵中每一个第i 行第j 列的元素都与第j 行第i 列的元素的共轭相等。 酉矩阵 AH 是A 的共轭转置 A叫做酉矩阵 正定矩阵 半正…

matlab-线性代数 对矩阵取共轭(不用函数)

由上图所示,可以得知:a是求矩阵的共轭转置,而a.是求矩阵的共轭。在数学中,共轭转置表示为在矩阵的右上角加上H。 如果矩阵是实数矩阵,那么a和a.的结果一样,都是求矩阵的转置,如下图所示&#xf…

我的矩阵学习

摘自矩阵(数学术语)_百度百科 定义 由 m n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m n矩阵。记作: 这mn 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i…