我目前正面临一个问题,我的结构从运动程序基于OpenCv。我要试着描述它的作用,以及它应该做什么。
这个程序是基于经典的“结构从运动”的方法。
其基本思想是获取一对图像,检测它们的关键点,并计算这些关键点的描述符。然后进行关键点匹配,通过一定数量的测试,确保结果良好。那部分工作得很完美。
在此基础上进行了基本矩阵、本质矩阵、本质矩阵的SVD分解、摄像机矩阵的计算以及三角剖分。
一对图像的结果是一组3D坐标,给出了在3D查看器中绘制的点。对一对来说,这是完美的。
实际上,我的问题是:对于一对图像,三维点坐标是在图像对的第一个图像坐标系中计算出来的,作为参考图像。当处理两幅以上的图像(这是我程序的目标)时,为了得到一致的结果,我不得不对第一幅图像坐标系中的三维点进行重新投影。
我的问题是:如何将相机相关系统中给定的三维点坐标重新投影到另一个与相机相关的系统中?与相机矩阵?
我的想法是取3D点坐标,然后用每个摄像机矩阵的逆乘以它们。
我澄清:
假设我正在处理第三和第四张图像(因此,第三对图像,因为我的工作方式是1-2 / 2-3 / 3-4等等)。
我在第三幅图像的坐标系中得到了我的三维点坐标,如何在第一个图像坐标系中正确地重新投影它们呢?
我会做以下几件事:
得到三维点坐标矩阵,对图像2到3应用摄像机矩阵的逆,然后对图像1到2应用摄像机矩阵的逆,这是正确的吗?
因为那些相机矩阵是非方阵,我不能逆它们。
我肯定是搞错了,如果有人能启发我,我会很感激,我很肯定这是一个相对容易的,但我显然是错过了一些东西。
非常感谢你的阅读:)
发布于 2016-07-26 11:33:11
假设你有一个3*4的外部参数矩阵,叫做P
。为了匹配OpenCV文档的符号,这是[R|t]
。
这个矩阵P
描述从世界空间坐标到相机空间坐标的投影。引用下列文件:
将点(X,Y,Z)的坐标转换为相对于摄像机固定的坐标系。
你想知道为什么这个矩阵是非正方形的。这是因为在通常的OpenCV上下文中,不需要将齐次坐标作为输出。因此,要使其成为正方形,只需添加包含(0,0,0,1)
的第四行即可。让我们把这个新的平方矩阵叫做Q
。
每对相机都有一个这样的矩阵,也就是说,对于每对图像,都有一个Qk
矩阵,{k,k+1}
描述了从相机k
的坐标空间到摄像机k+1
的投影。这些矩阵是可逆的,因为它们描述了齐次坐标下的等距。
要从相机3的坐标空间到相机1的坐标空间,只需将Q2
和的逆变换应用到你的点上,然后用表示Q1
的逆。
https://stackoverflow.com/questions/38584282
复制相似问题