Opencv 基于单应性的摄像机角度估计

Opencv 基于单应性的摄像机角度估计,opencv,rotation,orientation,homography,pose-estimation,Opencv,Rotation,Orientation,Homography,Pose Estimation,我一直在尝试从两帧之间的单应性估计无人机的欧拉角(Rotz(偏航)*Roty(俯仰)*Rotx(滚转))。这意味着我从每一帧到上一帧的旋转必须乘以上一帧,以获得相对于初始轴的总旋转。因此:R_累计=R01*R12*。。。这些R是从openCV中的decompositehomography()中获得的。根据REP和OpenCV单应页面,相机参考是Z向前、X向右和Y向下,但我的UAV参考系统是ENU。问题是如何从R_积累的dron方向中获取信息 单应性累积的R_告诉您如何将一个平面转换为另一个平面。

我一直在尝试从两帧之间的单应性估计无人机的欧拉角(Rotz(偏航)*Roty(俯仰)*Rotx(滚转))。这意味着我从每一帧到上一帧的旋转必须乘以上一帧,以获得相对于初始轴的总旋转。因此:R_累计=R01*R12*。。。这些R是从openCV中的decompositehomography()中获得的。根据REP和OpenCV单应页面,相机参考是Z向前、X向右和Y向下,但我的UAV参考系统是ENU。问题是如何从R_积累的dron方向中获取信息

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

最好的方法是直接从R_累积得到角度,然后交换俯仰和横滚。这是一个非常好的估计,但我仍然需要知道从相机帧到无人机帧的某种旋转矩阵


我不知道你是否理解我

最后,我有了解决问题的方法:

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

单应返回应应用于第一张图片以获得第二张图片的平移和旋转值。但我们想要的是拍照姿势,不是拍照姿势。因此,例如,如果z轴指向一个箭头指向上方的对象,则图像围绕该前进轴旋转90º将使箭头指向右侧。但这并不是相机为了使箭头指向正确而必须做的旋转。如果希望箭头指向右侧,则必须沿同一轴将相机旋转-90º。总之,摄像机运动与图像相反,因此摄像机旋转与单应旋转相反,平移为-1*(单应旋转)*比例因子

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