【发布时间】: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