Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

プログラムによる HDF4 ファイルのインポート

概要

階層データ形式 (HDF4) は科学データ保管のための、ハードウェアに依存しない汎用規格で、米国立スーパーコンピューター応用研究所 (National Center for Supercomputing Applications: NCSA) によって開発されました。これらのファイル形式の詳細については、HDF Web サイト (www.hdfgroup.org) の HDF ドキュメンテーションを参照してください。

HDF-EOS は HDF4 の拡張であり、EOS (地球観測システム、Earth Observing System) からのデータを保存するために NASA (アメリカ航空宇宙局、National Aeronautics and Space Administration) によって開発されました。HDF4 のこの拡張の詳細については、NASA Web サイト (www.hdfeos.org) の HDF-EOS ドキュメンテーションを参照してください。

MATLAB® には HDF4 ファイルをインポートするいくつかのオプションがあり、以下の節でこれを説明します。

メモ

形式に互換性がなく、まったく異なる HDF5 データのインポートの詳細は、HDF5 ファイルのインポート を参照してください。

MATLAB HDF4 高水準関数の使用

HDF ファイルまたは HDF-EOS ファイルからデータをインポートするには、MATLAB の HDF4 高水準関数 hdfread を使用できます。関数 hdfread には、プログラミングによって HDF4 ファイルや HDF-EOS ファイルからデータをインポートする方法があります。これによって、低水準関数による HDF4 ファイルのインポートで説明する低水準 HDF 関数を使用する場合に理解しておかなければならない多くの詳細情報が不要となります。

この節では、以下を含むこうした高水準の MATLAB HDF 関数について説明します。

ただし、HDF4 ファイルにデータをエクスポートするには、MATLAB の HDF4 低水準関数を使用しなければなりません。

hdfinfo を使用した HDF4 ファイル情報の取得

HDF4 ファイルの内容に関する情報を取得するには、関数 hdfinfo を使用します。関数 hdfinfo では、ファイル情報とファイル内のデータ情報を含む構造体が返されます。

次の例では、MATLAB 付属の HDF4 サンプル ファイルについての情報が返されます。

info = hdfinfo('example.hdf')
info = 

      Filename: 'matlabroot\example.hdf'
    Attributes: [1x2 struct]
        Vgroup: [1x1 struct]
           SDS: [1x1 struct]
         Vdata: [1x1 struct]

ファイルに保存されているデータセットの情報を得るには、SDS フィールドを調べます。

hdfread を使用した HDF4 ファイルからのデータのインポート

関数 hdfread を使用するには、読み取るデータセットを指定しなければなりません。ファイル名とデータセット名を引数として指定できます。または、この情報を含む構造体が関数 hdfinfo によって返されるよう指定することもできます。以下の例では両方のメソッドを示します。データセットに含まれるデータのサブセットをインポートする方法の詳細は、データセットにおけるデータのサブセットの読み取りを参照してください。

  1. 関数 hdfinfo を使用して、HDF4 ファイルのデータセット名を調べます。

    info = hdfinfo('example.hdf')
    
    info = 
    
          Filename: 'matlabroot\example.hdf'
        Attributes: [1x2 struct]
            Vgroup: [1x1 struct]
               SDS: [1x1 struct]
             Vdata: [1x1 struct]

    ファイルのデータセットについて名前や他の情報を調べるには、SDS フィールドの内容を確認します。SDS 構造体の Name フィールドにデータセットの名前が挙げられます。

    dsets = info.SDS
    
    dsets = 
    
           Filename: 'example.hdf'
               Type: 'Scientific Data Set'
               Name: 'Example SDS'
               Rank: 2
           DataType: 'int16'
         Attributes: []
               Dims: [2x1 struct]
              Label: {}
        Description: {}
              Index: 0
  2. 関数 hdfread を使用して、HDF4 ファイルからデータセットを読み取ります。データセット名を関数のパラメーターとして指定します。データセット名では大文字と小文字が区別されることに注意してください。この例では 16 行 5 列の配列が返されます。

    dset = hdfread('example.hdf', 'Example SDS')
    
    dset =
    
          3      4      5      6      7
          4      5      6      7      8
          5      6      7      8      9
          6      7      8      9     10
          7      8      9     10     11
          8      9     10     11     12
          9     10     11     12     13
         10     11     12     13     14
         11     12     13     14     15
         12     13     14     15     16
         13     14     15     16     17
         14     15     16     17     18
         15     16     17     18     19
         16     17     18     19     20
         17     18     19     20     21
         18     19     20     21     22

    または、hdfinfo によって返される構造体でこの情報を含む特定のフィールドを指定できます。たとえば、科学データセットを読み取るには SDS フィールドを使用します。

    dset = hdfread(info.SDS);
    

データセットにおけるデータのサブセットの読み取り-  データセットのサブセットを読み取るには、オプションの 'index' パラメーターを使用できます。index パラメーターの値は 3 つのベクトルからなる cell 配列であり、各ベクトルによって、データセット内で読み取りを開始する位置、スキップ間隔 (たとえば、データ項目を 1 つおきに読み取るなど)、および読み取るデータの量 (たとえば、各次元の長さなど) を指定します。HDF4 用語では、これらのパラメーターは start 値、stride 値、および edge 値と呼ばれます。

たとえば、以下のコードについて考えます。

  • データの読み取りは第 3 行 第 3 列 ([3 3]) から始まります。

  • 配列のすべての要素が読み取られます ([])。

  • 10 行と 2 列が読み取られます ([10 2])。

    subset = hdfread('Example.hdf','Example SDS',...
                     'Index',{[3 3],[],[10 2 ]})
    
    subset =
    
          7      8
          8      9
          9     10
         10     11
         11     12
         12     13
         13     14
         14     15
         15     16
         16     17