首先假设世界坐标系中平面π上有一个二次曲线Cw,分别在两个视图中有两个投影C和C‘,则与Cw相切的极平面定义了与C和C‘相切的极线。Kruppa方程式就是与曲线相切的极线对应关系的代数表示。在第一个视图中两个切极线可以表示为一个退化的点索二次曲线(point conic),任何平面中,不同视图的极切线在单应性矩阵H下对应的。这一发现符合任意二次曲线,包括绝对二次曲线,因此,我们得到如下公式:(推导过程略,p470)
如果各视点下内部参数不变,则=,于是。这就是Kruppa方程的一般格式,但这并不常用,接下来给出一个常用的格式(推导过程略,p471)
然后我们便可以根据约束得到二次方程。
以上的方法是基于两个视点的,这个方法也可以扩展到多个视点,给出3个视点,已知每对之间的F,则原则上存在6个约束,足够得出。使用其中任意的5个等式得到5个五元二次方程,可以得到2^5个可能的解。这并不是一个有前途的方法。
如果视点之间无旋转,则Kruppa方程无法提供对的约束。对于三个以上的视图,Kruppa方程所能提供的约束比其他方法要差一些,因为它本质上是视点对的约束。这是自定标文献史中的第一个例子,还是很有意义的方法。
要得到度量重建,可以先确定无穷远平面,然后得到,最后根据确定K。
模约束(modulus constraint)是关于的坐标的一个多项式等式。假设内部参数是常量,然后根据p461的Ki=K,有:
它约束了无穷远平面的位置p。每一对视点都会生成一个四次方等式,因此3个视点就可以确定,但可能有4^3个解。不过有了模约束提供的一个额外的三次方程约束,就可以删去大量的错误解(p474)。
你可以把模约束看做Kruppa方程的旁支,一个是关于的等式,一个是关于的等式。知道了其中一个,另一个就可以确定。
找出无穷远平面其实是自定标中最难的事情,我们有许多其他的方法,在第十章中讨论了。比如利用场景的几何属性,通过灭点的对应关系确定上的点,3个点确定一条平面等等,这里不再详细说,p474页有讲。
确定了无穷远平面意味着仿射重建已知,剩下的步骤就是从仿射到度量的转换。基于IAC或者DIAC的转换是一个可用的线性算法。
无穷单应 无穷单应矩阵是根据无穷远平面而在两个图像之间进行平面投影转换,如果已知无穷远平面和镜头矩阵,我们可以得到:
这是从镜头[I|0]到镜头的单应。如果第一个镜头并不是标准格式的,我们还可以这样计算:
其实没有必要,我们可以创建一个新视点,符合标准格式,然后用它来表达无穷单应。
然后我们可以得到下面的关系:
有一个关系式对自定标很重要,是从仿射重建得到度量重建的基础,也是对非平移镜头进行定标的基础。就是如果已知,则和之间的关系式线性的。这意味着在一个视点下上的约束可以轻易的转换到另一个视点下,因此可以通过线性关系得到足够的约束来确定。一旦被确定,K就可以通过Cholesky分解得到。
在一个单一的运动下K的计算对的准确度要求很高,如果不够准确则可能不会得到一个正定的矩阵,无法进行Cholesky分解。
使用(IAC)的好处在于某些情况下它会使问题变得简单,比如零偏差的情况下,DIAC方法(我的日志Self-calibration - 2)需要得到主点,而IAC不用。
关于IAC的约束,在p478页的表格中有列出,详细的内容也请参见书籍。
问题描述
给定一个投影重建{Pi,Xj},其中Pi=[Ai | ai],通过一个仿射重建确定度量重建。
算法
1. 仿射修正:使用之前提到的方法确定定义的向量p,这样就可以用下面的方法得到仿射重建{PiHp,Hp-1Xj}。
2. 无穷单应:计算引用视点和其他视点间的无穷单应性矩阵,需要对矩阵标准化,使得行列式为1:
4. 通过SVD得到Ac = 0的最小二乘解。
5. 度量修正:运用Cholesky分解,然后可以通过下面的公式得到度量重建{PiHPHA,(HPHA)-1Xj}。
6. 使用迭代的最小二乘最小化来优化结果。
3. 使用无穷单应关系的不确定性
如果镜头的运动仅仅有旋转的话,得到的结果会带有不确定性。尽管无穷单应看起来为的5个自由度提供了6个约束,但实际上只有4个是线性无关的。
一个参数的不确定性可以用某些方法来消除。比如假设镜头的内部参数来增加约束等,详细方法在p479-480中讨论。如果旋转轴与镜头的坐标轴平行,则我们还会遇到不确定性。这个不确定性是运动所带来的,并没有任何特定的自定标算法可以解决。
本文原创,转载请注明出处