OpenCV Equirectangular旋转

Bue*_*are 7 c++ opencv map-projections rotational-matrices

由于我对投影和旋转矩阵的数学理解(几乎为零),我目前仍坚持使用OpenCV在360°图像上实现等角旋转.

这种轮换的结果正如您在此处看到的那样:https://www.youtube.com/watch?v = l1N0lEKIeLA

我在这里找到了一些代码:https://github.com/FoxelSA/libgnomonic/wiki/Equirectangular-rotation_v0.1但是我没有成功将它应用到opencv

如果有人知道如何将它应用于OpenCV Mat和Pitch,Yaw,Roll角度,我们将非常感激!

谢谢!

Sun*_*eef 4

我在这里不谈论偏航、俯仰和滚动,而是谈论欧拉角 x、y 和 z。

要执行等距柱状投影映射的旋转,您可以按照以下步骤操作:

  • 考虑(i2, j2)结果图像中的坐标。我们将尝试找到放在这里的颜色。这些坐标对应于球体上具有纬度lat2 = 180 * i2 / image.height和经度的点lon2 = 360 * j2 / image.width。计算相应的 3D 矢量v2

  • 计算具有角度 x、y 和 z 的旋转矩阵(请查看此处的R公式)。对该矩阵进行转置以获得从新图像到旧图像的逆旋转。我们将这个逆旋转矩阵命名为。Rt

  • 计算v1 = Rt * v2. 然后计算 的纬度lat1lon1经度v1

  • i1 = image.height * lat1 / 180查找原始图像中坐标和处的颜色j1 = image.width * lon1 / 360。这可能不是整数坐标。您可能需要在几个像素之间进行插值才能获得您的值。(i2, j2)这是新图像中位置像素的颜色。

您需要了解如何在球体上的 3D 矢量及其纬度和经度角度之间进行转换,但这应该不难找到。这里描述的算法应该相当容易实现。

如果我犯了任何错误,请告诉我,因为我自己没有测试过。