如何在Octave中读取hdf数据

7

我正在进行遥感项目。在matlab上使用HDF非常容易。但是我想在网格计算(Ubuntu)中实现此功能。因此,我正在尝试使用Octave。我有叶绿素的HDF4文件。普通图像处理可以轻松地在Octave中完成。但是我想了解关于Octave中的hdfread、hdftool的信息。我已经在Octave图像中添加了一个图像软件包。请问如何读取和处理HDF数据?是否有需要添加的软件包?请告诉我这方面的信息。

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

1
hdfreadhdftool在Octave中尚未实现(我正在查看版本3.6.4)... - Eitan T
4个回答

4
对于HDF5文件,Octave可以直接加载,无需额外的包。
对于HDF4文件,您可以使用h4tonccf或OPeNDDAP hdf4_handler将其转换为NetCDF文件,然后通过Octave的octcdf包调用进行加载。我们在此提供了一个完整的示例,包括完整的Octave源代码:

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

以下是由Octave通过OPeNDAP创建的NASA HDF4样本图。

Octave's plot of NASA AIRS HDF4 product


3
针对HDF格式的特定功能Octave尚未实现,但是,Octave可以使用更标准的load命令来处理该格式。只需执行load path-to-hdf-file即可在内存中加载一个结构体。
请参阅帮助邮件档案中的这些帖子:如何读取HDF数据从HDF5中读取数据子集

1
谢谢你的回答。我已经尝试过了,但是出现了错误。如果Octave支持HDF4及其操作,那对我来说将非常有帮助,而不是使用Matlab。 - prabu
@prabu,如果您希望得到帮助,您需要指定您遇到的错误(以及 Octave 版本)。 - carandraug

2
Octave <= 4.0中的HDF5支持仅适用于由Octave本身通过Simple File IO函数编写的文件。如果您的数据来自其他地方,则它具有许多缺点,例如无法读取单个任意数据集或其一部分。
目前,要获取更完整且与Matlab兼容的读/写数据集和属性的功能,请参见该模块。

https://github.com/stegro/hdf5oct

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

请在某处披露您与该项目的关联,否则您的帖子可能会被视为广告或垃圾邮件,这可能是不正确的。 - skuntsel

1
我相信您可以使用适当的转换工具将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等)类型。 - kstn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接