由于我对投影和旋转矩阵的数学理解(几乎为零),我目前仍坚持使用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角度,我们将非常感激!
谢谢!
答案 0 :(得分:4)
我没有谈论偏航,俯仰和滚动,而是在这里谈论欧拉角x,y和z。
要执行equirectangular映射的旋转,您可以按照以下步骤操作:
在结果图片中考虑坐标(i2, j2)
。我们将尝试找到放在这里的颜色。这些坐标对应于球体上具有纬度lat2 = 180 * i2 / image.height
和经度lon2 = 360 * j2 / image.width
的点。计算相应的3D矢量v2
。
使用角度x,y和z计算旋转矩阵R
(查看公式here)。进行该矩阵的转置以获得从新图像到旧图像的反向旋转。我们将此反向旋转矩阵命名为Rt
。
计算v1 = Rt * v2
。然后计算lat1
的纬度lon1
和经度v1
。
在坐标i1 = image.height * lat1 / 180
和j1 = image.width * lon1 / 360
处查找原始图像中的颜色。这可能不是整数坐标。您可能需要在几个像素之间进行插值以获得您的价值。这是新图片中(i2, j2)
位置处像素的颜色。
您需要了解如何在球体上的3D矢量与其纬度和经度角度之间进行转换,但这不应该太难找到。这里描述的算法应该很容易实现。
如果我犯了任何错误,请告诉我,因为我自己没有对其进行过测试。