首页 > 解决方案 > 将度数映射到 360 度图像上的 (x,y) 像素

问题描述

我希望在给定 Altitude° 和 Azimuth° 的 GoPro Max 的 2d 球面图像上绘制点。

这是您可以假设的:

  1. 图像的中心始终朝南
  2. 直视赤道时,图像总是水平的。

这是我所知道的:

  1. 图像大小为 5760x2880,这意味着赤道垂直方向为 1440 像素。
  2. 我在网上找到了一张图片,并将其标记为方位角从左到右,高度角从上到下。您可以在此处找到该图像

我希望这能让您更好地了解我在这里要做的事情。

简而言之,我正在想象一种方法,例如:

ConvertCoords(Azimuth°, Altitude°){
     ...
     return (x,y)
}

这可能吗?我可能会使用 Python 来实现它,但我愿意接受建议。非常感谢任何可以为我指明正确方向的信息!

编辑:我应该提到,根据我的研究,我相信 GoPro Max 使用的是等角投影。我能够将我附在其中一张 360 度全景照片上的图像叠加起来,并手动绘制出一些似乎正确的数据。

标签: pythonmathmercatoraltitudeazimuth

解决方案


对于等角投影,映射是直接和线性的。

def convertCoords( azimuth, altitude ):
    # Assumptions:
    # - Both values are in radians
    # - South is an azimuth of 0, negative to the left, range -pi to +pi
    # - Altitude range is -pi/2 to +pi/2, negative down
    x = 2880 + (azimuth * 2880 / math.pi)
    y = 1440 - (altitude * 2880 / math.pi)
    return x,y

如果您更愿意使用度数,请将“math.pi”更改为“180”。


推荐阅读