【问题标题】:Coordinate Transformation C++坐标变换 C++
【发布时间】:2010-11-28 02:54:55
【问题描述】:

我有一个网络摄像头斜对着一张桌子,我用它跟踪标记。 我在 OpenSceneGraph 中有一个 transformationMatrix,它的转换部分包含从跟踪对象到相机的相对坐标。 因为相机是倾斜的,所以当我在桌子上移动标记时,Y 和 Z 轴会更新,尽管我想要更新的是 Z 轴,因为标记的高度不会只改变它到相机。 当在 OpenSceneGraph 中将模型投影到标记上时,模型会稍微偏离,并且当我将标记移动到周围时,Y 和 Z 值会错误地更新,这会产生影响。

所以我的猜测是我需要一个变换矩阵,将每个点与它相乘,这样我就有一个新的坐标系,它位于桌子表面上正交。 像这样:A * v1 = v2 v1 是相机坐标,v2 是我的“表格坐标” 所以我现在所做的就是选择 4 个点来“校准”我的系统。因此,我将标记放在屏幕的左上角,并将 v1 定义为当前相机坐标,将 v2 定义为 (0,0,0),并针对 4 个不同的点进行了此操作。 然后利用我从未知矩阵和两个已知向量中得到的线性方程求解矩阵。

我认为我将为矩阵获得的值将是与相机坐标相乘所需的值,以便模型在标记上正确更新。 但是当我将之前收集的已知相机坐标与矩阵相乘时,我没有得到任何接近我的“表格坐标”的东西。

我的方法完全错误吗,我只是在方程式中弄乱了一些东西吗? (在 wolframalpha.com 的帮助下解决)有没有更简单或更好的方法来做到这一点? 任何帮助将不胜感激,因为我有点迷茫并且在一些时间压力下:-/ 谢谢, 大卫

【问题讨论】:

  • 如果有帮助,我正在使用 osgART,它结合了 ArToolkits 跟踪和视频插件与 OpenSceneGraph。
  • 检查你的代数...你可能在计算你的变换的逆吗?

标签: c++ matrix coordinates transform openscenegraph


【解决方案1】:

当我在桌子上移动标记时,Y 轴和 Z 轴会更新,尽管我只想更新 Z 轴,因为标记的高度不会只改变它到相机的距离。

仅当您的相机的视角方向与您的 Y 轴(或 Z 轴)对齐时才为真。如果相机未与 Y 对齐,则表示变换将应用围绕 X 轴的旋转,从而修改标记的 Y 和 Z 坐标。

所以我的猜测是我需要一个转换矩阵,将每个点与它相乘,这样我就有一个新的坐标系,它位于桌子表面上。

是的。之后,您将有 2 个转换:

  1. T_table 表示标记在表中的坐标参考,
  2. T_camera 表示相机参照中的表坐标。

从单个 2d 图像中查找 T_camera 很困难,因为没有深度信息。

这被称为姿势问题——Daniel DeMenthon 曾研究过这个问题。他开发了一种快速且稳健的算法来寻找物体的姿势:

  • 文章可在其research homepage 上找到,第 4 节“基于模型的物体姿势”(尤其是“25 行代码中基于模型的物体姿势”,1995 年);
  • 代码the same place,“POSIT(C 和 Matlab)”部分。

请注意,OpenCv 库提供了 DeMenthon 算法的实现。这个库还提供了一个方便易用的界面来从网络摄像头抓取图像。值得一试:OpenCv homepage

【讨论】:

  • 您好,感谢您的回答。我已经成功创建了一个矩阵,它可以在我的网络摄像头给我的标记位置和我的表格坐标之间转换。但我不太确定从这里去哪里。如果我只是采用这些新点,它会将模型投影在相机前面而不是标记上。如果我将它翻译到标记上,它仍然会错误地更新。问题是它是否根据显示器的反射进行更新,显示器基本上与显示器成 90° 角(与玻璃面板成 45°),而不是直接放在桌子上。有什么想法吗?
  • 抱歉 2 部分评论 :) 所以它会沿着投影图像正确更新,但我希望它沿着桌子正确更新。有人告诉我将相机坐标系转换到视平面的原点(应该是反射监视器原点的原点),然后从那里乘以逆相机矩阵。这将完全忽略我创建的在我创建的坐标系和相机之间转换的矩阵。 (那个人说我的桌子坐标与场景无关)我不太了解它。任何帮助将不胜感激。
  • 这是迟到了将近一个月的回复,对此深表歉意。无论如何,我不太确定您的设置是什么。但是,如果您想要的只是相机参考中的标记坐标,请在标记上应用姿势算法或使用 2 个网络摄像头对标记的位置进行三角测量(在这两种情况下,您都需要在标记上找到已知且可识别的点在这两种情况下,您都不需要表格)。
【解决方案2】:

如果您知道四个标记在物理世界中的位置,并且您已经记录了它们出现在相机上的位置,那么您应该能够推导出某种变换。

当您进行校准时,您肯定希望将标记放在桌子的四个角而不是屏幕上吗?如果你只是在做屏幕的角落,我想你可能没有考虑到桌子的倾斜。

桌子只是相对于相机倾斜还是完全旋转?

【讨论】:

  • 感谢您的快速回答,相机看不到整个桌子,桌子只是我移动标记的表面。相机只是从一个角度指向桌面。因此,桌角甚至不再出现在相机视图中。所以我试图去到相机仍然可以“看到”的最远部分。所以“屏幕”的角落如果你需要一张设置的图片,请问我,我会尽快在网上放一张,谢谢,大卫
  • 我想知道是不是这样。那是有道理的——听起来你可能正在以正确的方式看待这个问题。您是否尝试在桌面上放置一个规则网格以确保图像边缘没有桶形失真?网络摄像头可能会向角落弯曲更多,这可能会导致您的校准失败.. ?
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 2012-02-07
  • 2016-09-16
  • 2014-08-11
  • 2021-02-02
  • 1970-01-01
  • 2010-10-13
  • 2021-11-08
相关资源
最近更新 更多