高水準関数による 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 によって返されるよう指定することもできます。以下の例では両方のメソッドを示します。データ セットに含まれるデータのサブセットをインポートする方法の詳細は、データ セットにおけるデータのサブセットの読み取りを参照してください。
関数
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: 0hdfread関数を使用して、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