三目立体的合并深度图

Merging depth maps for trinocular stereo

我有一个平行三目设置,其中所有 3 个相机都以共线方式排列,如下图所示。

左摄像头------------中摄像头---------------------------- ------右摄像头

左右摄像头之间的基线(摄像头之间的距离)最短,左右摄像头之间的基线最长。

理论上我可以使用不同的相机组合(L-R、L-C 和 C-R)获得 3 组视差图像。我可以使用三角测量为每个视差图生成深度图(3D 点)。我现在有 3 个深度图。

对于靠近的物体(因为基线很短),L-C 组合具有更高的深度精度(测量距离更准确),而 L-R 组合对于远处的物体具有更高的深度精度(因为基线很长)。同样,对于中等距离的物体,C-R 组合也是准确的。

在立体设置中,通常我们将左 (RGB) 图像定义为参考图像。在我的项目中,通过对深度值进行阈值处理,我获得了参考图像上的 ROI。例如,我找到深度值在 10-20m 之间的所有像素,并找到它们各自的像素位置。在这种情况下,我在 3D 点和它们对应的像素位置之间建立了关系。

由于在正常的立体设置中,我们只能根据基线(近和远)对两个区域之一获得更高的深度精度,我计划使用 3 个摄像头。这有助于我为三个区域(近、中、远)生成更高精度的 3D 点。

我现在想合并3张深度图以获得全局图。我的问题如下-

  1. 如何合并三个深度图?
  2. 合并后,我如何知道哪个深度值对应于参考(左 RGB)图像中的哪个像素位置?

非常感谢您的帮助:)

1) 如果您将全局 2D 深度图视为图像或深度值矩阵,我认为简单的 "merging" 深度图(作为值矩阵)是不可能的。您可以考虑将 3 组 3D 点与一些相似性标准(如距离)合并(优化点云)。如果距离太近,删除其中一个主题(伪代码)

for i in range(points):
 for j in range(i,points):
  if distance(i,j) < treshold
    delete(j)

或删除 2 个点并添加一个具有平均坐标的点

2) 从第一点开始,这个问题变成了"how to connect a 3D point to the related pixel in the left image"(这是唯一的解释)。 答案很简单:使用投影方程。如果你有 K(内在矩阵),R(旋转矩阵)和 t(平移向量)来自左相机的校准,将 R 和 t 加入一个 3x4 矩阵

[R|t]

然后将4维坐标(X,Y,Z,1)中的M个3D点连接为一个m点(u,v,w)

m = K*[R|t]*M

将 m 除以它的第三个坐标 w 得到

m = (u', v', 1)

u'和v'是左图中的像素坐标。