为了方便起见,以下叙述均采用平面直角坐标系。
一个矢量(1,2)可以表示为从原点指向该点的箭头。
你可以对这个矢量进行缩放,比如放大两倍就变成了(2,4)这个操作可以表示为2 x(1,2)。也就是说放大k倍就是k(x,y)上面的例子写成矩阵的话就是,这里用到了矩阵乘法。
(
1
2
)
(
2
0
0
2
)
\begin{pmatrix}1&2\end{pmatrix}\begin{pmatrix}2&0\\0&2\end{pmatrix}
(12)(2002)
这个很简单。你也可以把矩阵中的两个值弄成不一样的。那么如果你对一张图片操作的话,横竖两个方向上的缩放倍数不同图像就变形了。方的变成长方的。你也可以对矢量进行旋转。比如想把向量(1,0)逆时针旋转45度。旋转以后的向量和这个向量会构成一个三角形。旋转以后的是斜边,长度和原来向量长度一样。用勾股定理计算一下。三角形的顶点会变成
(
2
2
,
2
2
)
(\frac{\sqrt2}{2},\frac{\sqrt2}{2})
(22,22)。这个看起来比较麻烦。但是如果你明白矩阵乘法是怎么算的,那很容易理解为什么一个旋转矩阵会是这样的:
(
cos
(
θ
)
−
sin
(
θ
)
sin
(
θ
)
cos
(
θ
)
)
\begin{pmatrix} \cos(\theta)&-\sin(\theta)\\ \sin(\theta)&\cos(\theta) \end{pmatrix}
(cos(θ)sin(θ)−sin(θ)cos(θ))
有些变换,比如反射。相当于你在第一种情况里面对角线上的两个值有一个是负的。那么对应的就会把这个轴翻转过去。别的都很好理解。这些变换被称为线性变换。它提供了把一个图像扭成任意形状的方法。但在二维坐标系内,用2x2的矩阵所不能表示的变换就是平移操作。你在上面所有的操作无非都是给向量的两个分量乘一个系数。没办法再加一个数。想要表达这种计算就得给你的矩阵变成这样:
(
a
1
a
2
0
b
1
b
2
0
c
1
c
2
1
)
\begin{pmatrix} a_1&a_2&0\\ b_1&b_2&0\\ c_1&c_2&1 \end{pmatrix}
⎝⎛a1b1c1a2b2c2001⎠⎞
这样的话你的(x,y)向量就没法乘进去了。你可以在后面添个1,编程(x,y,1)这样的。那么变换以后的结果就是(xa1+yb1+c1,xa2+yb2+c2,1),去掉最后面的1,前面的就是线性变换加上一个平移变换的结果。这就是仿射变换。简单的说就是一个线性变换加上平移。
仿射变换可以理解为经过对坐标轴的放缩,旋转,平移后原坐标在在新坐标域中的值
更简洁的说:仿射变换=线性变换+平移