python雷达图像识别_Python新⼀代多普勒天⽓雷达基数据可
视化
概述
本⽂⾸先介绍新⼀代多普勒天⽓雷达(CINRAD)数据格式,分析雷达基数据特征,根据相关算法进⾏反射率因⼦的数据可视化,得到平⾯位置显⽰(PPI)和距离⾼度显⽰(RHI)以及等⾼平⾯位置显⽰(CAPPI)图像,再延伸⾄三维空间,对单个体扫数据分别进⾏点绘制、⾯绘制、体绘制,突出显⽰强反射率中⼼的形态特征和范围⼤⼩,以达到辅助决策、识别危险天⽓、预测短期降⽔的⽬的。
⽤到的Python库本⽂⽤到的Python库及其作⽤
新⼀代多普勒天⽓雷达体扫数据存储格式
新⼀代多普勒天⽓雷达单个体扫数据以.bz2格式压缩存储,解压后得到.bin格式⼆进制⽂件,此⽂件记录了基数据格式规范中的所有体扫参数,包括儒略时间、体扫模式、反射率因⼦、径向速度、谱宽等。体扫模式分为三种,对应三种不同数量的仰⾓。每种体扫模式除仰⾓层数不同外其与记录⽅式均相同,基数据在时间上的分辨率为6分钟,即每6分钟完成⼀次体扫,记录⼀个单独数据。
在多普勒天⽓雷达⼯作过程中,规定正北⽅为0°⽅位⾓,正东⽅为90°⽅位⾓,天线与⽔平⾯平⾏为0°仰⾓,与⽔平⾯垂直时为90°仰⾓。扫描时,雷达天线⾃体扫模式中最低仰⾓启动,并以固定仰⾓从零度⽅位⾓开始沿顺时针⽅向转动天线,逐⽅位⾓完成单层仰⾓的扫描,在不断发射和接收电磁波的同时记录反射率因⼦、径向多普勒速度、谱宽等⽣成基本雷达产品所必需的⽓象要素。完成单层仰⾓扫描之后,雷达天线抬升⾄对应体扫模式中的下⼀仰⾓继续重复上述过程,直到完成所有规定仰⾓的扫描。⽆论哪种体扫模式,多普勒雷达都会在六分钟内完成体扫,并将所有数据写⼊⼆进制⽂件压缩后保存在硬盘。
每⼀个.bin⽂件都遵循相同的数据记录格式,⽂件命名包括雷达参数、站点代号、记录时间等信息。数据以每层仰⾓的每个⽅位⾓上的径向线数据为⼀个记录单元,这个单元称作⼀个径向数据,⼤⼩为2432字节,因此不难推测,整个.bin⼆进制⽂件的⼤⼩必为2432字节的整数倍。每个径向数据包括径向头、基数据、保留字段三部分,径向头为固定⼤⼩的28字节,处理雷达数据⼀般需要的部分为基数据部分,包含径向数据收集时间、儒略⽇、仰⾓、⽅位⾓、反射率因⼦第⼀个数据的实际距离、多普勒速度第⼀个数据的实际距离、反射率因⼦和多普勒速度库长库数、各数据指针(偏离雷达信息头的字节数)、多普勒速度分辨率、体扫模式、奈奎斯特速度反射率因⼦数值、径向速度数值、
谱宽数值等,最后部分为保留字节。多普勒雷达基数据存储结构
以上为单个径向数据存储⽅式,单层仰⾓⼀般会有360个径向数据,分别对应360个该仰⾓内的⽅位⾓,单层仰⾓的所有径向数据集合形成新的数据块,各层仰⾓数据块集合即为.bin格式雷达基数据。
单个径向数据记录情况⼀览点击这⾥查看。
基数据处理过程
径向数据中的待提取参数包括反射率因⼦、多普勒径向速度、谱宽,这些数据以⼆进制形式存储在磁盘中,要得到⼗进制的真实值需要经过换算。对单个体扫数据⽽⾔,提取出所有数据后会对其进⾏坐标变化以⽅便绘图,主要变换为将原始球坐标系三维坐标变换为笛卡尔坐标系坐标。球⾯-直⾓坐标系变换公式:x是横坐标,y是纵坐标,z是⾼度坐标,θ是⽅位⾓,φ是仰⾓,r是距离。
电磁波在真空中是沿直线传播的,⽽在⼤⽓中由于折射率分布的不均匀性,电磁波在传播过程中会产⽣折射现象,导致电磁波传播路径弯曲,引起⾼度测算误差。
在标准⼤⽓情况下,波束路径向下弯曲,这种折射成为标准⼤⽓折射。标准⼤⽓折射可以代表中纬度地区对流层中⼤⽓折射的⼀般情况,也叫做正常折射。在标准⼤⽓折射时,电磁波路径向下弯曲,曲率半径为25000千⽶,4倍于地球半径。
当发⽣临界折射时,波束路径曲率与地球曲率相同,即波束沿地表传播,⽆需进⾏⾼度订正。
当发⽣超折射时,波束传播路径⼤于地球表⾯曲率半径,雷达波束在传播过程中会碰到地⾯,经地⾯反射后继续传播,然后再弯向地⾯反射后继续向前传播,如此反射多次,成为⼤⽓波导,⼜称超折射。
当⽆折射时,⼤⽓是均质的,折射率处处为零,⼀般情况下不会出现这种情况。
在标准⼤⽓状况下,可计算不同仰⾓情况下波束中⼼⾼度随距离变化情况。上式为不同距离下电磁波波束中⼼距地⾯⾼度修正公式,r为降
⽔粒⼦到天线的实际距离,ε 为天线仰⾓
该公式对于⼀般的⼤⽓标准折射状况较为适⽤。由此可绘出电磁波传播的⾼度修正图。
解析基数据的Python编程实现
datagear免费开源吗详细代码见GitHub。
red5流媒体服务器开发上述程序将相关功能,封装Radar为python对象,实例化该类后通过调⽤定义好的属性和⽅法可以得到以下基数据存储的信息:
joomla安装不了
⽂件名、原始数据、径向数据数量、仰⾓数量、反射率数据起点、速度数据起点、反射率库长、速度库长、反射率库数、速度库数、反射率因⼦数据指针、速度数据指针、速度分辨率、体扫模式、仰⾓、⽅位⾓、所有数据列表、所以体扫数据笛卡尔坐标系中的坐标、笛卡尔坐标系中的反射率因⼦数值、体扫仰⾓列表。
详细使⽤⽅法可以看这⾥。
可视化实例
以下可视化实例均以以上数据为基础,它是南京站2016年7⽉1⽇0时10分的体扫数据。0°仰⾓平⾯位置显⽰(PPI) 反射率因⼦数值变化范围在0-50之间,雷达扫描半径为460千⽶,在雷达中⼼西北部有强回波中⼼。0°⽅位⾓距离⾼度显⽰(RHI)横纵坐标单位都为⽶,反射率因⼦的数值范围为0-40之间,在⼤约2500⽶⾼度处有强回波中⼼。3千⽶⾼度等⾼平⾯位置显⽰(CAPPI)红⾊部分为强回波区域。mayavi交互可视化界⾯中的三维散点图 反射率因⼦数值由球直径和颜⾊表⽰,球径越⼤数值越⼤,红⾊为强回波区域,蓝⾊是弱回波区域,分层为不同仰⾓层。此图是反射率因⼦标量场等值⾯三位交互可视化场景截图,相机视⾓为⾃雷达底部仰视,能够清楚看到回波底部红⾊部分为强回波中⼼,并且空间边界清晰可辨。通过放⼤后,镜头能够拉进⾄云体内部以便查看回波等值⾯内部细节。体绘制效果,可看出
蓝⾊部分为弱回波区域,红⾊橙⾊部分为强回波区。
其它体绘制效果:
体绘制的实现过程稍复杂,要先设定⽹格⼤⼩,经试验,500*500*500三维⽹格能充分利⽤计算机内存,并且有良好地显⽰效果,能清晰地展现反射率因⼦场的三维形态特征,并且不过多地占⽤计算时间,因此该规格的三维⽹格适宜作为体绘制过程的标准⽹格。
基数据经过标准⽹格化后以.npz格式⽂件保存在硬盘中,此格式⽂件是Numpy标准的⾼维数组⽂件,为处理好的标准⽹格化数据,⼤⼩为500*500*500,以load()函数读⼊后赋值,作为数据源输⼊。
体绘制过程中较为重要的两步分别是透明度设定和RGB颜⾊值设定,选取适宜的透明度和符合习惯的雷达回波图颜⾊能够准确地传达回波场信息,⼀般回波场内部向外逐渐增加透明度,以体现该⽴体模型的内部特征,如果外部数据透明度不够则会掩盖内部数据,影响最终的体绘制效果。根据雷达回波图象平⾯显⽰的颜⾊选取习惯,在体绘制时设定强回波接近红⾊,弱回波接近蓝⾊。
颜⾊值的设定参数为浮点数,不是0~255的8位RGB表⽰,该参数传⼊AddRGBPoint()函数。在数据处理上,原雷达反射率因⼦取值范围在0~60之间,映射到6种颜⾊,因此原来的反射率因⼦数值映射后皆为0~6的整数,AddRGBPoint()函数的第⼀个参数就是空间点强度的数值,后三个参数位RGB浮点值,这样⽹格化数据中对应的点皆可映射为预先设定的颜⾊。
数据的标准⽹格化
初始雷达反射率因⼦数据为笛卡尔坐标系中散乱的四维数组,数据的顺序不依赖其⼤⼩或位置排序,但是体绘制过程中要求输⼊规整的标准⽹格数据,其形式为三维⽹格,⽹点上填充了该处的反射率因⼦实际值。
气象python零基础入门教程
对数据预处理的过程中⾸要任务就是对散乱的反射率因⼦标量场进⾏标准⽹格化处理。原始数据由极坐标系转换⽽来,在坐标顺序、反射率因⼦值分布状况上⽆明显规则,其特点是:扫描锥⾯上数据密度⼤,分辨率⾼,精度可靠;
在垂直⽅向⼭受仰⾓层数限制,数据密度⼩,全⾼程上⼀般在20个以内;
三维空间中数据整体分布成⽚状集中,并⾮在空间中均匀分布。
以上特征不符合体绘制数据格式要求,理想的变换⽅式是构建等距、均匀的三维⽹格,在每个格点上根据相关算法计算得出该位置的反射率因⼦数值作为采集值,依次遍历所有⽹格点,得到每个⽹格点处的实际反射率因⼦数值,最终结果会⽣成⼀个三维数组,这个数组不存储空间坐标信息,⽽是以位置代表其在空间中的真实分布情况,若要计算其真实坐标,可根据⽹格点个数和⽐例尺计算,数组的每个元素值都为反射率因⼦的实际值。
以上过程可以概述为插值过程,常⽤的插值算法由最临近法、线性插值法和cubic算法。考虑到计算机内存资源和处理器性能限制,本⽂选⽤了计算资源占⽤量最少的最邻近⽅法,此种⽅法可能在精度上稍逊另外两种⽅法,但是计算速度快,实验证明得到的差值结果也能够满⾜实际绘图需要。sql语句drop table
griddata()函数是python科学计算库scipy中的插值函数,引⼊⾃scipy.interpolate,第⼀个参数为原始散乱点集的三坐标值,参数r为⼀维数组,表⽰整个空间中所有的反射率因⼦的实际值,它的顺序与第⼀个参数坐标顺序相同,也就是说⼆者对应元素为⼀组原始描述空间中⼀个点的四个参数(三坐标和⼀个反射率因⼦数值),第三个参数是上griddata()函数⽣成的标准三维⽹格数组,⼤⼩为1000*1000*20,最后⼀个参数为插值⽅法,nearest表⽰最邻近插值法,即⽤⽹格点最近的实际点上的坐标值作为该格点的实际数值。值得注意的是以上算法⾮常占⽤硬件资源。最后⽣成的结果即返回值是⼀个三维数组,这就是最终想要的结果,这个规整的标准化⽹格数据能够作为数据源传⼊VTK进⾏体绘制,也可以直接引⽤其中的⼀个维度数据进⾏等⾼平⾯位置显⽰图像的绘制。最终将得到的⽹格化反射率因⼦数据保存为numpy数组专⽤格式存储在硬盘中⽅便取⽤,保存的⽂件格式为.npz,这
是numpy数组专⽤的数组保存格式,优势在于压缩后节省硬盘空间(单个体扫数据以1000*1000*20分辨率⽹格化⼤约需要计算10分钟,之后得到的数组压缩后占⽤的硬盘空间为1.4GB),载⼊快。
⽹格化数据虽然耗费计算资源,单对于本⽂的⼤多数内容都能够提供有效的数据⽀撑,规整的三维⽹格化数据不仅能够直接⽤于等⾼平⾯位置显⽰图像的绘制,还能作为体绘制源数据。
雷达回波图象的动态显⽰
在实际的应⽤场景中往往单个的体扫数据得到的雷达回波图像不⾜以表现变化迅速、持续时间长的⼤范围降⽔或强对流天⽓中中⼩尺度⽓旋、锋⾯、龙卷、热带风暴和下击暴流等的动态演变过程。因此连续动态地显⽰雷达反射率因⼦回波可以帮助⽓象⼯作者更好地估测台风移动路径、积⾬云运动⽅向或锋⾯⽓旋的变化趋势等⾼度跟随时间剧烈变化的⽓象要素,对于天⽓现象的表现具有不可估量的实际应⽤价值。
本⽂的思路是借助python的OpenCV 库以静态雷达反射率因⼦回波图像帧为数据源⽣成动态视频,基本要求是各图像帧保持反射率因⼦数值⽐⾊卡颜⾊⼀致,图像坐标⽐例尺⼀致,站点⼀致,在时间上保持连续。
代码核⼼部分为cv2.VideoWriter(),这是opencv库中⼀个由连续图像⽣成视频的函数,第⼀个参数为
如何卸载mysql数据库
输出视频的路径和⽂件名,第⼆个参数表⽰视频存储的格式,参数10表⽰设定视频帧率为10,10帧/秒的播放速度相当于每秒放映10张雷达回波图象,相当于实际时间1⼩时的时间长度,也就是说播放速度为真实雷达回波⽣成速度的3600倍,最后⼀个参数表⽰原始图像的分辨率,此分辨率与最后⽣成的视频分辨率相同,保证了回波图像不发⽣畸变。
经过实际测试,这种动态回波显⽰⽅式可以更加完善地传达出雷达回波在时间维度上的详细变化情况,能有效观察到反射率因⼦强度数值变化和脉动情况,对⼤粒⼦由⽣成到发展再到消散的过程具有极强的表现能⼒。由于本⽂所⽤的实验数据没有观测记录到台风,但动态显⽰的雷达回波能够对台风移动路径进⾏有效的估测,从⽽提⾼预警的有效性。
动画效果点击这⾥观看,或者在YouTube这⾥观看。
体绘制动画在YouTube这⾥观看。