使用极线几何的三角测量点

时间:2016-01-15 12:53:46

标签: opencv computer-vision triangulation stereo-3d

我在OpenCV中使用方法

  

triangulatePoints(P1,P2,X1,X2)

通过左/右图像中的图像点x1 / x2和投影矩阵P1 / P2获得点的3D坐标。

我已经研究过极线几何,并且知道其背后的大部分数学知识。但是这个算法在数学上如何得到3D坐标?

1 个答案:

答案 0 :(得分:1)

据我所知,这里只是一些想法,至少应该在理论上起作用。

使用相机方程ax = PX,我们可以将两个图像点对应表示为

ap = PX

bq = QX

其中p = [p1 p2 1]'q = [q1 q2 1]'是匹配的图像指向3D点X = [X Y Z 1]'PQ是两个投影矩阵。

我们可以扩展这两个方程并重新排列这些术语以形成Ax = b系统,如下所示

p11.X + p12.Y + p13.Z - a.p1 + b.0 = -p14

p21.X + p22.Y + p23.Z - a.p2 + b.0 = -p24

p31.X + p32.Y + p33.Z - a.1 + b.0 = -p34

q11.X + q12.Y + q13.Z + a.0 - b.q1 = -q14

q21.X + q22.Y + q23.Z + a.0 - b.q2 = -q24

q31.X + q32.Y + q33.Z + a.0 - b.1 = -q34

我们得到

A = [p11 p12 p13 -p1 0; p21 p22 p23 -p2 0; p31 p32 p33 -1 0; q11 q12 q13 0 -q1; q21 q22 q23 0 -q2; q31 q32 q33 0 -1]x = [X Y Z a b]'b = -[p14 p24 p34 q14 q24 q34]'。现在我们可以求解x来找到3D坐标。

另一种方法是使用相机方程ax = PX中的事实,即xPX是平行的。因此,他们的叉积必须是0向量。所以使用,

p x PX = 0

q x QX = 0

我们可以构建一个Ax = 0形式的系统并求解x。