图像的几何变换
作者:互联网
(1)缩放变换(Scale)
可以用矩阵乘法的形式表示:
不规则缩放的表示:
(2)镜像变换(Reflection)
(3)切割变换(Shear)
变换的只是横坐标,垂直方向没有变。固定一边,拉动另一边。
推导过程可以拿其中具体的某些点,比如左上方那个点的前后变化。
(3)旋转变换(Rotate)
推导过程可以拿右下角的点和左上角的点的前后变化,列方程求解。下面是拿右下角的点推导出矩阵第一列的值。
旋转 -θ 角度如下。可以看到,旋转 -θ 角和旋转 θ 角的转置是相等的。从定义上来看,旋转 -θ 角其实就是旋转 θ 角的矩阵得到的逆。
于是在旋转中,旋转矩阵的逆就等于旋转矩阵的转置。那么我们如果想知道往相反方向旋转角度的矩阵,就只需要得到正向旋转的矩阵,然后转置。
(在这里插一句,在数学上,如果一个矩阵的逆等于它的转置,那么我们称这个矩阵为正交矩阵)
(4)平移变化(Linear Transforms)
以上的变换都是线性变换,即都可用下面的 2 * 2 的变换矩阵来表示:
但是现在来看平移变换:
用矩阵的方式来表示平移变换如下。平移不能够直接写成一个矩阵乘以一个向量的形式,可见平移变换不是线性变换。
也就是说我们现在没办法用 2 * 2 的变换矩阵来表示平移变换了,但我们又不想单独为平移变换开一个特例。
于是引入齐次坐标的概念,即将一个原本是 n 维的向量用一个 n+1 维向量来表示。
需要注意的是,当我们引入了齐次坐标的概念后,就有如下对以前概念的新的解释:
比如二维的点加上一个维度,是 1;二维的向量加上一个维度,是 0。
我们从新的概念上看,向量相加仍然是向量,坐标点相减得到向量,坐标点与向量相加得到坐标点,这都符合我们原先对于向量的概念。而在这里,点与点相加,意味着第三个维度不再是 1,我们假设为 w,则三个维度都除以 w,得到新的坐标点,这个坐标点其实是两个坐标点的中点。
我们将需要进行平移变换的变换称为仿射变换(Affine Transformations)
并且引入齐次坐标后的变换如下:
那么此时缩放、旋转、平移的 3 * 3 变换矩阵如下:
可以看到第三行的数据都是 0 0 1,因此存储变换矩阵时其实只需要存储前面两行的数据。
(5)逆变换
逆变换是变换矩阵的逆矩阵。所以通过对变换矩阵求逆就能实现从变换后的图形变换回原图像。
(6)组合变换
上图的变换不是简单通过一个变换就能实现的,我们有两种思路,先平移再旋转,或先旋转再平移。
先平移后旋转的思路是行不通的,平移后再围绕原点坐标怎么也转不到预期的位置。
所以采用先旋转后平移。
考虑到变换矩阵都是 3 * 3 的,根据结合律,无论前面进行了多少次变换,最终得到的都是一个 3 * 3 的矩阵。
如何将一个远离原点的图形在给定点上进行旋转变换呢?
先平移向量 c 到原点位置,再进行旋转操作,最后再平移向量 c 回去。矩阵形式在上面。
(7)类推到三维
(8)三维空间中的变换
缩放和平移没有问题,但在三维空间中最复杂的操作可能就是旋转了。
任意的旋转较复杂,我们先看最简单的绕固定的 x、y、z 轴的旋转
绕 x 轴的旋转,x 是不变的,反映在矩阵中就是左上角 3 * 3 的矩阵中第一行是 1 0 0,第一列是 1 0 0。而那个 2 * 2 的矩阵就是对 y、z 平面进行的 α 角度的旋转。
同样道理,绕 z 轴旋转也是类似的。但是绕 y 轴的旋转就有点不一样。
是 z 叉乘 x 得到 y,而不是 x 叉乘 z,右手坐标系,因此是反的。
能够用简单的旋转组合成复杂的旋转,分别绕三个轴旋转 α角、β角、γ角,这三个角又被称为欧拉角。可以形象的看作飞机滚转(Roll);飞机俯仰(Pitch);飞机偏航(Yaw)。
图形学里也有人用以上公式将绕任意轴的旋转分解成绕 x、y、z 轴的旋转的组合。
绕轴 n 旋转 α 角度,但 n 只是一个向量,因此如果说绕某个轴旋转,则是默认过原点的,即轴的起点在原点上。
那如果我真的要让它沿着任意轴旋转怎么办?用之前的办法,先平移到原点,再旋转,然后平移回来。
I 是单位矩阵,矩阵 N 的理解如下:
这里的 * 并不是乘的意思,而是矩阵 A*。矩阵 N 实际上就是向量 ( x, y, z ) 的 dual matrix,可取代其做叉乘。
标签:平移,变换,矩阵,旋转,几何变换,坐标,图像,向量 来源: https://www.cnblogs.com/hanselhuang/p/15748092.html