转载:grib文件说明

转载:grib文件说明原文链接 https www cnblogs com weiyinfu p 9975257 htmlgrib 文件一 grib 文件简介 WMO 是世界气象组织 worldmeteoro

大家好,欢迎来到IT知识分享网。

原文链接:https://www.cnblogs.com/weiyinfu/p/9975257.html

grib文件

一、grib文件简介

WMO是世界气象组织,world meteorology organization。

GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式。最初GRIB表示“二进制格点”(GRIdded Binary),后来扩展为“二进制的通用规则分布信息”(General Regularly-distributed Information in Binary form)。

GRIB 是与计算机无关的压缩的二进制编码,主要用来表示数值天气预报的产品资料。现行的GRIB 码版本有GRIB1 和GRIB2 两种格式。 GRIB2较之GRIB1具有更多优点而被广泛使用。如:表示多维数据、模块性结构、支持多种压缩方式、IEEE标准浮点表示法等。

二、grib相关的库

1、python

filepath = r”C:\Users\weidiao\Desktop\NAFP_T639_1_FTM-38-NEHE-WIU-281X281-100-1000–002—216.GRB”

parse(filepath)

···

2、java

三、grib文件格式简介

grib文件包含从0到8共9个section,每个section用途不一样。

section2是给用户自己用的,用户可以在这里自由发挥。

section3是网格定义区域。

section5是数据格式描述区域,描述了section7中数据的压缩方式。

section7是最重要的部分,从第6个字节开始存储的是压缩的字节数据。

四、jpeg2000

JPEG 全名为 Joint Photographic Experts Group,它是一个在国际标准组织(ISO)下从事静态图像压缩标准制定的委员会。它制定出了第一套国标静态图像压缩标准:ISO 10918-1 就是我们俗称的 JPEG 了。由于JPEG优良的品质,使得它在短短的几年内就获得极大的成功,目前网站上百分之八十的图像都是采用JPEG的压缩标准。然而,随著多媒体应用领域的激增,传统JPEG压缩技术已无法满足人们对多媒体图像资料的要求。因此,更高压缩率以及更多新功能的新一代静态图像压缩技术 JPEG 2000 就诞生了。JPEG 2000 正式名称为 “ISO 15444” ,同样是由JPEG 组织负责制定。自1997年三月开始筹划,但这几年间,在算法选取问题上耽误了不少时间,人们普遍预计要到2000年十二月JPEG2000才能制定完成! 但在2000年3 月的东京的一个会议上,可能是由于数字照相机厂商们施加压力,规定基本编码系统的最终协议草案提前出台,终于不用改名为 JPEG2001 了。

JPEG2000存在版权和专利的风险。这也许是目前JPEG2000技术没有得到广泛应用的原因之一。JPEG2000标准本身是没有授权费用,但是,因为编码的核心部分的各种演算法被大量注册专利,所以一般认为,不太可能避开这些专利费用开发出免授权费的商用编码器。

五、glymur并不好用

使用jpg压缩glymur自带j2k图片,结果压缩之后比j2k要小,这说明jpeg2000似乎不太好用,不知是glymur的问题还是jpeg2000的问题。

import glymur jp2file = glymur.data.nemo() # just a path to a JPEG2000 file print(jp2file) jp2 = glymur.Jp2k(jp2file) fullres = jp2[:] print(fullres.shape) io.imsave('nemo.jpg', fullres) 

做了其他实验也是这样。

import os import pylab as plt from skimage import io import glymur def transform(filepath): target = os.path.join(filepath, 'target') if not os.path.exists(target): os.mkdir(target) for i in filter(lambda file: os.path.isfile(os.path.join(filepath, file)), os.listdir(filepath)): img = io.imread(os.path.join(filepath, i)) jp = glymur.Jp2k(os.path.join(target, i + '.j2k'), data=img) print(jp) def show_difference(filepath): target = os.path.join(filepath, 'target') for i in filter(lambda file: os.path.isfile(os.path.join(filepath, file)), os.listdir(filepath)): original = io.imread(os.path.join(filepath, i)) jp_path = os.path.join(target, i + '.j2k') jp = glymur.Jp2k(jp_path) fig, (one, two) = plt.subplots(1, 2) one.imshow(original) one.set_title('original {}'.format(os.path.getsize(os.path.join(filepath, i)))) two.imshow(jp[:]) two.set_title('compressed {}'.format(os.path.getsize(jp_path))) plt.show() transform('imgs') print('transform over') show_difference('imgs') 

参考资料

glymur和pyopenjpeg是在openjpeg上用python封装了一层,它需要依赖openjpeg动态链接库,所以我们需要把这个动态链接库放到全局路径下。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136781.html

(0)
上一篇 2025-06-25 12:15
下一篇 2025-06-25 12:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信