opengl - 计算机视觉 : labelling camera pose

标签 opengl graphics geometry computer-vision vtk

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

例如,如果我有一个世界坐标系,我将感兴趣的对象放在原点并将相机放在已知位置 (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/

关于opengl - 计算机视觉 : labelling camera pose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17840693/

相关文章:

c++ - 如何在 Linux 上将 glut 与 Windows 交叉编译器一起使用?

c++ - 用于桌面 VR 的 OpenGL 非对称截锥体

c++ - 加载的对象模型闪烁并使应用程序崩溃

haskell - 从元组的元组中提取元组 Haskell

math - 将椭球拟合到 3D 数据点

c++ - LNK2005错误,已经定义: Possibly one definition rule violation?

Java 2D 游戏图 block 渲染优化

java - 如何使用鼠标拖动来移动三角形

Android粒子系统收敛单点

java - 计算移动的球与移动的线/多边形(2D)碰撞的时间