运动重投影问题的OpenCV结构

OpenCV Structure from Motion Reprojection Issue

本文关键字:OpenCV 结构 问题 投影 运动      更新时间:2023-10-16

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

该程序采用了经典的"运动结构"方法。

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

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

一对图像的结果是一组3D坐标,给我们在3D查看器中绘制的点。这对情侣来说效果很好。

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

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

我的想法是取三维点坐标,并将其乘以之前每个相机矩阵的倒数。

我澄清:

假设我正在处理第三个和第四个图像(因此,是第三对图像,因为我的工作方式类似于1-2/2-3/3-4,依此类推)。

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

我会做以下事情:

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

因为那些相机矩阵是非平方矩阵,我不能求逆。

我肯定弄错了什么地方,如果有人能启发我,我会很感激,我很确定这是一个相对容易的过程,但我显然错过了一些东西。。。

非常感谢阅读:)

假设您有一个3*4的外部参数矩阵,称为P。为了匹配OpenCV文档的注释,这是[R|t]

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

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

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

每对相机有一个这样的矩阵,也就是说,每对图像{k,k+1}有一个Qk矩阵,它描述了从相机k的坐标空间到相机k+1的坐标空间的投影。这些矩阵是可逆的,因为它们描述了齐次坐标中的等距。

要从相机3的坐标空间转到相机1的坐标空间,只需将Q2的倒数应用于点,然后应用于Q1的倒数。