使用单应性估计相机角度

Estimating camera angles using homography

我一直在尝试根据两帧之间的单应性来估计无人机的欧拉角 (Rotz(yaw)*Roty(pitch)*Rotx(roll))。这意味着我从每一帧到前一帧的旋转必须乘以前一帧以获得相对于初始轴的总旋转。所以: R_accumulated=R01*R12*... 这些R是从openCV中的decomposeHomography()获得的。根据 REP 和 OpenCV 单应性页面,相机参考是 Z 向前,X rigth 和 Y 向下但我的无人机参考系统是 ENU。问题是如何从 R_accumulated 中获得 dron 方向。

单应性中的R_accumulated告诉您如何将一个平面转换为另一个平面。所以如果我想要相机方向,相机必须做相反的运动才能得到相同的结果( inv(R_accumulated)) ?那么应该将相机方向矩阵转换为 ENU 坐标?我试过几次轮换,但没有得到好的结果。

我所拥有的最好的方法是直接从 R_accumulated 获取角度并交换俯仰和滚动。这是一个很好的估计,但我仍然需要知道从相机框架到无人机框架的某种旋转矩阵。

不知道你有没有看懂我的意思。

终于,我找到了问题的解决方案:

如果无人机轴与相机轴不同,我们必须找到一个矩阵 R1 将无人机轴转换为相机轴,另一个矩阵 R1 以相反的方式执行相同任务,从相机轴到无人机轴, R2.

单应性 returns 应应用于第一张图片以获得第二张图片的平移和旋转值。但是我们想要相机姿势,而不是照片姿势。因此,例如,如果 z 轴指向一个箭头指向上方的对象,则图像围绕该向前轴旋转 90º 将使箭头指向右侧。但这不是相机为使箭头指向正确而必须进行的旋转。如果您希望箭头指向右方,您必须将相机沿同一轴旋转 -90º。总之,相机运动是图像的倒数,所以相机旋转将是单应性旋转的倒数,平移将为 -1*(homography_traslation) * scale_factor.

假设我们在初始图像和最终图像之间有一个旋转 R。如果我们想获得无人机的Rotz * Roty * Rotx的EulerAngles(最好叫Tait-Brian),我们必须计算R1 * inv(R) * R2的EulerAngles。 R 是帧之间所有中间旋转的乘积,因此 R = Rinit * ... * Rend