压轴出场的变换

2024-05-29 22:28
文章标签 变换 压轴 出场

本文主要是介绍压轴出场的变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Why study transformation

为什么我们要学习变换呢?

先认识两种不同的变换:Modeling(模型变换)、Viewing(视图变换)

描述摄像机位置的移动是变换的一个重大应用(平滑曲线移动),会跳舞的机器人

bc00e51628094de4af938977bb27e254.png

a4e6ca2cc54349babf1794021e81d130.png

动画: 

cc1c0909b6ae4e58b4addabe91154656.png

经典的开场 :变换可表示缩放动画

b18ade7432b943b6b379969916d765df.png

光栅化成像也大量涉及到变换,三维空间拍照片会变成二维图片(投影也是一种很重要的变换)

2D Transformations:Rotation,Scale,Shear

Scale 

4df6d2dcc0e146628060064753377058.png

 图像的缩放是一种很常见的变换,将原图缩小到原来的eq?%5Cfrac%7B1%7D%7B2%7D

aaa66fa3c0c64b5ebb97422a89646cca.png

可以将其写成矩阵形式:一个(缩放矩阵)对角阵:

b578978094e941f9ab81bdc3a3589116.png

那假如缩放的比例不一样呢?

 8784df5f35f943beafb698ec8c682265.jpeg

不一样也没关系,只要让Sx和Sy不相同就可以了 

Reflection Matrix

f90e760feb784064a9c6e9c6b8c1caa0.jpeg

镜像反转坐标嘞

 Shear Matrix

b45389c0d42c4b94a74b106bec6f43f4.png

切变就是拿到一张图,这张图有弹性,可以拽着上面那条边向右拉,拉歪后形成右面的结果

水平方向坐标发生变化,竖直方向坐标并没有变 

任何x水平方向的移动都是a×y:

 

4bb3cad338444ef884277c19445b3b27.png

Rotate

旋转变换:

edb146a89ca34f688b3d720f8f5c88a5.png

二维平面内绕着原点逆时针旋转45°  ,最重要的是找到一一对应的关系 

8498fc6eb4684b4e92944d2165a7b1f9.png

这个公式是整体性的,也就是说特殊点也符合该公式(1,0): 

f7d711509b1c4acb96cdb164dffb23d9.png

将这个矩阵展开:

16bb7d13ddc84f2ab905529beaea0f25.png

用这个特殊点(1,0)将A和C的值得到了,可以再用一个特殊点(0,1)将B和D的值算出来,最终结果:

547c044794aa4053b5b0abdacd2bd689.jpeg

共性:

f0b6daa39ed1424798b8b1f46a422313.png

这种形式我们称之为线性变换 (要用相同维度的矩阵×向量)

Homogeneous coordinates

 齐次坐标是一个需要注意的点,为什么要引入齐次坐标这样一个概念呢?

有一种很特殊的变换是平移变换:

3135b0ca99ab4e128986b25ccc865210.png

这一看就是很简单的一个变换呀:

 554feafbef4b437b9534679e334fc53d.png

这确实很简单,但存在一个问题,能不能把它写成矩阵形式,我们只能把它写成这样的形式:

0d821680e4e14bb8b4c5f1d8d0a826bc.png

平移操作不属于线性变换的范畴嘞,但是我们由于懒,不想把这个当做一个特殊情况去考虑,那有没有办法让所有变换都用一种简单的形式表达出来呢?

人们在长期探索中发现我们可以引入一种形式来表示坐标:将二维增加一个维度,对于点和向量写成这样的形式:

c1cfda6b9138475a8144f14ba529a3a2.png

 好处就是可以写成这样的形式:

262a1f6ec08a47d4b13a5a4fc7c414ba.png

引入齐次坐标之后,通过增加一个数将平移变换也写成矩阵×向量的形式

那为什么要把点和向量区别对待呢?

有个概念:向量方向不变(平移不变性),将向量的新增维度置零保持向量的不变性

6a056c31e3164c9988d3d41719984525.png

 点+点定义被扩充:

描述二维的点,表示两个点的中点(2-->1):

5426dfb13ce141b694f40900c18ff188.jpeg

Affine Transformations 

所有的仿射变换都可以写成齐次坐标的形式:

7c78a2e7609b498cb6fa81467e7afde6.png

用一个矩阵就可统一所有的操作:

1a0eab856efb40b79d90f4605c0a1020.jpeg

代价就是引入了额外的数字 

Inverse Transform

逆变换是将操作(撤销:Ctrl+U)返回来:

01a14332d8c6488fbc07d38ba6353d50.jpeg

Composing Transforms

组合变换是什么意思捏?还是举个例子:

dfce9175941b46a5bc9c105ae1830512.png

这样的变换是怎么得到的呢?

 我们可能可以这样做:

881740bc1d164dee9b597034f05614dc.png

平移后旋转发现和目标并不一致 

那怎样做能达到效果呢?这样就可以啦:

62ec6864db0e4398a1bad5bc12c1314a.png

明确两个点:

复杂的变换可以由简单的变换得到,变换的顺序十分重要 

057864e3d3f34397a9cbd1d4d27f9b4f.png

矩阵不满足交换律 ,向量默认是列向量,×矩阵,矩阵放在向量的左边,上面展示的是从右到左依次应用矩阵

这个概念是可以推广的:

6b26329c17414690b839f3ebaffbf248.png

从A1到An依次应用,用矩阵写就是上面的形式

 矩阵没有交换律但有结合律,那对它有什么作用呢?

可以表示非常复杂的变换

Decomposing Complex Transforms

e7bf65c22085497ab955bae80caf1e94.jpeg

变换不仅可以合成,还可以分解

旋转有缺省方式(以原点为中心逆时针旋转45°),那不想绕着原点为中心旋转该怎么办呢?

按照以上步骤:平移 -> 旋转 -> 平移,这是分解(从右到左)

3D Transformations

三维变换要复杂些,也会涉及到平移,老样子:

8eeca1e324f149da98571663ab9e3045.png

 齐次坐标矩阵×点:

f2d75ad1ea1749ceac3d438095d5fb32.png

 先线性变化,再平移

c70a42fcc28c45d38b3af98c9abd1970.png

旋转角度,顺时针旋转和逆时针旋转,相当于转置

从定义上看这是互逆操作:旋转矩阵的逆等于旋转矩阵的转置

Scale

缩放,和二维空间差不多:

35c336307683439dbbddbc33224a8e4e.png

Translation

平移,也不再赘述:

c1b7afa027344f80be8b58871d655cc8.png

 Rotate

三维变换中最复杂的可能就是旋转了:

05a2c7020c9042a3b06afeb47f676ca7.jpeg

上面是绕着某个坐标轴旋转,绕着y轴旋转有点问题:

根据右图可以看出,z叉乘x能得到y,而不是x叉乘z,这就是为什么是反的原因

复杂的问题可以转化成简单问题的组合:

9344a6d28bac413eb0bba6eb88f34e37.jpeg

 给我们简单的旋转来描述复杂的旋转,在图形学中发明了个可以描述任意旋转的式子:

666e72cf8ce94650aaf433086901020d.png

定义旋转轴(平移 -> 旋转 -> 平移),旋转角度 ,N(向量叉乘的对应矩阵)

Viewing transformation

View/Camera transformation

什么是视图变换呢?

f0f3fcc3f1d14893a1fc840a2441ccfe.png

摆pose-->找角度-->“茄子!”

在图形学中也进行着类似的变换,摆放相机:

69559c444a66404b954031a6993ee945.png

下一步是如何进行视图变换,当相机和所有物体一起移动的时候,得出的结果可能是一样的,那我们不妨把相机固定,让相机的位置永远不变,都是物体在移动,把相机放在原点处,沿着-z看 :

6217159c5e224188bdb833825432235d.jpeg

从任意位置调整到标准位置该怎么做呢?

792b61c692b4490f9690cb053ffe54d8.png

移中心 --> 旋转到-z ...

写成矩阵形式:

c083f8cdfd4744b6960165868cb2e7bc.png

 任意-->标准不好搞,但是标准-->任意较简单

 对旋转矩阵求逆,逆就是它的转置,这就是视图变换

相机物体应用同样的变换,相机落到相应的位置上,物体也就落在了相应的位置上

97e64516e50d46c1829b5e85d684cf74.png

Projection transformation

投影,投影分为正交投影和透视投影:

2911c05000b042d78217f54898124cfb.png

人眼成像更接近于右面的透视投影(平行线不再平行,相交到某一个地方)

 正交投影更多应用于工程制图,正交投影没有近大远小

93a3d492c2db44ebadeea683e6291afc.png

Orthograhic projection

正交,正交投影比较简单易学,不论远近,挤到一个平面就可以了,这样摆放:

067ee6ee759641b091d62833894b587c.png

好处是把Z扔掉自然就是一个平面了,但这样的操作不是很方便,在图形学中还有一种方式:

a403a3416878455e99b4cab23c2fdb97.png

采取平移后缩放的方式,将变换写成矩阵的形式用数学变换来做:

41d145b7ab2a41f0903c64a4d2576e36.png

Perspective projection

透视

 e4ff32665668452dbcb26a6002de03a4.png

透视投影是图形学中应用比较广泛的投影,近大远小(平行线永不香蕉,但近大远小)

 a6d695ddc9a3448299be7b8d27ff9128.png

看我的蕉币: 

71208778808a4300a9a6129bb15c369e.png

为什么这么多冰香蕉?

在透视投影中,一个投影相当于投影到另外的平面上,这种情况下将不代表平行线

740212f7adff44bc844ed0098d1e84ce.png

×z也是×,定义远近两个平面:

 3f2e543e0ec0430f8d6f294568fa901e.png

透视投影=挤压+正交投影 

那么我们怎么挤压呢?

b7b95ebaef4b4e70a47753d58ae02538.png

根据相似三角形求比值,已经告诉我们很多信息了,上下挤压可以被映射到右边的向量:

810c4b58dda74279a00b2ca6e040a34d.png

 

 根据已有关系推导矩阵:

f7c8c2bd6e5d44ffba0a2a767ac883d0.png

剩余的一行怎么办捏?

 任何一点近的平面没关系,远一点的平面也没关系

5400807c95cd4dc5806a206c31cc053e.png

 特殊点被映射成自己:

4e7d80f3fcd9457aa90dd9a57296419a.png

所以根据特殊点可以推断出第三行的前两个值(0,0)

在远平面上依旧如此,我们取远平面的中心点,挤压后仍然是最初的美好

c332033db8cd4693991c4304b3992c70.png

 

把这两个式子放到一块:

c0f1226796124281b1a06ea17f221bba.png

后面就是正交投影变换啦!是不是还挺简单的

 变换就到这告一段落啦!拜拜~

 

这篇关于压轴出场的变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014802

相关文章

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

【数字信号处理】一文讲清FFT(快速傅里叶变换)

目录 快速傅里叶变换(Fast Fourier Transform,FFT)FFT的背景快速傅里叶变换(Fast Fourier Transform,FFT)DFT的数学表达实际计算重要性和应用频谱泄露、频谱混叠奈奎斯特采样定理参考链接 快速傅里叶变换(Fast Fourier Transform,FFT) FFT的背景 1、为什么要时域→频域频率?50Hz+频率120Hz

傅里叶变换家族

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

齐次变换矩阵的原理与应用

齐次变换矩阵的原理与应用 通过齐次变换矩阵,可以描述机械臂末端执行器(法兰)在三维空间中的平移和旋转操作。该矩阵结合了旋转和平移信息,用于坐标变换。 1. 齐次变换矩阵的基本形式 一个齐次变换矩阵 T是一个 4x4 矩阵,表示刚体的旋转和平移: T = [ R t 0 1 ] = [ r 11 r 12 r 13 x r 21 r 22 r 23 y r 31 r 32 r 33 z 0

MATLAB分析图像的离散余弦变换(DCT)

1. MATLAB的介绍以及所需函数的说明:  1.1 MATLAB  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设

PyTorch Demo-4 : 数据变换Transforms

Transforms的函数有很多,每次都是直接copy已有的代码,但是不知道具体是什么样子,在这里记录一下 Transforms常用方法的具体说明参考链接1,链接2,或者官方文档。 原始图像采用图像处理经典的Lena: Python代码 from PIL import Imagefrom torchvision import transforms as tfimport ma

【Get深一度】小波变换通俗解释 -算法与数学之美

链接:http://www.zhihu.com/question/22864189/answer/40772083 文章推荐人:杨晓东 从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。     下面就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东

【Get深一度】信号处理(二)——傅里叶变换与傅里叶级数的区别与联系

1.傅里叶级数和傅里叶变换:  傅里叶级数对周期性现象做数学上的分析 傅里叶变换可以看作傅里叶级数的极限形式,也可以看作是对周期现象进行数学上的分析。 除此之外,傅里叶变换还是处理信号领域的一种很重要的算法。要想理解傅里叶变换算法的内涵,首先要了解傅里叶原理的内涵。 傅里叶原理表明:对于任何连续测量的数字信号,都可以用不同频率的正弦波信号的无限叠加来表示。     傅里叶变

【C】快速傅里叶变换(FFT)讲解及实现

引言基2FFT 1.引言 人类的求知欲是永无止境的,自1965年 T. W. Cooley 和 J. W. Tuky 在《Math. Computation, Vol, 19, 1965》发表了著名的《 An algorithm for the machine calculation of complex Fourier series 》,人们对 有关傅里叶变换的改进和创新就从未止步。1

5.8幂律变换

目录 示例代码1 运行结果1 示例代码2 运行结果2 补充示例原理 示例:使用cv::pow进行图像处理 代码 运行结果 ​编辑 补充 实验代码3 运行结果3​编辑 在OpenCV中,幂律变换(Power Law Transformations)是一种常用的图像增强技术,尤其适用于调整图像的对比度。这种变换通过应用一个幂函数来调整图像的亮度,使得图像的细节更加明显