1

使用这个工具箱,我正在校准我的相机。

然而,工具箱以矩阵形式输出结果,作为一个菜鸟,我不太了解数学的东西。

矩阵形式如下。

替代文字

其中R是一个旋转矩阵,T是一个平移向量。

这些是我从工具箱中得到的结果。它以像素为单位输出值。

-0.980755   -0.136184  -0.139905  217.653207
0.148552    -0.055504  -0.987346  995.948880
0.126695    -0.989128  0.074666  371.963957
0.000000    0.000000  0.000000  1.000000

使用这些数据我可以知道我的相机旋转了多少以及它与校准对象的距离?

4

2 回答 2

3

距离部分很容易。最右边一列中的前三个数字给出了原点的翻译。这表示分别在 x、y 和 z 方向上的平移。在您的示例中,相机的位置 p = (p x , p y , p z ) = (217.653207, 995.948880, 371.963957)。您可以获取相机位置和校准对象位置(c x、 c y、 c z)之间的欧几里得距离。那就是 sqrt( (p x -c x ) 2 + (p y -c y ) 2 + (p z -c z )2 )

更困难的部分是在矩阵的左上角 3x3 元素中捕获的旋转。在不知道他们是如何得出这个结论的情况下,你有点不走运。也就是说,如果您想要的话,将其转换回Euler Angles并不容易。但是,您可以将这些元素转换为四元数旋转,这将为您提供独特的单位矢量和角度,以将相机旋转到该方向。此处提供了计算的细节. 一旦你有了四元数旋转,你可以很容易地把它应用到向量 n = (0, 0, 1), up = (0, 1, 0) 和 right = (1, 0, 0) 以获得法线(方向相机是指向的),上和右向量。仅当您有兴趣从当前位置向左或向右旋转相机时,右矢量才有用。

于 2010-11-22T17:58:22.323 回答
1

我猜代码使用“标准”格式- 然后你会在opencv 库文档或他们的书中找到更多详细信息。

于 2010-11-23T04:16:38.787 回答