双目视觉三维重建之求两异面直线公垂线中点坐标的解法

本文详细介绍了双目立体视觉系统中三维重建的基本原理,通过三种不同的方法解决异面直线交汇定位问题。这些方法涉及直线参数方程、向量内积为零和平面方程的求解,旨在克服图像噪声和相机畸变带来的影响,精确获取空间点的坐标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

双目立体视觉系统三维重建原理如图所示,对于每个相机而言,如果光心和像点已知,就可以确定光心和像点组成的唯一射线。在针孔成像模型下,物点必然在此射线上。由两台相机进行交汇就有两条这样的射线,且所有的射线都应经过物点,即采用各射线在物点相交这一原理,就可以对空间物点进行交汇定位。同理,在存在折射平面的情况下,可以通过四元数等手段确定交互的射线的方向向量和射线通过的已知点(如折射平面上的点)。由于图像平面坐标的测量误差、噪声以及相机畸变等因素的影响, 两条射线可能不会相交, 所以交汇定位问题就是求异面直线公垂线段中点的坐标。

三维重建原理

已知:

空间中两异面直线的单位方向向量分别为:

\boldsymbol{l}_l=\left ( x_l,y_l,z_l \right ), \boldsymbol{l}_r=\left ( x_r,y_r,z_r \right )

且两条直线分别过点P_l,P_r

P_l=(x_1,y_1,z_1),P_r=(x_2,y_2,z_2)

假设:

作两条异面直线的公垂线,设公垂线与两直线的交点(垂足)分别为:

M_l(x_3,y_3,z_3),M_r(x_4,y_4,z_4)

1.解法一

解法一参考文献原图

设两条直线上存在滑动的两个点分别为Q_l,Q_r,则两点坐标的参数形式(直线参数方程)为:

Q_l(t_1)=P_l+t_1\boldsymbol{l_l},Q_r(t_2)=P_r+t_2\boldsymbol{l_r}

由异面直线公垂线的定义可知:

\left \| M_lM_r \right \|=\left \| Q_lQ_r \right \|_{min}

当Q点与M点重合时,Q点坐标即为中垂线的垂足坐标。 

由公垂线与两直线垂直,向量内积为0得:

\left\{\begin{matrix} \boldsymbol{Q_lQ_r}\cdot \boldsymbol{l_l}=0\\ \boldsymbol{Q_lQ_r}\cdot \boldsymbol{l_r}=0 \end{matrix}\right.

联立方程解得参数t_1,t_2的值:

\LARGE \left\{\begin{matrix} t_1=\frac{\left ( \boldsymbol{P_r}-\boldsymbol{P_l} \right )\cdot \boldsymbol{l_l}-\left ( \left ( \boldsymbol{P_r}-\boldsymbol{P_l}\right ) \cdot \boldsymbol{l_r}\right )\cdot \left ( \boldsymbol{l_l\cdot \boldsymbol{l_r}} \right )}{1-\left ( \boldsymbol{l_l} \cdot \boldsymbol{l_r}\right )^2}\\t_2=\frac{\boldsymbol{\left ( \left ( P_r-P_l \right )\cdot l_l \right )\cdot \left ( l_l\cdot l_r \right )-\left ( P_r-P_l \right )\cdot l_r}}{1-\left ( \boldsymbol{l_l} \cdot \boldsymbol{l_r}\right )^2} \end{matrix}\right.

进一步可解出垂足坐标M_l,M_r,从而得到中垂线的中点坐标

M=\left ( \frac{x_3+x_4}{2} , \frac{y_3+y_4}{2}, \frac{z_3+z_4}{2}\right )

2.解法二

解法二参考文献原图

由直线方向向量可求中垂线的方向向量:

\boldsymbol{l=l_l\times l_r}=\left ( l_x,l_y,l_z \right )=k\left ( x_4-x_3,y_4-y_3,z_4-z_3 \right )

由空间几何关系可知直线的方向向量、中垂线的方向向量、直线上某点到垂足的向量在同一平面上,即点P_l,M_l,M_r构成一个平面,P_r,M_l,M_r构成另一个平面,则有:

\begin{vmatrix} x_1-x_4&y_1-y_4 &z_1-z_4 \\ l_x& l_y&l_z \\x_l & y_l & z_l\end{vmatrix}=0

\begin{vmatrix} x_2-x_3&y_2-y_3 &z_2-z_3\\ l_x& l_y&l_z \\x_l & y_l & z_l\end{vmatrix}=0

由上式可解出垂足坐标M_l,M_r,从而得到中垂线的中点坐标

M=\left ( \frac{x_3+x_4}{2} , \frac{y_3+y_4}{2}, \frac{z_3+z_4}{2}\right )

3. 解法三

先求公垂线的方向向量:

\boldsymbol{l=l_r\times l_l}

进一步确定左右相机射线分别与公垂线确定的两个平面:

其中,右相机射线与公垂线确定的平面过点\boldsymbol{P_r},且法向量为: 

\boldsymbol{n_r=l_r\times l}=\left ( xx_r,yy_r,zz_r \right )

则该平面的平面方程为:

\pi_r: xx_r(x-x_2)+yy_r(y-y_2)+zz_r(z-z_2)=0

同理,左相机射线与公垂线确定的平面过点P_l,且法向量为:

\boldsymbol{n_l=l_l\times l}=\left ( xx_l,yy_l,zz_l \right )

则该平面的平面方程为:

\pi_l: xx_l(x-x_1)+yy_l(y-y_1)+zz_l(z-z_1)=0

接下来只需求直线与平面的交点,可得到公垂线的垂足。

求左相机射线与平面\pi_r的交点: 

\left\{\begin{matrix}\frac{x-x_1}{x_l}=\frac{y-y_1}{y_l}=\frac{z-z_1}{z_l}=t_1\\ xx_r(x-x_2)+yy_r(y-y_2)+zz_r(z-z_2)=0\end{matrix}\right.

解得:

t_1=\frac{(x_2-x_1)*xx_r+(y_2-y_1)*yy_r+(z_2-z_1)*zz_r}{x_l*xx_r+y_l*yy_r+z_l*zz_r}

求右相机射线与平面\pi_l的交点:

 \left\{\begin{matrix}\frac{x-x_2}{x_r}=\frac{y-y_2}{y_r}=\frac{z-z_2}{z_r}=t_2\\ xx_l(x-x_1)+yy_l(y-y_1)+zz_l(z-z_1)=0\end{matrix}\right.

解得:

t_2=\frac{(x_1-x_2)*xx_l+(y_1-y_2)*yy_l+(z_1-z_2)*zz_l}{x_r*xx_l+y_r*yy_l+z_r*zz_l}

代入参数方程可得公垂线与两条射线的交点,即垂足。易得公垂线的中点。 

参考文献

[1]罗世民,李茂西.双目视觉测量中三维坐标的求取方法研究[J].计算机工程与设计,2006(19):3622-3624.DOI:10.16208/j.issn1000-7024.2006.19.037.

[2]马峰,李琼砚,赵亚东.异面直线公垂线段中点算法为基的三维点重建[J].现代制造工程,2009(07):98-102.DOI:10.16731/j.cnki.1671-3133.2009.07.033.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑化咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值