【发布时间】:2019-12-06 22:41:22
【问题描述】:
我有一个有趣的应用程序,它需要将 3D 极坐标数据(该点的角度、距离和值)转换为表示数据的图像。这是我在自定义应用程序中使用的 NOAA NEXRAD 雷达数据。
数据存储在 3 个数组中,range_data(与雷达的距离,以米为单位,1800 个点)、azimuth_data(以 0.5 度为单位的角度,720 个点)和radar_data(一个 720x1800 的数组,每个数组包含一个数据值)距离和方位角的组合)。这是我从 NOAA 获取数据的格式,所以我无法在这方面做太多改变。
现在,我正在使用 matplotlib pcolormesh 按以下方式绘制它(基本上是this example from the library I'm using):
x = range_data * np.sin(np.deg2rad(azimuth_data))[:,None]
y = range_data * np.cos(np.deg2rad(azimuth_data))[:,None]
fig, ax = plt.subplots(1,1,figsize=(4,4))
ax.pcolormesh(x,y,radar_data,cmap=ref_cmap,norm=ref_norm)
ax.set_aspect('equal','datalim')
ax.set_xlim(-460, 460)
ax.set_ylim(-460, 460)
ax.set_axis_off()
plt.axis('off')
plt.savefig(imgpath, bbox_inches='tight', transparent=True, dpi=dpiCalc)
目前的主要问题是使用 savefig() 命令实际渲染和保存绘图。每张图像大约需要 7 秒,处理 20 组左右的数据对于我心目中的应用程序来说需要的时间太长了。
由于我只需要颜色映射的数据作为图像,因此我并不真正需要 matplotlib 的大多数工具和功能。我在想一定有一种更快的方法可以从我的原始数据中生成这张图片。
我尝试逐步遍历数据并逐个填充 x-y 数组,然后使用 PIL 保存数组,但手动迭代数据所用的时间甚至比 matplotlib 还要长。使用 numpy 进行数组操作会更快,但我真的想不出任何操作来转换坐标系之间的数据。
为了更简单地分解问题,我将极坐标数据以 value[角度,距离] 格式存储在 720x1800 雷达数据数组中,我想在最快的方法。由于我既不是程序员也不是数学家,所以我可能忽略了一些简单的事情。
感谢任何和所有建议!
【问题讨论】:
标签: python matplotlib image-processing