我有一个平行的三目镜设置,所有3个摄像机都以共线的方式对齐,如下所示。
左摄像机------------中心 - 相机----------------------------- ----右键摄像机
左侧和中央摄像机之间的基线(摄像机之间的距离)最短,左右摄像机之间的基线最长。
理论上,我可以使用不同的相机组合(L-R,L-C和C-R)获得3组视差图像。我可以使用三角测量为每个视差图生成深度图(3D点)。我现在有3张深度图。
对于靠近的物体(由于基线很短),L-C组合具有更高的深度精度(测量距离更准确),而 L-R组合对远处的物体具有更高的深度精度(因为基线很长)。类似地,C-R组合对于中距离的物体是准确的。
在立体设置中,通常我们将左(RGB)图像定义为参考图像。在我的项目中,通过对深度值进行阈值处理,我在参考图像上获得了ROI。例如,我找到深度值在10-20m之间的所有像素并找到它们各自的像素位置。在这种情况下,我在3D点与其对应的像素位置之间存在关系。
由于在普通立体声设置中,我们可以根据基线(近处和远处)仅对两个区域中的一个具有更高的深度精度,我计划使用3个相机。这有助于我为三个区域(近,中,远)生成更高精度的3D点。
我现在想要合并3个深度贴图以获得全局贴图。我的问题如下 -
非常感谢您的帮助。)
答案 0 :(得分:0)
1)我认为这很简单"合并"如果您将全局2D深度图视为图像或深度值矩阵,则深度图(作为值的矩阵)是不可能的。您可以考虑将3组3D点与一些相似性标准合并,例如距离(精炼点云)。如果距离太近,请删除主题(伪代码)
之一for i in range(points):
for j in range(i,points):
if distance(i,j) < treshold
delete(j)
或删除2个点并添加一个具有平均坐标
的点2)从第一点开始,这个问题变成了如何将3D点连接到左图像中的相关像素&#34; (这是唯一的解释)。 答案很简单:使用投影方程。如果你有来自左相机校准的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&#39;和v&#39;是左图像中的像素坐标。