变换矩阵 及 可视化

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

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

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

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

在单位方块上应用各种二维仿射变换矩阵的效果。

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

旋转

绕原点逆时针旋转 θ 度角的变换公式是 {\displaystyle x'=x\cos \theta -y\sin \theta }

 与 {\displaystyle 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}}}

缩放

缩放(反矩阵)公式为 {\displaystyle x'=s_{x}\cdot x}

 与 {\displaystyle 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}}}

切变

切变有两种可能的形式:

平行于 x 轴的切变为 {\displaystyle x'=x+ky}

 与 {\displaystyle y'=y},矩阵表示为:

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

平行于 y 轴的切变为 {\displaystyle x'=x}

 与 {\displaystyle y'=y+kx},矩阵表示为:

{\displaystyle {\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}}}

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

若一座标(x, y)沿直线 {\displaystyle y=(\tan \theta )\cdot x}

 进行反射,则其影像(x', y')可用以下公式求得:

{\displaystyle {\begin{pmatrix}x'\\y'\end{pmatrix}}={\begin{pmatrix}\cos 2\theta &\sin 2\theta \\\sin 2\theta &-\cos 2\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}}}

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

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

仿射变换

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

; {\displaystyle 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}}}

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

{\displaystyle {\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}

; {\displaystyle 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}}}

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

 = {\displaystyle (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}}}

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值