gpt4 book ai didi

computer-vision - 在经过校准的立体视觉装置中,如何获得实现3D三角剖分算法所需的 “camera matrices”?

转载 作者:行者123 更新时间:2023-12-04 13:53:14 29 4
gpt4 key购买 nike

我正在尝试实现Hartley&Zisserman的“多 View 几何”(第12.2节)中的(相对简单的)线性齐次(DLT)3D三角剖分方法,目的是将来实现其完整的“最佳算法”。现在,基于this question,我正在尝试使其在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教程是here(其他人可以看看这个问题)。

为了清楚起见(并使用其术语),投影矩阵P从欧几里得3空间点(X)到图像点(x)的映射为:

x = PX

在哪里:
P = K[ R | t ]

由(3x3)相机校准矩阵K和(3x3)旋转矩阵R和平移矢量(3x1)t定义。

问题的症结在于如何使用两个摄像机P和P'执行三角剖分。

我相信您建议世界原点位于第一台摄像机P上,因此:
P = K [ I | 0]


P' = K' [ R | t ]

然后,我们寻求在基本矩阵F中进行重建的目标是:
x' F x = 0

矩阵F当然可以用多种方法来计算(有时更常见于未校准的图像!),但是在这里,我认为您可能希望根据上面已经校准过的相机矩阵来进行计算:
F = [P' C]_x P' pinv(P)

其中 C = (0 1)是第一个摄影机的中心,而 pinv(P)是P的伪逆。 _x表示文献中用于矩阵乘法以计算矢量积的符号。

然后,您可以对基本矩阵F进行分解(通过SVD或直接方法执行)。
F = [t]_x M

因此,当您正确陈述状态时,我们可以直接基于以下条件计算三角剖分:
P = [ I | 0 ] 


P' = [ M | t ]

然后使用它们执行三角剖分应该相对简单(假设良好的校准,无噪声等)。

关于computer-vision - 在经过校准的立体视觉装置中,如何获得实现3D三角剖分算法所需的 “camera matrices”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502790/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com