前言
《视觉SLAM十四讲–ch13.3》单目稠密重建代码中的三角化过程,不像第7章直接调用OpenCV中的triangulation()函数求解,而是自己根据公式计算、并使用克莱姆法则对方程组进行求解,得出深度信息。
但代码中对有关公式的推导及与公式的对应关系讲解的不甚清楚,这里对该三角化过程进行公式推导,并与实现代码对应起来,方便大家理解。
公式推导也可参考:三角化公式推导&手撕代码进行补充。
公式推导
当通过极线搜索和块匹配确定参考帧与当前帧的匹配像素点以后,接下来就是通过三角化计算像素点对应的深度值。
按照对极几何中的定义,设 x 1 , x 2 x_1,x_2 x1,x2为两个匹配像素点的归一化坐标,则他们满足:
s 1 x 1 = s 2 R x 2 + t s_1x_1=s_2Rx_2+t s1x1=s2Rx2+t
即:
(1) s 1 x 1 − s 2 R x 2 = t s_1x_1-s_2Rx_2=t\tag 1 s1x1−s2Rx2=t(1)
对式(1)分别左乘 x 1 T x_1^T x1T、 ( R x 2 ) T (Rx_2)^T (Rx2)T,得到式(2):
(2) { s 1 x 1 T x 1 − s 2 x 1 T R x 2 = x 1 T t s 1 ( R x 2 ) T x 1 − s 2 x 2 T x 2 = ( R x 2 ) T t \left\{ \begin{array}{c} s_1x_1^Tx_1-s_2x_1^TRx_2=x_1^Tt \tag 2\\ \\ s_1(Rx_2)^Tx_1-s_2x_2^Tx_2=(Rx_2)^Tt \end{array} \right. ⎩⎨⎧s1x1Tx1−s2x1TRx2=x1Tts1(Rx2)Tx1−s2x2Tx2=(Rx2)Tt(2)
令: x 1 = f r e f 、 s 1 = d r e f 、 x 2 = f c u r r 、 s 2 = d c u r r 、 f 2 = R R C ∗ f c u r r x_1=f_{ref}、s_1=d_{ref}、x_2=f_{curr}、s_2=d_{curr}、f_2=R_{RC}*f_{curr} x1=fref、s1=dref、x2=fcurr、s2