6

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

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

4 回答 4

3

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

请参阅帮助邮件存档中的这些帖子:如何读取 HDF 数据,并从 HDF5 读取数据子集

于 2013-07-29T15:16:19.997 回答
3

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

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

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

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

Octave 绘制的 NASA AIRS HDF4 产品图

于 2014-02-10T16:08:50.447 回答
2

Octave <= 4.0 中的 HDF5 支持仅适用于 Octave 自身通过简单文件 IO 函数编写的文件。如果您的数据来自其他地方,它有很多缺点,例如无法读取单个任意数据集或其中的一部分。

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

https://github.com/stegro/hdf5oct

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

于 2015-06-01T14:46:18.257 回答
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
      }
   }
}
}
于 2015-03-27T07:34:37.027 回答