netcdf出图备忘录

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

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

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

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

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

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

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

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

netcdf出图备忘录_第1张图片

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

netcdf出图备忘录_第2张图片netcdf出图备忘录_第3张图片

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

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

netcdf出图备忘录_第4张图片

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

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

netcdf出图备忘录_第5张图片

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


 

你可能感兴趣的:(ImageIO,雷达,netcdf)