面试-仿射变换
面试题目
仿射变换,给出一个点在平面旋转$ heta$角的仿射矩阵.
题目内容
仿射变换(ATF,Affine Transformation) 是图像的线性变换,对于一个集合$X$ 的仿射变换可以表示为:
$$
f(x) = Ax+b, x in X.
$$
对于我们需要处理的图像集合而言,可以表示为:
$$
g(x,y) = Af(x,y)+b.
$$
其中$A$矩阵就是仿射变换矩阵.
仿射变换
内容介绍可以参考链接:仿射变换介绍
常用的仿射变换包括:
缩放: Scale
旋转: Rotate
平移: Transform
反射: Reflection
错切: Shear
可以参考图:
![仿射变换图示--wiki 仿射变换图示--wiki](https://i.loli.net/2019/08/05/caeW6pgbhHNuKUT.png)
仿射变换中集合中的一些性质保持不变:
(1)凸性
(2)共线性:若几个点变换前在一条线上,则仿射变换后仍然在一条线上
(3)平行性:若两条线变换前平行,则变换后仍然平行
(4)共线比例不变性:变换前一条线上两条线段的比例,在变换后比例仍然步
注:所有的三角形都能通过仿射变化为其他三角形,所有平行四边形也能仿射变换为另一个平行四边形。
由于仿射变换是线性的,所以仿射变换的任意组合仍然是线性的.
仿射变换矩阵推导
仿射变换矩阵推导以 矩阵旋转为例,也是面试题目的内容:
假设原本点为 $C$ 点,旋转 $ heta$ 角度之后到达 $B$ 点, 计算旋转矩阵 A. 以二维矩阵为例
![仿射变换旋转矩阵推导示意图 仿射变换旋转矩阵推导示意图](https://i.loli.net/2019/08/05/VEFsn2B7emtkhPg.png)
对于$C,B$两点表示成极坐标为 $C(rcosalpha,rsinalpha)$,$B(rcos(alpha+ heta),rsin(alpha+ heta))$,
对于
$$
x_B = rcos(alpha+ heta) = r(cosalphacos heta-sinalphasin heta) = (cos heta -sin heta)x_C
$$
$$
y_B = rsin(alpha+ heta) = r(sinalphacos heta+cosalphasin heta) = (sin heta+cos heta)y_C
$$
所以可以推导出如下矩阵
$$
left[
egin{array}{l}
{mathrm{x_B}}
{y_B}
end{array}
ight]
=left[
egin{array}{cc}
{cos heta} & {-sin heta}
{sin heta} & {cos heta}
end{array}
ight]
left[
egin{array}{l}
{mathrm{x_C}}
{y_C}
end{array}
ight]
$$