我写了一个python脚本来投影和叠加邓迪大学的地球同步卫星图像,这样生成的图像就可以用于xplanet渲染地球表面。该工具的源代码可以在https://github.com/jmozmoz/cloudmap/tree/cartopy(这是支持cartopy的分支)
该工具支持两个不同的python库来在平面地图上投影地球静止图像:pyresample和cartopy。在
我发现以下差异/问题:
如果使用多处理库并行执行投影,则cartopy版本将崩溃,并显示以下错误消息:
Fatal Python error: PyEval_RestoreThread: NULL tstate
为什么卡通片慢得多呢?pyresample是用C代码完成的吗?cartopy应该支持多处理吗?如何解决对比度的问题?在
谢谢你的帮助
1。pyresample比cartopy快得多(取决于输出图像的大小,最高可达10倍)
cartopy重投影功能还没有以任何方式进行优化,尽管它在幕后使用scipy ckdtree功能,但算法本身是用Python编写的。我似乎记得,一个快速的胜利是使用https://pypi.python.org/pypi/kdtree,它从内存中提供了一个相当合理的加速,而很少的工作,
cartopy.img_transform
将是需要更改的地方。在Cartopy的重投影功能可能也要付出非常普遍的代价——你可以在任何投影中提供一个图像,它将把它放到任何投影中,处理不连续和撕裂问题。不过,如果能将pyresample的功能(以及GDAL的功能)结合起来,让用户有机会在某些情况下加快重新投影的速度,那就太酷了。在
2。输出图像不同:使用pyresample的结果显示出更强的对比度。
看起来您正在创建一个matplotlib图形来重新采样图像并使用mpl的savefig功能。这个过程有可能导致对比度丢失。我建议只使用cartopy的重投影功能,而不向图形添加图像并保存图形(最后的示例)。在
3。如果使用多处理库并行执行投影,则cartopy版本将崩溃,并显示以下错误消息:
这真的让我很惊讶,因为在cartopy中没有C代码在执行重投影。因此,您要么发现了scipy的一个bug,要么更可能是遇到了numpy/matplotlib的问题(google提供了一些关于您的异常和matplotlib和/或numpy的结果,例如https://github.com/numpy/numpy/issues/1270)。在
好的,下面是我如何在不使用matplotlib的情况下进行重投影:
最终得到的图像看起来像:
使用这个功能进行一些优化是有可能的-首先要做大量的工作来创建kdtree(可能会被缓存),而另一个很大的工作是从原始图像计算索引(同样,缓存非常好),这将从本质上减少和重复对numpy索引问题的重新投影。在
如果您想了解性能的可能性或对比度问题(我不确定我的解决方案是否修复),请随时在github回购上公开一个问题,我们可以讨论一些选项。在
谢谢你的邀请,还有!在
相关问题 更多 >
编程相关推荐