我正在做遥感项目。在 matlab 上使用 HDF 非常容易。但我想用网格计算(Ubuntu)来实现这个。所以我正在尝试使用八度音阶。我有叶绿素的 HDF4 文件。普通图像处理将很容易按倍频程完成。但我想了解 Octave 中的 hdfread、hdftool。我在八度图像中添加了一个图像包。谁能告诉我如何阅读以及如何使用 hdf 数据。有没有要添加的包。请让我知道这件事。
- 如何读取hdf数据
- 如何加载hdf数据
- 如何从 hdf 数据中检索图像
我正在做遥感项目。在 matlab 上使用 HDF 非常容易。但我想用网格计算(Ubuntu)来实现这个。所以我正在尝试使用八度音阶。我有叶绿素的 HDF4 文件。普通图像处理将很容易按倍频程完成。但我想了解 Octave 中的 hdfread、hdftool。我在八度图像中添加了一个图像包。谁能告诉我如何阅读以及如何使用 hdf 数据。有没有要添加的包。请让我知道这件事。
在 Octave 中尚未实现 hdf 特定功能。load
但是,Octave 可以使用更标准的命令处理该格式。只需这样做load path-to-hdf-file
,您就会在内存中加载一个结构。
请参阅帮助邮件存档中的这些帖子:如何读取 HDF 数据,并从 HDF5 读取数据子集。
对于 HDF5,Octave 可以加载它而无需额外的包。
对于 HDF4,您可以使用 h4tonccf 或 OPeNDDAP hdf4_handler 将其转换为 NetCDF 文件,然后通过 Octave 的 octcdf 包通过 NetCDF 调用加载它。我们在这里提供了一个完整的 Octave 源代码示例:
http://hdfeos.org/software/octave.php
以下是 Octave 通过 OPeNDAP 创建的示例 NASA HDF4 图。
Octave <= 4.0 中的 HDF5 支持仅适用于 Octave 自身通过简单文件 IO 函数编写的文件。如果您的数据来自其他地方,它有很多缺点,例如无法读取单个任意数据集或其中的一部分。
目前,有关读取/写入数据集和属性的更完整和 Matlab 兼容的功能,请参阅模块
https://github.com/stegro/hdf5oct
编辑:我为这个项目做出了贡献。
我相信您可以使用适当的转换工具将 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
}
}
}
}