2.3 Projective transformations
我姑且把这个翻译为投影变换,大致来说投影变换是投影平面 中一种可逆的点到点、线到线的映射。我觉得要注意的就是两点:可逆的、线到线的(直线总不可能投影成弯的吧)。投影也被称为直射变换(Collineation,共线,这个名字很形象)、投影变换(Projective transformation)、单应性变换(Homography)。
投影的代数定义为:一个映射 ,存在一个3*3的非奇异矩阵 使得任何 中一点 都有 。
上面的代数定义告诉我们任何一个投影变换都是齐次坐标下的线性变换,反之亦然。之前说重要的两点是:可逆、线到线。非奇异矩阵就是可逆的,所以简单看一下线到线的映射。假设有点x在直线l上,则有 。进一步由H可逆可以写成 。我们可以机智地把这个等式前后结合,解读成直线l上点投影后得到的点 同样在一条直线上,这条直线是 。
- 投影变换
投影变换的代数表达 展开如下:
同样值得注意的是决定H的是9个系数间的比例,所以其dof是8.
- 平面间映射
这一小部分讲的也比较难读懂。个人认为主要讲了“中心投影”。中心投影更确切地应该叫做透视,学过素描的人应该理解这个,我觉得这里的中心应该就是透视中的灭点。这部分没有给详细定义就不多说了。主要感性地理解一下下图吧:中心投影把一个平面变换成另一个平面,两者间对应的直线都可以看成是一个过投影中心的平面与这两个平面的交线。
- 例:从一个平面的透视图像来消除投影畸变
作为一名绘画爱好者我必须说明一下透视是产生立体感的关键,不过这里我们还是考虑怎么消除这种投影畸变,我们想看到一个平面内的平行直线而不是在透视效果下会相交的“平行线”。
道理很简单,因为投影就是一个线性变换H,我们只要把这个H求出来就行,用它的逆就可以消除投影畸变。
我们假设点(x,y)通过H映射到(x',y'),比较机智地用一下投影变换的代数定义:
确定两个等式很自然,因为一个点的自由度只有2而不是3.这里我们用了点的齐次坐标的两个比例去套公式。整理一下写成如下的样子:
这已经有两个等式了。前面说过H的自由度是8,所以我们用四个点就能得到8个等式进而解出H。需要特别注意的是,这四个点中任意三点都不能共线!
最后要说明一下:投影种类很多。除了透视还有“多次投影的串联”“打在另一平面的阴影”等。
2.3.1 Transformations of lines and conics
- 线的变换
线的变换其实在这一部分开始时已经间接证明了。我们为了说明投影变换满足线到线映射利用了
我们机智地把前两项后两项分别结合在一起解读这个等式,那么上面这个式子就可以看成 。其中 。稍微变得好看一点就得到了直线的投影变换如下:
- 圆锥曲线的变换
导出圆锥曲线投影变换的讨论跟上面过程类似。先有圆锥曲线满足的式子 。然后把变换关系 带入得到: 。显然我们可以看出来变换后的x'所在的圆锥曲线是:
对于对偶圆锥曲线的投影变换,完全同理的步骤可以得到结果:
下一章节将会讲变换的层级。作为热身我先放上下图,我们可以直观感受一下相似、仿射、投影之间的区别,体会他们之间的层级。