opencv - 使用单应性估计相机角度

标签 opencv rotation orientation homography pose-estimation

我一直在尝试根据两帧之间的单应性来估计 UAV 的欧拉角 (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 获取角度并交换俯仰和滚动。这是一个很好的估计,但我仍然需要知道从相机框架到无人机框架的某种旋转矩阵。

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

最佳答案

最后,我找到了问题的解决方案:

如果 UAV 轴与相机的轴不同,我们必须找到一个矩阵 R1 将 UAV 轴转换为相机轴,另一个矩阵 R2 从相机轴到 UAV 轴 R2。

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

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

关于opencv - 使用单应性估计相机角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61430621/

相关文章:

linux - 使用静态 OpenCV 库交叉编译 ARM 时出现 undefined reference

c++ - OpenCV C++ 中的孔填充滤波器

android - TabActivities 忽略了 screenOrientation

Flutter PhotoView - 围绕手指之间的点旋转

安卓屏幕方向错误

image - 如何从图像中删除 EXIF 数据,但保持方向?

ios - OpenCV 以像素为单位获取坐标/半径

opencv - 安装 OpenCV 时 Raspberry Pi 出现“GL_PERSPECTIVE_CORRECTION_HINT”错误

html - 如何在 HTML 中围绕圆形创建透视文本?

ios - 如何使节点位置适应横向和纵向