我正在尝试将使用自由移动的相机(局部空间)拍摄的点的位置转换为同一场景的图像中的位置(全局空间)。该点的位置是在局部空间中给出的,我需要在全局空间中计算它。我在整个场景中都有标记,以便在全局和局部空间中都有相应的点来计算透视变换。
我试图通过在JavaCV(cvGetPerspectiveTransform(localMarker,globalMarker,mmat))的帮助下比较全局和局部空间中相应标记的点来计算透视变换矩阵。然后我借助透视变换矩阵 (cvPerspectiveTransform(localFieldPoints, globalFieldPoints, mmat)) 变换点在局部空间中的位置。
我虽然这足以解决我的问题,但效果并不好。我还注意到,当我计算视频的一个特定图像中不同标记的透视变换矩阵时,我得到了不同的透视变换矩阵。如果我理解一切正确,这不应该发生,因为这里的视角总是相同的,所以我应该总是得到相同的透视变换矩阵,不是吗?
因为我对这一切都很陌生,这是我的第一次尝试,我只是想知道我使用的方法是否普遍正确还是应该以不同的方式完成?也许我只是错过了什么?
编辑:
再一次,我有一张我看到的完整场景的图像和一个在场景中自由移动的摄像机的视频。现在我拍摄视频的每个图像并将其与完整场景的图像进行比较(我使用不同的相机来制作图像和视频,所以相机的内在本质实际上并不相同。这可能是问题吗?
右侧是场景图像,左侧是视频图像。左侧视频图像中的红色圆圈是给定点。右图中的红色方块是借助透视变换计算得到的点。如您所见,计算的点不在正确的位置。
“我得到不同的透视变换矩阵”的意思是,当我在标记“0E3E”的帮助下计算透视变换矩阵时,我得到的矩阵与使用标记“0272”不同。