如何获得相机旋转? (阿鲁科图书馆)

How to get the camera rotation? (Aruco Library)

我一直在尝试了解您下载 Aruco 库时包含的 aruco_test.cpp 程序的输出。

输出格式如下:

22=(236.87,86.4296) (422.581,78.3856) (418.21,228.032) (261.347,228.529) Txyz=0.00813142 -0.0148134 0.140595 Rxyz=-2.14032 0.0777095 0.138929

22是marker的唯一标识,后面四对数字是marker的四个角。我这里的问题是两个向量 Tvec 和 Rvec。

我在 Internet 上了解到 tvec 是从我的相机中心到我的对象(在本例中为标记)的平移向量,而 rvec 是对象相对于我的相机的旋转。

关于这个我有几个问题:

如何知道相机的轴?我的意思是,有没有办法知道 x、y 和 z 的朝向?

如何根据相机的对象旋转获得相机的旋转?

谁能更好地解释一下向量的含义,以便我真正理解它?我认为我的主要问题是我真的不知道这些数字的真实含义。

编辑:我一直在做一些测试来检查旋转是如何工作的,但我并不真正理解结果:

  1. 移动相机,固定在地板上的标记:

初始位置:相机注视着标记 - 'z' 标记轴注视着相机,'y' 向上,'x' 向右:Rxyz=2.40804 -0.0823451 0.23141

在标记的 'x' 轴上移动相机(向上倾斜相机):Rxyz=-1.97658 -0.0506794 -0.020052

在标记的'y'轴上移动相机(将相机向右倾斜):Rxyz=2.74544 -0.118551 -0.973627

将相机旋转90度(向右):Rxyz=1.80194 -1.86528 0.746029

  1. 移动标记而不是相机,让相机固定在标记上:

使用与前一种情况相同的初始位置。

在其 'x' 轴上移动标记:Rxyz=2.23619 -0.0361307 -0.0843008

在其 'y' 轴上移动标记:Rxyz=-2.9065 -0.0291299 -1.13356

在其 'z' 轴上移动标记(向右转 90º):Rxyz=1.78398 1.74161 -0.690203

我一直假设矢量的每个数字都是在各自轴上的旋转,但我认为我的假设是错误的,因为如果是这样的话,这个值就没有多大意义了。

How can I know the axis of my camera? I mean, is there a way to know where the x, y and z are facing?

这是在OpenCV library中定义的。 x 轴从图像的左到右增加,y 轴从图像的顶部到底部增加,z 轴向相机前方增加。下图解释了此轴选择。

How can I get the rotation of the camera from the rotation of the object wrt the camera?

rvec是marker相对于camera frame的旋转。您可以使用内置的 Rodrigues functionrvec 转换为 3x3 旋转矩阵。如果标记与相机框架对齐,则此旋转矩阵应读取 3x3 单位矩阵。

如果你得到这个矩阵的逆(这是一个旋转矩阵,所以逆是矩阵的转置),那就是相机相对于标记的旋转。

Can someone explain me the meaning of the vectors better so I can really understand it? I think my main problem here is that I don't really know what those numbers mean for real.

tvec是从相机框的原点到检测到的标记中心的距离(这是图中的F_c - P线。rvec 如上述答案所述。