运动重投影问题的 OpenCV 结构

问题描述 投票:0回答:1

我目前面临基于 OpenCv 的 Structure from Motion 程序的问题。 我将尝试向您描述它的作用以及它应该做什么。

该程序基于经典的“运动结构”方法。

基本思想是拍摄一对图像,检测它们的关键点并计算这些关键点的描述符。然后进行关键点匹配,并进行一定次数的测试以确保结果良好。这部分工作完美。

完成后,将执行以下计算:基本矩阵、本质矩阵、本质矩阵的 SVD 分解、相机矩阵计算,最后是三角测量。

一对图像的结果是一组 3D 坐标,为我们提供了要在 3D 查看器中绘制的点。对于一对来说,这非常有效。

确实,这是我的问题:对于一对图像,3D点坐标是在图像对的第一张图像的坐标系中计算的,作为参考图像。当处理两个以上图像时(这是我的程序的目标),我必须重新投影在第一个图像的坐标系中计算的 3D 点,以获得一致的结果。

我的问题是:如何将相机相关系统中给出的 3D 点坐标重新投影到其他相机相关系统中?使用相机矩阵?

我的想法是获取 3D 点坐标,并将它们乘以之前每个相机矩阵的逆矩阵。

我澄清一下:

假设我正在处理第三个和第四个图像(因此是第三对图像,因为我正在处理 1-2 / 2-3 / 3-4 等)。

我在第三个图像的坐标系中获得了 3D 点坐标,如何在第一个图像坐标系中正确地重新投影它们?

我会做以下事情:

获取 3D 点坐标矩阵,对图像 2 至 3 应用相机矩阵的逆,然后对图像 1 至 2 应用相机矩阵的逆。 这是正确的吗?

因为那些相机矩阵是非方阵,我无法对它们求逆。

我肯定在某个地方弄错了,如果有人能启发我,我将不胜感激,我很确定这是一个相对简单的问题,但我显然错过了一些东西......

非常感谢您的阅读:)

c++ opencv matrix computer-vision
1个回答
0
投票

假设您有一个 3 * 4 外部参数矩阵,称为

P
。为了匹配 OpenCV 文档的符号,这是
[R|t]

这个矩阵

P
描述了从世界空间坐标到相机空间坐标的投影。引用文档:

[R|t] 将点 (X, Y, Z) 的坐标转换到相对于相机固定的坐标系。

您想知道为什么这个矩阵是非方形的。这是因为在 OpenCV 的通常上下文中,您并不期望“齐次坐标”作为输出。因此,要使其成为正方形,只需添加包含 (0,0,0,1) 的第四行即可。我们称这个新方阵为

Q

每对相机都有一个这样的矩阵,也就是说,每对图像

Qk

都有一个

{k,k+1}
矩阵,它描述了从相机
k
的坐标空间到相机
k+1
的坐标空间的投影。这些矩阵是可逆的,因为它们描述齐次坐标中的等距。

要从相机 3 的坐标空间转到相机 1 的坐标空间,只需将

Q2

的逆函数和

then
Q1 的逆函数应用于您的点。
    

© www.soinside.com 2019 - 2024. All rights reserved.