分享

计算机图像学之旋转变换原理

问题导读:
1、如何理解平移变换?
2、如何理解缩放变换?
3、如何理解旋转变换?
4、如何理解绕任意轴的三维旋转?




1、简介

旋转变换是计算机图像学中应用非常广泛的一种变换,为了后面解释的需要,我们也添加了平移变换、缩放变化等内容。文章重点介绍关于旋转的变换,包括二维旋转变换、三维旋转变换以及它的一些表达方式(旋转矩阵、四元数、欧拉角等)。

2、平移变换
将三维空间中的一个点 [x,y,z,1] 移动到另外一个点 [x′,y′,z′,1],三个坐标轴的移动分量分别为dx=Tx,dy=Ty,dz=Tz, 即

2019-11-26_191607.jpg

3、缩放变换

将模型放大或者缩小,本质也是对模型上每个顶点进行放大和缩小(顶点坐标值变大或变小),假设变换前的点是 [x,y,z,1],变换后的点是 [x′,y′,z′,1],那么
2019-11-26_191645.jpg

逆矩阵

平移变换矩阵的逆矩阵与原来的平移量相同,但是方向相反。
2019-11-26_191716.jpg

4、旋转变换
4.1 绕原点二维旋转

首先要明确旋转在二维中是绕着某一个点进行旋转,三维中是绕着某一个轴进行旋转。二维旋转中最简单的场景是绕着坐标原点进行的旋转,如下图所示:
2019-11-26_191748.jpg
如图所示点 (x,y)(x,y) 绕原点 逆时针旋转 θθ 角 ,得到点 (x′,y′)

    注:此处为逆时针旋转,因此旋转过后的 (x′,y′) 坐标采用 (α+θ) 而不是 (α−θ)


矩阵解释:
2019-11-26_191845.jpg

极坐标解释:

此处不用直角坐标系解释,极坐标解释更便于理解
2019-11-26_191915.jpg

4.2 绕任意点的二维旋转

绕原点的旋转是二维旋转最基本的情况,当我们需要进行绕任意点旋转时,我们可以把这种情况转换到绕原点的旋转,思路如下:

        首先将旋转点移动到原点处
        执行如2所描述的绕原点的旋转
        再将旋转点移回到原来的位置


2019-11-26_191944.jpg
也就是说在处理绕任意点旋转的情况下需要执行两次平移的操作。假设平移的矩阵是 T(x,y),也就是说我们需要得到的坐标 v′=T(x,y)∗R∗T(−x,−y)(我们使用的是列坐标描述点的坐标,因此是左乘,首先执行 T(−x,−y)


在计算机图形学中,为了统一将平移、旋转、缩放等用矩阵表示,需要引入齐次坐标。(假设使用2x2的矩阵,是没有办法描述平移操作的,只有引入3x3矩阵形式,才能统一描述二维中的平移、旋转、缩放操作。同理必须使用4x4的矩阵才能统一描述三维的变换)。

对于二维平移,如下图所示,P
P 点经过x和y方向的平移到 P′点,可以得到:
2019-11-26_192050.jpg
2019-11-26_192114.jpg
从平移和旋转的矩阵可以看出,3x3 矩阵的前 2x2 部分是和旋转相关的,第三列与平移相关。有了上面的基础之后,我们很容易得出二维中绕任意点旋转的旋转矩阵了,只需要把三个矩阵乘起来即可:
2019-11-26_192142.jpg

4.3 三维基本旋转

我们可以把一个旋转转换为绕基本坐标轴的旋转,因此有必要讨论一下绕三个坐标值 x,y,z的旋转。

本文在讨论过程中使用的是类似于OpenGL中定义的右手坐标系,同时旋转角度的正负也遵循右手坐标系的约定。如下图所示
2019-11-26_192215.jpg
4.3.1 绕X轴的旋转
2019-11-26_192244.jpg
2019-11-26_192311.jpg

4.3.2 绕Y轴旋转
2019-11-26_192338.jpg
2019-11-26_192401.jpg

4.3.3 绕Z轴旋转
2019-11-26_192428.jpg
2019-11-26_192451.jpg

4.4 小结

上面描述了三维变换中绕单一轴旋转的矩阵表达形式,绕三个轴旋转的矩阵很类似,其中绕y轴旋转的矩阵与绕 X
和 Z 轴旋转的矩阵略有点不同(主要是三个轴向顺序和书写矩阵的方式不一致导致的,绕三个不同坐标旋转轴以及其他二个坐标轴组成平面的顺序是: XYZ (绕 XX 轴) YZX(绕YY 轴) ZXY(绕 ZZ 轴),其中绕 Y 轴旋转,其他两个轴是 ZX,这和我们书写矩阵按

2019-11-26_192551.jpg

5、绕任意轴的三维旋转

绕任意轴旋转的情况比较复杂,主要分为两种情况,一种是平行于坐标轴的,一种是不平行于坐标轴的。
5.1 平行坐标轴

对于平行于坐标轴的,我们首先将旋转轴平移至与坐标轴重合,然后进行旋转,最后再平移回去。
2019-11-26_192631.jpg

5.2 不平行坐标轴

对于不平行于坐标轴的,可按如下方法处理。(该方法实际上涵盖了上面的情况)

绕任意轴的三维旋转可以使用类似于绕任意点的二维旋转一样,将旋转分解为一些列基本的旋转。绕任意轴旋转如下图所示:

  • 将旋转轴平移至原点
  • 将旋转轴旋转至 YOZ平面
  • 将旋转轴旋转至于 Z轴重合
  • 绕 Z轴旋转 θ度
  • 执行步骤3的逆过程
  • 执行步骤2的逆过程
  • 执行步骤1的逆过程


图形详解过程:
步骤1:

将原旋转轴 u平移 v 至过原点 OO,对应矩阵操作
2019-11-26_192805.jpg
步骤2:

旋转操作,将 u 绕 z 轴旋转 α 角 至XOZ 平面,对应的图如下
2019-11-26_192853.jpg
步骤3:

步骤3也是一个旋转操作,将 u 绕 y 旋转 β 至与 x 轴重合,对应的图如下
2019-11-26_192930.jpg
步骤4:
2019-11-26_192959.jpg
2019-11-26_193044.jpg
步骤5:

此时再将 步骤3,2,1逆操作即可得到原始点 P 点绕旋转轴 u 旋转 θ 角后的点 Q;
2019-11-26_193123.jpg

5.3 α,β,θ 角度补充

为了全文的排版,以及读者体验,上述解释全部采用的 α,β,θ ,具体从何得来并没有做解释说明,在此将对 α,β,θ 的缘由做个详细解释。
2019-11-26_193159.jpg

2019-11-26_193219.jpg
2019-11-26_193253.jpg
2019-11-26_193313.jpg

作者:ViatorSun
来源:https://blog.csdn.net/ViatorSun/article/details/102611431
最新经典文章,欢迎关注公众号


没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条