[读书笔记]Self-calibration - 4
NOTE:那些特定情况下的自定标
旋转镜头的自定标
在没有平移的镜头下我们不可能进行仿射(或者其他任何)重建,因为我们不能恢复深度信息。但是,我们可以根据图像来计算无穷单应,要进行镜头定标,这些就够了。在Multiple View Geometry的p483-484,针对内部参数固定和内部参数变动的情况分别举了例子。下面是算法描述:
问题描述
要求镜头是绕中心旋转,给定m>=2个视点,计算每个镜头的参数。假设旋转并不总是围绕同一个轴的。
算法
1. 图像内部单应:计算每个视点i和引用视点之间的单应Hi,使得xi = Hix。方法可以是算法4.6(p123)等。然后标准化矩阵,使行列式为1。
- 常量定标:将
(i=1,…,m)重写为Ac = 0的形式,A是6m*6的矩阵,c是二次曲线
的元素重写为6维向量的格式。
- 对于变量定标参数,使用等式
来表达
的元的线性约束(表格19.4 p478),得到线性方程式。
3. 计算K:对
进行Cholesky分解
,其中K = U-T。
4. 迭代优化:通过使下式最小化来优化K的解:
算法的起点是由世界平面得到的图像与图像之间的单应集合。而要实现平面的自定标可以这样做:首先,平面与绝对二次曲线的交点——虚圆点,可以由单应映射于图像中。其次,p211的例8.18有提到,可以根据图像的虚圆点确定标定矩阵K。
假设第一幅图像的虚圆点(4 dof)已知,就可以根据Hi转换到其他视点。由于虚圆点位于绝对二次曲线上,因此每个视点对有两个约束。然后我们得到自定标方程:
H1=I。这个方程中的未知量是第一个视图下虚圆点的坐标和一些位置的定标参数。需要的视点数在表格19.5(p486)页列出。大多数情况下,平面的定标是一个非线性的问题,需要使用迭代方法进行计算。这个方法的优点在于它仅仅需要平面间的单应,而不是点的对应关系。平面之间的匹配转换的计算更简单、稳定和准确。可以用算法4.6(p123)来计算两幅图之间的转换。还可以用基于对应关系的方法来直接计算参数化的单应。
平面运动
有些在实际中很重要的情况是,镜头沿着平面运动,绕垂直于这个平面的轴旋转。比如漫游车在地面上,镜头固定于车头。在这种情况下,镜头沿着平行于地平面的平面运动,车头掉转后,镜头会绕一个垂直轴旋转。
描述
给定3+个图像去计算仿射重建,要求内部参数一致,并且遵守平面运动。
算法
1. 计算一个投影重建。根据三个视点的三焦点张量(trifocal tensor)
,计算方法如算法16.4(p401)。
2. 根据
计算成对的基础矩阵。算法15.1(p375)。把每个基础矩阵对称的部分分解为两条线,一个水平线,以及螺旋轴的像,见章节9.4.1(p252)。
3. 计算最高点。3个螺旋轴的像相交于最高点v。
4. 根据三元组计算水平线。从3个基础矩阵中得到6个极点,然后通过满足这些极点的正交回归(orthogonal regression)确定水平线。
5. 计算虚圆点的像。计算水平线上的虚圆点的像的位置ci,cj。
6. 计算无穷远平面。根据对应的图像点x<->x’,对每个v,ci,cj,x = x’,三角化得到
上的三个点,从而得到无穷远平面。
7. 计算仿射重建。通过计算的
来修正投影重建,见算法19.2(p479 我在self-calibration3中有写到)。
螺旋轴的像在图像中的轨迹是由固定的点组成的一条线,而水平线在图像中是一条固定的线。根据3个视点的图像,我们就可以提取出一条水平线和三个螺旋轴,从而计算图像中的虚圆点。
得到了无穷远平面后,我们可以计算图像间的单应。然后就可以通过常规方法来进行定标和度量重建,但由于运动的约束,所有的镜头都绕同一个轴旋转,会得到一个参数系列的解,在之前有讨论过定标的不确定性。有必要对镜头的内部参数做出假设来得到唯一的解,比如像素是正方形的(零偏差和宽高比固定)。
p489有一些例子。
单轴运动
单轴运动的螺旋轴只有一条,无法确定v。可以将这种运动想象为镜头固定,而物体在一个圆盘上旋转,或者镜头绕一个固定轴旋转。只有两个虚圆点,没有内部参数约束的情况下,能够得到的重建不是仿射而是特殊的投影重建。
首先,计算出固定的点。我们对图像上的点跟踪,会发现它们的轨迹就是一个椭圆。但在3D下它们与水平面平行,与交叉于虚圆点。这些椭圆的交叉点就是虚圆点的像。然后就可以从2个以上的视点下通过三角化得到3D的虚圆点。
或者我们可以模拟镜头矩阵,将其分解为下面的形式:
内部参数和外部参数的划分意味着H3*3和t是固定的,只有旋转角和z轴随镜头Pi改变。于是问题转化为确定H3*3和角度的问题。
单轴运动中的基础矩阵具有特殊的格式(章节9.4.1 p252),一旦确定了基础矩阵,就可以知道H3*3,只需要给定三个以上的视点。在提供额外的约束,就可以确定度量重建(p492)。
立体钻机的自定标
立体钻机有两个固定的镜头,这个固定意味着运动中钻机上的镜头的相对方向是不变的,每个镜头的内部参数也是不变的。在这样单一的运动下,无穷远平面可以被唯一地确定。
描述
给定两个立体图像对,满足固定的立体钻机的一般运动(例如R和t是非零的,t不垂直于R轴),要求计算仿射重建。
算法
1. 计算初始的投影重建X:在第10章有讲,使用第一对立体图像计算投影重建{PL,PR,{Xj}},包括计算基础矩阵F和图像之间点的对应关系(算法11.4, p291)。
2. 计算运动后的投影重建X’:计算第二对图像中点的对应关系。由于镜头的内部和相对外部参数都是固定的,第二对立体图像与第一对的基础矩阵相同。根据计算出第二对图像中的点的对应关系,用同样的镜头矩阵来三角化点Xj’。
3. 计算4*4的矩阵HP,X’=HPX:计算左边镜头的两幅图的对应关系(算法11.4, p291)。建立了空间点的对应关系Xj<->Xj’。根据5个或更多这样的3D的点的对应关系就可以线性地建立单应HP,然后通过最小化代价函数优化结果。例如最小化
来最小化观测到的和重投影的图像点之间的距离。
p497页有例子和示意图,这里就不详细说了。
自定标技术仍是研究的热门,还有很多优秀的算法正在被提出来。尚有一些难题未功课,比如多视点丈量和自动检测关键运动路径的算法。
也许看来似乎自定标提供了一个完整的度量重建的解决方案。没有必要进行镜头定标,我们可以采用很弱的相机约束比如零偏差等。不幸的是我们必须对完全信任自定标保持警惕。在适当的情况下自定标可以很好地工作,但鲁莽地使用会导致失败。下面提出几个具体的建议:
1. 注意不确定性的运动路径,比如单轴运动。运动不应该国小,或者视野过小。视野过小会在计算无穷单应的时候失败。
2. 尽可能地利用信息。尽管有时候使用最少的信息可能就够了,但在其他信息可用的情况下还是应该避免这种情况。比如,如果已知宽高比约束就应该采用。
3. 一旦最好以束调整结束。这样的情况下,最好镜头的内部参数的范围不是无穷的。例如,即使不知道主点的确切值,也可以确定它的一些范围。相似的,宽高比一般是0.5-3。这可以构成对代价函数的进一步约束,改善结果。
4. 严格限制运动类型的方法比通用的方法更可靠。比如针对镜头旋转而没有平移的方法比一般运动的方法更可靠。从一个平移运动中进行仿射重建也是一样。
The End
以上Self-calibration如非特殊标注,都来自<Multiple View Geometry>一书。我刚接触计算机视觉,有些地方理解的不好,如果发现错误请见谅。希望大家能多多指教^_^
本文原创,转载请注明出处