我正在尝试创建不同姿势的对象图像数据集,其中每个图像都使用相机姿势(或对象姿势)进行注释。
例如,如果我有一个世界坐标系,我将感兴趣的对象放在原点并将相机放在已知位置(x,y,z)并使其面向原点。根据这些信息,我如何计算相机或物体的姿势(旋转矩阵)。
我有一个想法,就是有一个参考坐标,即(0,0,z'),我可以定义对象的旋转。即它的倾斜,俯仰和偏航。然后我可以从(0,0,z')和(x,y,z)计算旋转,给我一个旋转矩阵。问题是,现在如何组合两个旋转矩阵?
BTW,我知道相机的世界位置,因为我使用CAD模型从OpenGL渲染这些,而不是物理地移动相机。
答案 0 :(得分:1)
单应矩阵在均匀屏幕坐标(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/