计算机视觉:标记相机姿势



我正在尝试创建一个不同姿势的对象图像数据集,其中每个图像都用相机姿势(或对象姿势)进行注释。

例如,如果我有一个世界坐标系,我将感兴趣的对象放置在原点,并将相机放置在已知位置(x,y,z),使其面向原点。给定这些信息,我如何计算相机或对象的姿势(旋转矩阵)。

我有一个想法,那就是有一个参考坐标,即(0,0,z'),在那里我可以定义对象的旋转。即其倾斜、俯仰和偏航。然后我可以从(0,0,z')和(x,y,z)计算旋转,给我一个旋转矩阵。问题是,现在如何组合两个旋转矩阵?

顺便说一句,我知道相机的世界位置,因为我用OpenGL从CAD模型中渲染这些,而不是物理地移动相机。

单应矩阵在齐次屏幕坐标(i,j)到齐次世界坐标(x,y,z)之间映射。

齐次坐标是附加了1的法线坐标。因此,屏幕坐标中的(3,4)是(3,4,1)作为齐次屏幕坐标。

如果你有一组齐次屏幕坐标S及其相关的齐次世界位置W。4x4单应矩阵满足

S*H=转置(W)

因此,它可以归结为在世界坐标中找到几个特征——你也可以识别屏幕坐标中的i,j位置,然后做一个"最佳拟合"单应性矩阵(openCV有一个函数findHomography)

虽然知道相机的xyz提供了有用的信息,但这还不足以完全约束等式,而且无论如何你都必须生成更多的屏幕世界对。因此,我认为你不值得花时间将相机的位置整合到组合中。

我在这里做了一个类似的实验:http://edinburghhacklab.com/2012/05/optical-localization-to-0-1mm-no-problemo/

最新更新