Computer vision 在校准的立体视觉装置中,如何获得;“摄像机矩阵”;需要实现三维三角剖分算法吗?

Computer vision 在校准的立体视觉装置中,如何获得;“摄像机矩阵”;需要实现三维三角剖分算法吗?,computer-vision,linear-algebra,triangulation,camera-calibration,stereo-3d,Computer Vision,Linear Algebra,Triangulation,Camera Calibration,Stereo 3d,我试图实现Hartley&Zisserman的“多视图几何”(第12.2节)中的(相对简单的)线性齐次(DLT)3D三角测量方法,目的是在未来实现其完整的“最佳算法”。现在,基于,我试图让它在Matlab中工作,并将它移植到C++和OpenCV中,测试一致性。 问题是我不确定如何使用我拥有的数据。我已经校准了我的立体装置,并获得了两个固有的摄像机矩阵、两个失真系数向量、两个摄像机相关的旋转矩阵和平移向量,以及基本矩阵和基本矩阵。我还有两个点的2D坐标,这两个点应该是两幅图像坐标系中单个3D点的对

我试图实现Hartley&Zisserman的“多视图几何”(第12.2节)中的(相对简单的)线性齐次(DLT)3D三角测量方法,目的是在未来实现其完整的“最佳算法”。现在,基于,我试图让它在Matlab中工作,并将它移植到C++和OpenCV中,测试一致性。 问题是我不确定如何使用我拥有的数据。我已经校准了我的立体装置,并获得了两个固有的摄像机矩阵、两个失真系数向量、两个摄像机相关的旋转矩阵和平移向量,以及基本矩阵和基本矩阵。我还有两个点的2D坐标,这两个点应该是两幅图像坐标系中单个3D点的对应(分别由第一台和第二台相机拍摄)

该算法将两个点坐标和两个4x3“摄像机矩阵”p和p作为输入。这些显然不是从校准中获得的内在相机矩阵(M,M'),因为其中一个是3x3,也因为单独使用它们的投影将3D点置于两个不同的坐标系中,也就是说,缺少外在(旋转/平移)数据

H&Z手册包含关于使用SVD分解从基本矩阵或基本矩阵中恢复所需矩阵的信息(第9章),但也有其自身的附加问题(例如,尺度模糊)。我觉得我不需要,因为我已经明确定义了旋转和平移

然后的问题是:使用第一个固有矩阵,附加一列零作为第一个“摄像机矩阵”(p=[M | 0]),然后将第二个固有矩阵乘以由旋转矩阵和平移向量组成的一个外在矩阵作为附加列,以获得第二个所需的“摄像机矩阵”,是否正确(P'=M'*[R | t])?还是应该采取不同的做法


谢谢!

我手头没有我的H&Z,但他们关于这个主题的旧CVPR教程是(让其他人看看w.r.t这个问题)

为了清楚起见(并使用其术语),投影矩阵p从欧几里德3-空间点(X)映射到图像点(X),如下所示:

其中:

P = K[ R | t ]
由(3x3)摄像机校准矩阵K和(3x3)旋转矩阵R和平移向量(3x1)t定义

问题的关键似乎是如何使用你的两个相机p和p'进行三角测量

我相信您是在建议世界原点位于第一个摄像头p的a处,因此:

然后,我们在基本矩阵F中寻求重建,以便:

x' F x = 0
矩阵F当然可以通过多种方式计算(有时更常见的是通过未校准的图像!),但在这里,我认为您可能希望根据上面已校准的相机矩阵进行计算,如下所示:

F = [P' C]_x P' pinv(P)
其中,
C=(0 1)
是第一个摄像机的中心,
pinv(p)
是p的伪逆。
\u x
表示文献中用于矩阵乘法计算向量积的符号

然后可以执行基本矩阵F的因式分解(通过SVD或直接方法执行)

因此,正如您正确指出的,我们可以直接根据以下公式计算三角剖分:

P = [ I | 0 ] 


使用这些工具进行三角测量应该相对简单(假设校准良好、无噪音等)

谢谢你,这是完全正确的,我已经设法让它工作起来了。除了我不能享受没有噪音的奢侈之外,在这种情况下,三角测量是非常重要的,但幸运的是H&Z来拯救我。:)
x' F x = 0
F = [P' C]_x P' pinv(P)
F = [t]_x M
P = [ I | 0 ] 
P' = [ M | t ]