[读书笔记]Self-calibration - 1

 1. 介绍

self-calibration又叫auto-calibration,用于将投影重建(projective reconstruction)转换为度量重建(metric reconstruction),也就是求得每幅图的未知的标定矩阵Kj[Richard Szeliski 2010]

场景的已知信息不一样的话,所要采用的方法也不一样。例如,如果已知场景中存在平行线,得到三个以上的灭点,就可以建立无穷远平面的单应,从而恢复出焦点的长度和旋转量。如果没有这些外部信息,不可能独立地恢复出每个图像的所有标定矩阵的参数。考虑所有的镜头矩阵集合image,将世界坐标image转换为屏幕坐标image。现在考虑用一个任意的4*4投影转换image来转换3D场景image,生成一个新的由点image组成的模型。让每个矩阵Pj左乘image会生成同样的屏幕坐标,通过对新镜头矩阵image进行RQ分解,就可以得到一个新的标定矩阵。(因此,你只有屏幕坐标的话,得不到唯一的标定矩阵。。。)

因此,所有的自定标方法都会对标定矩阵做一些格式限制,或者设置使它们的一些项相等,或者假设它们不随时间变化。

假设我们有一系列图像,并且知道镜头的内部参数是固定的,而且已经根据点的对应求出了投影重建。也就是说,得到了每个视图的投影镜头矩阵Pi。约束认为对每个视图,K是一样的。但每个镜头矩阵都可以分解clip_image002[15],造成了每个视图的标定矩阵Ki不一致,不能满足我们的约束。但我们可以用单应性矩阵 H来转换镜头矩阵。既然镜头内部参数保持一致,则一定存在一个单应性矩阵(homography),使得clip_image002[17],从而保持了重建与约束的一致。我们可以将这个看做度量重建。如果目标是镜头标定而不是度量重建,则不需要显式地计算投影重建,而可以直接地计算标定矩阵。

2. 问题描述

假设我们有一个投影重建clip_image002,基于上文提到的约束,我们希望得到一个纠正的单应性矩阵H,构成一个度量重建clip_image002[4]。假设有m个镜头clip_image002[6],将一个3D的点XM投影到每个视图中的图像点clip_image002[8]M表示镜头已经定标过,并且世界坐标系是欧几里得的。这些镜头可以表示为clip_image002[10]i1,…,m

从投影重建中,我们得到镜头Piclip_image002[6]的关系:

clip_image002[13]                                            (1)

目标是求得未知的4*4单应矩阵H。

我们并不关心绝对的旋转、位移和比例缩放。设置世界坐标系与第一个镜头一致,则R1= It1 = 0。而Riti指定了第i个镜头到第一个之间的欧式转换,clip_image002[19]。相似的,在投影重建中选择一个通用相机作为第一个视点,则P1 = [I|0],然后将H表示为

clip_image002[21]

结合上式与(1)可以得到[K1|0] = [I|0]H,意味着A=K1,t=0。既然H是非奇异的,k一定是非0项,所以我们可以假设k=1,得到了H的格式:

clip_image002[23]              

向量vK1合起来,指定了投影重建中的无穷远平面:

clip_image002[25]

clip_image002[27],我们可以得到clip_image002[29]

结论. 对于一个投影重建clip_image002,令P1 = [I|0],可以用H将其转换成度量重建clip_image002[4],其中H为:

clip_image002[35]                                                 (2)

K是一个上三角矩阵,其实就是K1,。投影重建中无穷远平面的坐标为clip_image002[29]。因此,如果知道了投影帧中的无穷远平面和第一个镜头的标定矩阵,就可以从上式得到转换矩阵H。寻找度量结构(metric structure)等价于指定无穷远平面和绝对二次曲线(分别有3和5个自由度)。

3. 方法

下面推导基本的标定方程。将投影重建的镜头表示为clip_image002[38],用公式(2)替换公式(1)得到

clip_image002[42]                       (3)

利用RRT = I ,得到

clip_image002[44]

现在知道clip_image002[46],是绝对二次曲线的双像(dual image DIAC)[Hartley and Zisserman 2004 p210],可以得到自定标的基本方程:

clip_image002[50]

clip_image002[54]                               (4)

第二个公式是第一个公式逆的简化,ω是绝对二次曲线的像(IAC)。公式中的未知项为ω*iωi,以及参数p,已知项是投影镜头的Aiai

自定标的关键在于对Ki使用约束,比如设置其中一项为0,来生成公式(4)中的pK1的8个参数的方程。所有的自定标方法在解决这些方程中有些不同,接下来会讨论其中的几个,一般方法首先计算,然后使用迭代方法从中提取标定矩阵的值。

下面举个例子,假设所有的镜头都有一致的内参,则Ki=K,然后公式(4)转化为

clip_image002[56]               (5)

每个视图提供一个公式,我们可以通过参数来确定需要的视图数量。除了第一个视图,每个视图都带有5个约束,两边都是3*3对称矩阵,并且方程是齐次的。假设这些约束独立于每个视图,可以根据5(m-I)>=8来求得,因此,原则上只要m>=3就可以获得答案,即需要三帧以上的画面。如果m远大于3,则未知的K和p是超定的(over-determined)。可以将上式看做是一个参数最小化问题,调整(2)中的8个参数使得(4)得到满足或者满足最接近的度量结构的耗费函数是最小的。具体内容会在接下来讨论。

一般的self-calibration都需要三帧以上的画面,但[Hartley and Zisserman 2004]中提出了一个简单的技术,二帧重建,根据基础矩阵F可以恢复两个图的焦点长度(f0 , f1)。首先,假设镜头0偏差,已知宽高比(通常设为1),还有一个已知的光学中心。(当然这个在实际引用中有多少可行性还是不确定的)如果要求度量单位绝对准确,必须先对镜头进行预定标,使用地面控制点来确定重建。如果仅仅是图像渲染应用级的重建,则以上的假设在实际中已经足够了。

如今大部分镜头都有square pixels,并且光学中心在图像中心附近,由于径向畸变的原因更容易偏离一个简单的相机模型,需要加以补偿。最大的问题在于,当图像偏离了中心,光学中心不再处于正中,或者当透视图像采用一个不同的图片,就需要一个一般化的镜头矩阵。具体内容也会在后面讲到。

 

参考文献:

[Hartley and Zisserman 2004] Multiple View Geometry

[Richard Szeliski 2010] Computer Vision: Algorithms and Applications

本文原创, 转载请注明出处

http://www.cnblogs.com/luluathena/

posted @ 2010-11-09 12:53  筱夏  阅读(2409)  评论(0编辑  收藏  举报