我目前面临基于OpenCv的Motion from Motion计划的问题。 我会试着描绘你它做了什么,以及它应该做什么。
这个程序取决于经典的“运动结构”方法。
基本思想是拍摄一对图像,检测其关键点并计算这些关键点的描述符。然后,完成关键点匹配,进行一定数量的测试以确保结果良好。那部分完美无缺。
一旦完成,将执行以下计算:基本矩阵,基本矩阵,基本矩阵的SVD分解,相机矩阵计算以及最后的三角测量。
一对图像的结果是一组3D坐标,为我们提供了在3D查看器中绘制的点。这对于一对完美无缺。
实际上,这是我的问题:对于一对图像,3D点坐标在图像对的第一图像的坐标系中计算,作为参考图像。当处理两个以上的图像时,这是我的程序的目标,我必须重新投影在第一个图像的坐标系中计算的3D点,以获得一致的结果。< / p>
我的问题是:如何将相机相关系统中给出的3D点坐标重新投影到其他相机相关系统?使用相机矩阵?
我的想法是获取3D点坐标,然后将它们乘以每个相机矩阵的倒数。
我澄清道:
假设我正在处理第三和第四张图像(因此,第三对图像,因为我的工作方式与1-2 / 2-3 / 3-4等相同)。
我在第三张图像的坐标系中得到了我的3D点坐标,如何在第一张图像坐标系中正确地重新投影它们?
我会做以下事情:
获取3D点坐标矩阵,对图像2到3应用摄像机矩阵的逆矩阵,然后对图像1到2应用摄像机矩阵的逆矩阵。 这甚至是正确的吗?
因为那些相机矩阵是非方形矩阵,我无法反转它们。
我肯定会误会某个地方,如果有人能够启发我,我会很感激,我很确定这是一个相对容易的人,但我显然错过了一些东西......
非常感谢阅读:)
答案 0 :(得分:0)
我们假设您有一个名为P
的3 * 4外部参数矩阵。要匹配OpenCV documentation的注释,这是[R|t]
。
此矩阵P
描述了从世界空间坐标到相机空间坐标的投影。引用文档:
[R | t]将点(X,Y,Z)的坐标转换为相对于相机固定的坐标系。
您想知道为什么这个矩阵是非正方形的。这是因为在OpenCV的通常上下文中,您不希望齐次坐标作为输出。因此,要使其成为正方形,只需添加包含(0,0,0,1)
的第四行。让我们调用这个新的方阵Q
。
每对相机都有一个这样的矩阵,即每对图像Qk
都有一个{k,k+1}
矩阵,用于描述相机k
坐标空间的投影到相机k+1
的那个。这些矩阵是可逆的,因为它们描述了齐次坐标中的等距。
要从摄影机3的坐标空间转到摄像机1的坐标空间,只需将Q2
和的倒数应用于您的点,然后 Q1
的倒数。< / p>