如何在 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 数据中检索图像【问题讨论】:
hdfread
和 hdftool
尚未在 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 数据的主要内容,如果未能解决你的问题,请参考以下文章