找回密码
 立即注册
搜索
查看: 8972|回复: 71

云图渲染基础教程——以Python实现MODIS红外与伪VIS云图绘制为例

[复制链接]
发表于 2024-4-12 15:32 | 显示全部楼层 |阅读模式
本帖最后由 我不是Carl2 于 2024-5-22 21:12 编辑

写在前面

很久之前就承诺过会写这样一篇贴子。2023年1月的时候开了个《伪VIS算法原理与教程》(https://www.tyboard.net/forum.php?mod=viewthread&tid=374)的坑,到头来只写了理论篇,教程篇只列了个目录没来得及写完;今年风吧吧务大选拉票时我也说过三月下旬会出一个云图渲染的教程,然而上个月春假九天全部拿来赶AI-VIS论文的大修了,一直拖到现在才动笔。

回到正题,本贴的初衷是让对云图渲染有兴趣且有精力探索的气象爱好者们能大致了解用python渲染云图的基础方法,而已有一定基础并希望了解伪VIS算法具体实现方法的朋友们也可以参考本贴。气象这样的爱好是需要一些正向反馈来维持的,我现在还清晰记得四五年前在吧友帮助下设计出自己编写的色阶时以及画出MODIS海燕伪VIS时的欣喜与激动,若无有心人相助的幸运,我或许早已在某个淡季默默无闻地退坑了。如果这份教程能为刚开始尝试云图渲染的读者们提供一点参考,并成为他们探索这一领域最初的动力,那将是极好的。

与伪VIS&AI-VIS这两个夜间可见光项目不同,在通用的云图渲染这方面我肯定不是这里最擅长的,论编程水平远不及py,纳宝宝,ben,bala等人,写的代码效率与美观程度有时候自己都看不下去,论熟悉的卫星种类则远不及vf。教程编写过程中有任何错误欢迎大家批评指正。

评分

参与人数 1威望 +20 贡献值 +10 好评度 +10 收起 理由
renzhetegong + 20 + 10 + 10 优秀帖

查看全部评分

 楼主| 发表于 2024-4-12 15:34 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-22 21:11 编辑

目录

1.        给初学者的建议
2.        卫星数据读取——以MODIS为例
        a.        MODIS数据下载
        b.        Python环境
        c.        HDF文件读取,MODIS波段简介
        d.        辐射定标与亮温反演
        e.        经纬度插值
3.        红外云图渲染
        a.        色阶
        b.        Matplotlib出图
4.        伪VIS云图渲染
        a.        伪VIS基础算法实现
        b.        海温反演修正与高云修正
 楼主| 发表于 2024-4-12 15:35 | 显示全部楼层
给初学者的建议

限于篇幅与个人水平,本教程无法做到包教包会。尝试运行程序的过程中也很可能会出现因人而异的各种意外情况需要自行解决。如果你没有怎么接触过云图渲染,那么以下的建议或许会有点帮助(不瞒你说,这些建议很多来自于我当年刚开始尝试python时做的不好的地方):

1.        遇到程序报错请先定位报错代码,并尝试理解报错信息。如果没有头绪可以复制关键报错信息上网查询。若有条件,GPT也是解决报错很好的辅助工具。

2.        气象卫星数据和文献的获取没有非常统一的方式。WMO OSCAR总结了一些卫星参数可供参考(https://space.oscar.wmo.int/spacecapabilities),但对于绘制云图而言远远不够。一般而言,除了找到数据下载的网站,还需要User guide,Product Specification等辅助文件才能对数据读取方式有比较全面的了解。本贴会列出MODIS L1B数据相关的网站和文件,但其他卫星的还得靠各位自己用浏览器发掘。个人体验Edge国际版和Google基本能满足需求,如果阅读英文文献比较吃力的话可以适当使用网页翻译,但是搜索的关键词肯定还是得用英文。

3.        相比于处理各种形式的气象数据,单纯达到“绘制云图”的目的所需要的Python基础不算很多,但为了节省您和他人的时间(如果有人愿意回答问题的话),最好还是预先学一点。我们在这里也照着隔壁bala的气象数据处理教程推荐一下菜鸟教程https://www.runoob.com/python3/python3-tutorial.html
 楼主| 发表于 2024-4-12 15:42 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-4-26 08:22 编辑

卫星数据读取——以MODIS为例

a.        MODIS数据下载

MODIS数据可以从以下两个网站获取:
1. Earthdata search https://search.earthdata.nasa.gov/search
2. LAADS DAAC https://ladsweb.modaps.eosdis.nasa.gov/search/order
追风时画实况云图我会偏向于使用Earthdata,画历史云图有时候会使用LAADS,云图预览方便些,这里我们主要介绍第一个网站。

这个网站目前提供了9331种不同的数据集,其中绝大部分是我们所不感兴趣的。左侧筛选栏中选择Instruments-MODIS,Processing Levels-1B,就可以筛选出MODIS L1B的数据,一共21个,当然这里还包含一些我们不感兴趣的数据(比如5km重采样):

MODIS数据集有各自的代号,例如MYD021KM是Aqua上的1km分辨率L1B数据,其中Y/O代表卫星Aqua/Terra,1KM/HKM/QKM代表1km/0.5km/0.25km分辨率。(H=Half, Q=Quarter)本贴主要使用的是1km分辨率的MYD021KM/MOD021KM数据,文件中包含MODIS所有波段的数据;由于不是所有波段都有0.5km与0.25km的分辨率,HKM和QKM仅包含部分波段的数据,绘制VIS和真彩色时可能用到。

网站中部分数据是NRT(Near Real Time)版本,更新相对更快(一般在卫星通过后1~3小时不等出数据)但只有近期存档,数据处理方式和正常版本一致,适合实时追风时使用。

选择数据集后可以点击左上角的小图标筛选指定时间和矩形区域的数据:

(大部分卫星数据网站都会提供类似筛选数据的功能,也有少数几个得自己对着时间翻找的,比如ncei的微波存档)

近期Earthdata增加了上图右侧的云图预览,但个人测试下来这个功能会将每颗卫星白天和夜晚的两次扫描混淆,暂时不建议使用。左侧数据自带的预览是正常可信的,可以用于确认目标TC是否扫正。

这里我们选中了海燕11.07 1345Z的Terra数据并下载。境内访问Earthdata有可能比较卡,但这个问题需要各位自己解决。下载过程如果非常慢可以尝试用IDM等工具加速。

前面提到过绘制云图有时候也需要参考一些文献。MODIS L1B数据的文献可以在这里获取:https://mcst.gsfc.nasa.gov/l1b-documents

官方给的文献一般比较长(比如这里User Guide有六十多页),不需要全部读完,靠目录或者关键词搜索找到自己想要的信息就行了。后续HDF文件读取与辐射定标等步骤均可以在User Guide里面找到对应的说明,教程里将会以更简单的方式呈现这些步骤,但如果想要了解“为什么这样处理数据”,去翻一翻User Guide也是不错的选择。

*除了MYD021KM/MOD021KM,还可以选择MYD03/MOD03的数据获得更精确的经纬度数据以改善图像边缘画质,需要在LAADS下载。此时经纬度下载下来就是1km分辨率,无需进行2.e中的插值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2024-4-12 17:49 | 显示全部楼层
等着偷代码ing

5

主题

132

回帖

482

积分

热带低压-GW

积分
482
发表于 2024-4-13 10:03 | 显示全部楼层
话说viirs 在earthdata有数据嘛
“风雨中报紧自由”

5

主题

132

回帖

482

积分

热带低压-GW

积分
482
发表于 2024-4-13 10:05 | 显示全部楼层
FC-Leo 发表于 2024-4-13 10:03
话说viirs 在earthdata有数据嘛

好像有,还挺多东西
“风雨中报紧自由”

5

主题

132

回帖

482

积分

热带低压-GW

积分
482
发表于 2024-4-13 10:30 | 显示全部楼层
Emmmmm

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
“风雨中报紧自由”
 楼主| 发表于 2024-4-14 00:07 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-10 13:09 编辑

b.        Python环境

Python环境分为开发环境和第三方库环境。合适的开发环境可以让代码页面更清晰美观,区分各种类型的变量,检查部分显而易见的bug,并提供一些(暂时不一定用得上的)辅助功能。

Python本体与开发环境的安装大家可以参考bala近期写的Python处理气象数据教程的第一、二章(https://www.tyboard.net/forum.php?mod=viewthread&tid=316),我个人开发环境选的是Pycharm,总体而言用的还算顺手,就是内存占的比较大,具体选哪个开发环境大家可以依自己需求决定。

成熟、易于使用的第三方库是Python的一大优势。绘制云图时我们无需将最底层的代码全部自己码完(很显然我也不知道这怎么写),只需要学会调用第三方库中已经编写好的模块就行。完成最基础的MODIS云图渲染只需要调用四个第三方库:pyhdf,numpy,scipy,matplotlib,分别负责hdf读取,数学操作,数据插值(当然scipy能做的事远不止插值),与图片渲染。如果有绘制海岸线等需求会用到cartopy,伪VIS使用陆地底图还会用到opencv等。

第三方库的安装同样可以参考bala的教程的第四章,(https://www.tyboard.net/forum.php?mod=viewthread&tid=316)写的很详细,我自己写不了这么周全就不作重复了。使用pip安装时请预先确认第三方库在pip中对应的名称,有时会和调用代码时用的名称不一致。

大型的第三方库一般都有网站对其功能作详细的解释。以matplotlib为例,官网上(https://matplotlib.org/)自带了一些代码示例。不过以个人体验来说,更多时候我都是直接在浏览器上搜函数名称,跳转到matplotlib.org的reference页面去查看函数具体的输入输出,若理解有困难再去参考页面底部链接的代码示例。

上图是pcolormesh函数的reference页面,这也是我们将亮温等二维数组绘制成投影过的云图最主要的函数。

*部分读者反映windows上pyhdf-0.11.4导入时会出现找不到dll的报错,这可能是因为新whl的dll搜索方式有改变所致。目前测试下来pyhdf-0.10.5的whl能够正常安装并导入,python3.10及以前可以在PYPI下载0.10.5的whl并安装(https://pypi.org/project/pyhdf/0.10.5/#files),python3.11暂时没找到公开的whl存档(gohlke的网站关掉了),不过我本地倒是有留存着一份3.11的pyhdf whl,有需要的话可以私信找我。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

5

主题

132

回帖

482

积分

热带低压-GW

积分
482
发表于 2024-4-14 10:14 | 显示全部楼层
话说vis and RGB(Ture Colour)也能用以上这几个库完成吗?
“风雨中报紧自由”
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|TY_Board论坛

GMT+8, 2024-11-21 17:20 , Processed in 0.041179 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表