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

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

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

【问题讨论】:

  • hdfreadhdftool 尚未在 Octave 中实现(我正在查看版本 3.6.4)...

标签: matlab image-processing octave hdf5 grid-computing


【解决方案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 dataread 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 等)。
    猜你喜欢
    • 2013-05-08
    • 2014-09-23
    • 1970-01-01
    • 2023-02-16
    • 2013-04-16
    • 2020-09-15
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多