如何在 Octave 中读取 hdf 数据

Posted

技术标签:

【中文标题】如何在 Octave 中读取 hdf 数据【英文标题】:How to read hdf data in Octave 【发布时间】:2013-07-29 01:38:00 【问题描述】:

我正在做遥感项目。在 matlab 上使用 HDF 非常容易。但我想用网格计算(Ubuntu)来实现这个。所以我正在尝试使用八度音阶。我有叶绿素的 HDF4 文件。普通图像处理将很容易按倍频程完成。但我想了解 Octave 中的 hdfread、hdftool。我在八度图像中添加了一个图像包。谁能告诉我如何阅读以及如何使用 hdf 数据。有没有要添加的包。请让我知道这件事。

如何读取hdf数据 如何加载 hdf 数据 如何从 hdf 数据中检索图像

【问题讨论】:

hdfreadhdftool 尚未在 Octave 中实现(我正在查看版本 3.6.4)... 【参考方案1】:

对于 HDF5,Octave 可以加载它而无需额外的包。

对于 HDF4,您可以使用 h4tonccf 或 OPeNDDAP hdf4_handler 将其转换为 NetCDF 文件,然后通过 Octave 的 octcdf 包通过 NetCDF 调用加载它。我们在此处提供了完整的 Octave 源代码示例:

http://hdfeos.org/software/octave.php

以下是 Octave 通过 OPeNDAP 创建的 NASA HDF4 示例图。

【讨论】:

【参考方案2】:

尚未在 Octave 中实现 hdf 特定功能。但是,Octave 可以使用更标准的load 命令处理该格式。只需执行load path-to-hdf-file,您就会在内存中加载一个结构。

在帮助邮件存档中查看这些帖子:How to read HDF data 和 read data subsets from HDF5。

【讨论】:

感谢您的回答。我已经这样做了。但它带有错误。如果 octave 支持 hdf4 及其操作,那对我来说会很有帮助,而不是使用 matlab。 @prabu 如果您希望人们帮助您,您需要指定您得到的错误(和 Octave 版本)。【参考方案3】:

Octave

目前,有关读取/写入数据集和属性的更完整和 Matlab 兼容的功能,请参阅模块

https://github.com/stegro/hdf5oct

编辑:我为这个项目做出了贡献。

【讨论】:

请在某处披露您与该项目的从属关系,否则您的帖子可能会被视为广告或垃圾邮件,这可能是错误的。【参考方案4】:

我相信您可以使用appropriate conversion tools 将 hdf4 数据转换为 hdf5,例如h4toh5.

在 Octave 中,加载 .h5 文件(加上检查)非常简单:

octave:1> load secondhdf5.h5 
octave:2> whos
Variables in the current scope:

   Attr Name         Size                     Bytes  Class
   ==== ====         ====                     =====  ===== 
        dbldata      4x3                         96  double
        fltdata      4x3                         96  double
        intdata      4x3                         48  int32

Total is 36 elements using 240 bytes

octave:3> size(dbldata)
ans =

   4   3

顺便说一下,'secondhdf5.h5'的内容如下:

$ h5dump secondhdf5.h5 
HDF5 "secondhdf5.h5" 
GROUP "/" 
   DATASET "dbldata" 
      DATATYPE  H5T_IEEE_F64LE
      DATASPACE  SIMPLE  ( 3, 4 ) / ( 3, 4 ) 
      DATA 
      (0,0): 1.1, 1.2, 1.3, 1.4,
      (1,0): 2.1, 2.2, 2.3, 2.4,
      (2,0): 3.1, 3.2, 3.3, 3.4
      
   
   DATASET "fltdata" 
      DATATYPE  H5T_IEEE_F32LE
      DATASPACE  SIMPLE  ( 3, 4 ) / ( 3, 4 ) 
      DATA 
      (0,0): 1.1, 1.2, 1.3, 1.4,
      (1,0): 2.1, 2.2, 2.3, 2.4,
      (2,0): 3.1, 3.2, 3.3, 3.4
      
   
   DATASET "intdata" 
      DATATYPE  H5T_STD_I32BE
      DATASPACE  SIMPLE  ( 3, 4 ) / ( 3, 4 ) 
      DATA 
      (0,0): 1, 2, 3, 4,
      (1,0): 5, 6, 7, 8,
      (2,0): 9, 10, 11, 12
      
   


【讨论】:

我想补充一点,octave 不支持复合类型的 h5 文件。所以每个数据集都必须是原始类型(int、double 等)。

以上是关于如何在 Octave 中读取 hdf 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在异步上下文中读取(hdf5)文件?

如何在 HDF5DotNet 中创建 2D H5Array

如何使用 h5py 读取只有数据集(无组)的 HDF5 文件?

在 Python 中读取 HDF 文件的属性

如何读取 hdf5 文件。并将它们绘制为图像

torch系列:torch中如何读取存放在hdf5文件中的字符串