一、仿射变换与透视变换
一直无法理解两种仿射变换与透视变换的区别,因此详细学习了两种变换的具体细节,重新书写了公式,并给出自己的一些看法。
1.仿射变换
可以认为,仿射变换是透视变换的一种特例。
仿射变换是一种二维坐标到二维坐标之间的线性变换,也就是只涉及一个平面内二维图形的线性变换。
图形的平移、旋转、错切、放缩都可以用仿射变换的变换矩阵表示。
它保持了二维图形的两种性质:
① “平直性”:直线经过变换之后依然是直线。一条直线经过平移、旋转、错切、放缩都还是一条直线。
②“平行性”:变换后平行线依然是平行线,且直线上点的位置顺序不变。
直观的感受就是,我们在电脑上对一张图片进行拖动、翻转、拉伸等等操作,看这一张图片的视角是不会变的。
任意的仿射变换都能表示为一个坐标向量乘以一个矩阵的形式,下面是几种仿射变换的矩阵形式。
放缩:
旋转:
错切:
上面几种变换都可以直接只用2x2矩阵变换,但是平移无法做到,因为在2x2矩阵中无论怎么相乘都无法变换出一个常数量。因此需要将原本的2维坐标向量变成齐次坐标,也就是用3维向量来表示2维向量。
平移:
变成齐次坐标后,为了实现原本2x2矩阵的放缩、旋转、错切的变换,只需要令即可。
上面的变换都是线性变换,因此仿射变换可以用以下通式来表示,也就是网上常见到的形式:
此时仿射变换的变换矩阵是2x3矩阵。
因此坐标变换的方程组如下:
可以看到有6个未知的系数,需要3对映射点(前提是相互独立)才能求解。这不难理解,6个变量自然需要至少列6个等式才可计算,而1对映射点可以提供2个等式。
同时3个点唯一确定一个平面,另外的3个映射点由于是线性变换也必然在同一个平面内,所以可以说仿射变换是平面内的图形变换。
2.透视变换
透视变换是将图片投影到一个新的视平面,也称作投影映射。
它是二维到三维
,再到另一个二维空间
的映射。
相对于仿射变换,它不仅仅是线性变换。它提供了更大的灵活性,可以将一个四边形区域映射到另一个四边形区域。
透视变换也是通过矩阵乘法实现的,使用的是一个3x3的矩阵,矩阵的前两行与仿射矩阵相同,这意味着仿射变换的所有变换透视变换也可以实现。而第三行则用于实现透视变换。
透视变换也使用了齐次坐标来表示二维向量:
此时透视变换的变换矩阵是3x3矩阵
透视变换得到的不是最后的坐标,需要进一步转化:
才是最后转化后的坐标,即: