netcdf出图备忘录

    前阵子在研究将netcdf格式的雷达数据出成图,后来使用了ncwms这个开源项目做到了这一点,可以根据时间维度、变量以及坐标范围,生成图像,但是有几个问题:

    第一:我要的只是生成图片,但是ncwms提供的不单单是图片,更多的是以一种服务的形式去提供图片数据,他的结构对于我的需求来说,比较臃肿,因为就雷达数据来说,一般都是很宏观的,没有必要去切图,更没必要每次都动态成图(当然这也是根据现阶段的需求而提出来的)。

    第二:也是最重要的,ncwms生成的图片太难看了,马赛格的感觉很强烈,因为专业的雷达图会有一个标准的色带,这个色带往往就十几个颜色,ncwms出图的方式惨不忍睹

    所以我就想要找到一种既不会太臃肿,而且出图的质量又符合我的要求的方式,头脑中有过很多方案:

    一:将数据从nc文件中读出来放到二维数组里面,然后用第三方软件成图,栅格图像说白了不就是用颜色展示二维数据吗?这样就不会引入过于臃肿的结构了。于是我使用了imageio-ext这个开源项目,但是效果不理想,可控程度太低了,而默认的出图方式也不好,我看了其他一些有关的java库,发现基本上都是一些类似PS的那种图片处理方式,更多的是一种图片美化或是处理,而这些并不是我想要的,我要的是从数据表达的方式上的定制,这个思路最终放弃。

    二:尝试将ncwms出图的部分抽取出来,不知道是不是我太心浮气躁还是什么,我进行到一半就做不下去了,这个几乎等同于重写这个功能,费劲,而且最重要的,它出的图不好看……

    三:使用netcdfUI的出图功能,netcdfUI有一个grid的成图功能,反正我这个就是使用netcdf的库,使用它的UI也没什么,只是不知道它出图能不能漂亮些……

    实践证明netcdfUI的出图部分思路比较清晰,抽取比较容易,其实不能叫抽取了,应该叫做定制化,但是出来的图还是和ncwms一样不好看,唉,围绕这个问题,又想了很多方法思路就是我们出了一张原始的雷达图:

可以看到,这张图其实马赛克的感觉非常强烈,出了这张图之后,然后使用各种图片处理技术对其进行处理

想要达到上面的这种转换效果,将模糊的雷达图转换成清晰的,类似的算法我找了很多,但是具体操作起来不是很方便,因为这些算法就真的只给了算法,没有给出具体的java实现,唯一下了一个克里斯金的卷积转换软件,对我的图片进行卷积运算,结果惨不忍睹,和我想要的完全搭不上边,处理之后的图片,模糊的地方还是模糊,一些地方变清晰了,但是那些地方清晰与否都无所谓,所以比较悲剧,后来我渐渐发现,我这种思路似乎错了,图像处理是基于原始图像的,原始图像的信息量这么少,那么处理出来的图像不可能会有一个质的提高,上面那个鲨鱼的例子我没试过,不知道是否有这么神奇,或是说用在我的雷达图上是不是也这么神奇。

    后来我发现在netcdfUI里面有这么一项功能,效果如下:

这个瞬间之前我也有看见过,但是经过了一系列算法的摧残之后,我顿时发现了这里面的价值:将这些圈圈里面填充上不同的颜色不久可以出一张非常漂亮的雷达图了么!!!

于是,就开始研究netcdfUI的源码,找到了里面生成这个等值线的代码,同时加于定制,这个过程就颇为周折了,总之最后我达到了我的目的

效果非常的好,真想将这其中的过程全部写下来,但是真的很复杂,时间又过去好一阵了,不知道要怎么写咯


 

转载于:https://my.oschina.net/LinBandit/blog/79149

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中可以使用netCDF4库读取和处理netCDF格式的数据,并使用Matplotlib库进行绘图。 以下是一个简单的例子,假设我们有一个名为“data.nc”的netCDF文件,其中包含了一个名为“temperature”的变量,我们可以按照以下步骤进行绘图: 1. 导入所需的库,并打开netCDF文件: ```python import netCDF4 import matplotlib.pyplot as plt # 打开netCDF文件 nc_file = netCDF4.Dataset('data.nc', 'r') ``` 2. 读取数据并存储到变量中: ```python # 读取temperature变量 temp = nc_file.variables['temperature'][:] ``` 3. 绘制数据: ```python # 绘制温度随时间变化的折线图 plt.plot(temp) plt.xlabel('时间') plt.ylabel('温度') plt.title('温度变化图') plt.show() ``` 完整代码如下: ```python import netCDF4 import matplotlib.pyplot as plt # 打开netCDF文件 nc_file = netCDF4.Dataset('data.nc', 'r') # 读取temperature变量 temp = nc_file.variables['temperature'][:] # 绘制温度随时间变化的折线图 plt.plot(temp) plt.xlabel('时间') plt.ylabel('温度') plt.title('温度变化图') plt.show() # 关闭文件 nc_file.close() ``` 需要注意的是,如果数据有多个维度,则需要在读取数据时指定所需的维度。例如,如果数据有“时间”和“经度”两个维度,则可以按照以下方式读取数据: ```python # 读取temperature变量,其中第一个维度为时间,第二个维度为经度 temp = nc_file.variables['temperature'][:, :] ``` 然后可以按照需要进行绘图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值