Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

hypercube

ハイパースペクトル データの読み取り

R2020a 以降

    説明

    関数 hypercube はハイパースペクトル データを読み取り、hypercube オブジェクトを返します。このオブジェクトにはハイパースペクトル データ キューブおよびその関連プロパティが格納されています。オブジェクト関数を使用して、目的のハイパースペクトル バンドの削除または選択、新しいピクセル値の割り当て、カラー イメージの生成、ハイパースペクトル データの ENVI (Environment for Visualizing Images) ファイル形式への書き込みを行います。

    作成

    説明

    hcube = hypercube(filename) は、指定した入力ファイル filename からハイパースペクトル データを読み取ります。入力ファイルには、地球観測 (EO) 衛星からの衛星データを含む NITF (National Imagery Transmission Format) ファイル、HDF (Hierarchical Data Format) 形式で保存された Hyperion L1R (Hyperion Level 1R) ファイル、ENVI ヘッダー ファイルまたはイメージ ファイル、あるいは MTL (Metadata Text Extension) ファイルを指定できます。

    • EO-1 Hyperion

    • EO-1 Advanced Land Imager (EO-1 ALI)

    • ランドサット多重スペクトル走査放射計 (Landsat MSS)

    • ランドサット セマティック マッパー (Landsat TM)

    • ランドサット拡張セマティック マッパー プラス (Landsat ETM+)

    • ランドサット陸域イメージャ/熱赤外センサー (Landsat OLI/TIRS)

    • 航空機搭載可視/赤外イメージング スペクトルメーター (AVIRIS)

    メモ

    関数 hypercube は GeoTIFF (Georeferenced Tagged Image File Format) 形式で格納された衛星データを読み取ります。

    hcube = hypercube(img,hdr) は、データ ファイル img からハイパースペクトル データを読み取ります。データ ファイルには、ENVI イメージ ファイルまたは Hyperion L1R ファイルを指定できます。この関数は、ヘッダー ファイル hdr 内のメタデータを使用して img のデータを解釈します。

    hcube = hypercube(___,wavelength) は入力データの各スペクトル バンドの波長を指定し、出力 hypercube オブジェクトの Wavelength プロパティを設定します。

    hcube = hypercube(tifFile,wavelength) は TIFF (Tagged Image File Format) ファイル tifFile からハイパースペクトル データを読み取ります。

    hcube = hypercube(image,wavelength) はハイパースペクトル データ キューブ image と指定された中心波長の値 wavelength から hypercube オブジェクトを作成します。

    hcube = hypercube(image,wavelength,metadata) はハイパースペクトル データ キューブ image、指定された中心波長の値 wavelength、およびメタデータ metadata から hypercube オブジェクトを作成します。この構文を使用すると、hypercube オブジェクトの Metadata プロパティを変更できます。

    メモ

    この関数には Image Processing Toolbox™ Hyperspectral Imaging Library が必要です。Image Processing Toolbox Hyperspectral Imaging Library はアドオン エクスプローラーからインストールできます。アドオンのインストールの詳細については、アドオンの入手と管理を参照してください。

    Image Processing Toolbox Hyperspectral Imaging LibraryMATLAB® Online™ または MATLAB Mobile™ ではサポートされないため、デスクトップの MATLAB が必要となります。

    入力引数

    すべて展開する

    入力ファイル名。文字ベクトルまたは string スカラーとして指定します。入力ファイル名は次のファイル タイプのいずれかでなければなりません。

    ファイル形式拡張子追加要件
    NITF ファイル

    .ntf

    .nsf

    なし
    EO 衛星からの GeoTIFF メタデータ ファイル.txtファイル名の末尾は接尾辞 "MTL" でなければなりません。

    ENVI イメージ ファイル

    ENVI ヘッダー ファイル

    イメージ ファイル:

    • .dat

    • .img

    • .raw

    • .bsq (R2023b 以降)

    • .bil (R2023b 以降)

    • .bip (R2023b 以降)

    ヘッダー ファイル:

    • .hdr

    イメージ ファイルとヘッダー ファイルは同じフォルダー内にあり、同じファイル名でなければなりません。

    Hyperion Level 1R イメージ ファイル

    Hyperion ヘッダー ファイル

    イメージ ファイル:

    • .L1R

    ヘッダー ファイル:

    • .hdr

    イメージ ファイルとヘッダー ファイルは同じフォルダー内にあり、同じファイル名でなければなりません。

    マルチページ TIFF ファイル (R2023b 以降)

    .tif

    ファイルは、ボリュームまたは時系列イメージ スタックを含むマルチページ TIFF ファイルでなければなりません。

    データ型: char | string

    イメージのファイル名。文字ベクトルまたは string スカラーとして指定します。入力ファイルは、ファイル拡張子が次のいずれかであるフラット バイナリ ラスター ファイルでなければなりません。

    • .dat

    • .raw

    • .L1R

    • .bsq (R2023b 以降)

    • .bil (R2023b 以降)

    • .bip (R2023b 以降)

    バイナリ データは、バンド順データ並び (BSQ) インターリーブ形式、画素挟み込みバンド並び (BIP) インターリーブ形式、またはライン挟み込みバンド並び (BIL) インターリーブ形式でなければなりません。

    データ型: char | string

    ヘッダー ファイル名。文字ベクトルまたは string スカラーとして指定します。ヘッダー ファイルにはイメージ ファイル img のメタデータが格納されています。ヘッダー ファイルの拡張子は .hdr でなければなりません。ヘッダー ファイルには少なくとも次のフィールドが含まれていなければなりません。

    フィールド説明
    Heightイメージの高さまたはイメージ内の行数。正の整数として指定します。
    Widthイメージの幅またはイメージ内の列数。正の整数として指定します。
    Bandsスペクトル バンドの数。正の整数として指定します。
    DataType

    ENVI ファイル内のデータのデータ型。次のいずれかの値として指定します。

    • "single"

    • "double"

    • "uint8"

    • "uint16"

    • "int16"

    • "uint32"

    • "int32"

    • "uint64"

    • "int64"

    HeaderOffsetイメージ ファイル内にある最初の要素の 0 ベースの位置。正の整数として指定します。ヘッダー オフセットは、イメージ ファイルの先頭からイメージ データの始まりまでのバイト数を表します。
    ByteOrderデータのエンディアン。リトル エンディアンの場合は文字列 "ieee-le"、ビッグ エンディアンの場合は "ieee-be" として指定します。

    関数 hypercube は、さらに、ヘッダーに関連付けられたハイパースペクトル イメージを読み取るためのデータ インターリーブ情報を必要とします。イメージ ファイルの拡張子が、bsq (バンド順データ並び)、.bil (ライン挟み込みバンド並び)、.bip (画素挟み込みバンド並び) のいずれでもない場合、ヘッダー ファイルには次のいずれかの値が設定された Interleave フィールドを含めなければなりません。

    • "bsq" — バンド順データ並び

    • "bil" — ライン挟み込みバンド並び

    • "bip" — 画素挟み込みバンド並び

    データ型: char | string

    各スペクトル バンドの中心波長の値。C 要素ベクトルとして指定します。C は入力ハイパースペクトル データの、スペクトル バンドの数として定義されたスペクトル次元です。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    TIFF ファイル名。文字ベクトルまたは string スカラーとして指定します。ファイル名には拡張子 .tiff または .tif が含まれていなければなりません。

    データ型: char | string

    入力ハイパースペクトル データ。サイズが M x N x C の 3 次元数値配列として指定します。M および N はそれぞれハイパースペクトル データ内の行と列の数です。C はハイパースペクトル データ内のスペクトル バンドの数です。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    ハイパースペクトル データのメタデータ。構造体配列として指定します。

    データ型: struct

    プロパティ

    すべて展開する

    この プロパティ は読み取り専用です。

    ハイパースペクトル データ キューブ。サイズが M x N x C の 3 次元数値配列として格納されます。データ キューブにはファイルまたは数値配列から読み取られたハイパースペクトル データが 2 次元単色イメージの配列として格納されます。C はイメージまたはスペクトル バンドの数、M および N はイメージの空間分解能です (ピクセル単位)。データ キューブは入力データと同じサイズ、同じデータ型です。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    この プロパティ は読み取り専用です。

    各スペクトル バンドの中心波長の値。C 要素ベクトルとして指定します。C は入力ハイパースペクトル データの、スペクトル バンドの数として定義されたスペクトル次元です。入力引数 wavelength を使用してこのプロパティを設定できます。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    この プロパティ は読み取り専用です。

    ハイパースペクトル データのメタデータ。以下のフィールドを既定値として持つ構造体配列として格納されます。

    フィールド説明
    Heightイメージの高さまたはデータ キューブ内の行数。正の整数として指定します。
    Widthイメージの幅またはデータ キューブ内の列数。正の整数として指定します。
    Bandsデータ キューブを構成するスペクトル バンドの数。正の整数として指定します。
    DataType

    データのデータ型。次のいずれかの値として指定します。

    • "single"

    • "double"

    • "uint8"

    • "uint16"

    • "int16"

    • "uint32"

    • "int32"

    • "uint64"

    • "int64"

    Interleave

    データ インターリーブ。次のいずれかの値として指定します。

    • "bsq" — バンド順データ並び

    • "bil" — ライン挟み込みバンド並び

    • "bip" — 画素挟み込みバンド並び

    HeaderOffset

    イメージ ファイル内にある最初の要素の 0 ベースの位置。正の整数として指定します。

    ヘッダー オフセットは、イメージ ファイルの先頭からイメージ データの始まりまでのバイト数を表します。既定値は 0 です。

    ByteOrderデータのエンディアン。リトル エンディアンの場合は文字列 "ieee-le"、ビッグ エンディアンの場合は "ieee-be" として指定します。
    WavelengthUnitsスペクトル バンドの波長の単位。string として指定します。既定値は "Nanometers" です。

    メモ

    hypercube オブジェクトの Metadata プロパティには、入力ハイパースペクトル データのヘッダー ファイルに格納されているパラメーターの値に応じて、フィールドを 1 つ以上追加できます。入力引数 metadata を指定することで、Metadata プロパティのパラメーター値を変更したり、新しい Metadatahypercube オブジェクトに追加したりできます。

    データ型: struct

    オブジェクト関数

    assignData新しいデータをハイパースペクトル データ キューブに割り当て
    cropData関心領域のトリミング
    enviwriteENVI ファイル形式へのハイパースペクトル データの書き込み
    selectBands最も情報量の多いバンドの選択
    removeBandsデータ キューブからのスペクトル バンドの削除
    colorizeハイパースペクトル データのカラー イメージの推定

    すべて折りたたむ

    ENVI 形式で格納されたハイパースペクトル データをワークスペースに読み取ります。ENVI データ ファイルとそれに関連する ENVI ヘッダー ファイルを指定して hypercube オブジェクトを作成します。

    hcube = hypercube('paviaU.dat','paviaU.hdr');

    hypercube オブジェクトのプロパティを表示します。

    hcube
    hcube = 
      hypercube with properties:
    
          DataCube: [610×340×103 double]
        Wavelength: [103×1 double]
          Metadata: [1×1 struct]
    
    

    関数 colorize を使用してハイパースペクトル データから RGB イメージを推定します。RGB イメージを可視化します。

    rgbImg = colorize(hcube,'Method','RGB');
    figure
    imagesc(rgbImg)
    title('RGB Image of Data Cube')

    hypercube オブジェクトのメタデータを検査します。

    hcube.Metadata
    ans = struct with fields:
                 Filename: "Y:\jobarchive\Bspkg20b\2020_06_16_h06m34s27_job1406120_pass\matlab\toolbox\images\supportpackages\hyperspectral\hyperdata\paviaU.hdr"
              FileModDate: "25-Feb-2020 14:29:34"
                 FileSize: 654
                   Format: "HDR"
            FormatVersion: ''
               SensorType: [0×0 string]
              Description: [0×0 string]
          AcquisitionTime: [0×0 string]
             RasterFormat: "ENVI"
                   Height: 610
                    Width: 340
                    Bands: 103
                 DataType: "double"
               Interleave: "bsq"
             HeaderOffset: 0
                ByteOrder: "ieee-le"
                BandNames: [0×0 string]
                     FWHM: []
                     Gain: []
                   Offset: []
          ReflectanceGain: []
        ReflectanceOffset: []
                 BadBands: []
               CloudCover: []
               SunAzimuth: []
             SunElevation: []
    
    

    ハイパースペクトル データに関する情報を含むヘッダー ファイルを指定して、ENVI 形式のデータをワークスペースに読み取ります。それに関連する ENVI バイナリ データ ファイルは、ENVI ヘッダー ファイルとして同じフォルダーに格納されていなければなりません。

    hcube = hypercube('paviaU.hdr');

    hypercube オブジェクトのプロパティを表示します。

    hcube
    hcube = 
      hypercube with properties:
    
          DataCube: [610×340×103 double]
        Wavelength: [103×1 double]
          Metadata: [1×1 struct]
    
    

    関数 colorize を使用してデータ キューブから RGB イメージを推定します。コントラスト ストレッチを使用して RGB イメージのコントラストを向上させます。RGB イメージを可視化します。

    rgbImg = colorize(hcube,'Method','RGB','ContrastStretching',true);
    figure
    imagesc(rgbImg)
    title('RGB Image of Data Cube')

    ハイパースペクトル データの新しい中心波長の値を割り当てます。波長値の数は、ハイパースペクトル データ キューブ内の帯域数と等しくなければなりません。それぞれの波長値は一意の値でなければなりません。

    minWavelength = 500;
    maxWavelength = 1010;
    newWavelength = minWavelength:5:maxWavelength;

    新しい波長値を持つ新しい hypercube オブジェクトを作成します。

    newhcube = hypercube('paviaU.hdr',newWavelength);

    古い波長値と新しい波長値をプロットします。波長範囲を表示します。

    figure
    plot(hcube.Wavelength,'o')
    hold on
    plot(newhcube.Wavelength,'or')
    xlabel('Band Number')
    ylabel('Wavelength')
    str1 = ['Original wavelength range: ' num2str(min(hcube.Wavelength))  'nm to ' num2str(max(hcube.Wavelength)) 'nm'];
    text(5,1075,str1)
    str2 = ['New wavelength range: ' num2str(min(newhcube.Wavelength))  'nm to ' num2str(max(newhcube.Wavelength)) 'nm'];
    text(5,1035,str2)
    legend('Original Values','New Values','Location','SouthEast')

    RGB イメージをワークスペースに読み取ります。RGB イメージには赤、緑、および青チャネルの 3 つのスペクトル チャネルが格納されます。

    image = imread('peppers.png');

    赤、緑、青のチャネルの中心波長の値をそれぞれ 700、530、470 ナノメートル (nm) として指定します。

    wavelength = [700 530 470];

    イメージと波長値を使用して hypercube オブジェクトを作成します。

    hcube = hypercube(image,wavelength)
    hcube = 
      hypercube with properties:
    
          DataCube: [384×512×3 uint8]
        Wavelength: [3×1 double]
          Metadata: [1×1 struct]
    
    

    ハイパースペクトル データをワークスペースに読み取り、そのプロパティを検査します。

    hcube = hypercube('paviaU.dat');

    hypercube オブジェクトの Metadata プロパティを検査します。

    hcube.Metadata
    ans = struct with fields:
                 Filename: "/mathworks/devel/bat/Bdoc23b/build/matlab/toolbox/images/supportpackages/hyperspectral/hyperdata/mavendata/paviaU.hdr"
              FileModDate: "01-Aug-2023 16:30:58"
                 FileSize: 654
                   Format: "HDR"
            FormatVersion: ''
               SensorType: [0x0 string]
              Description: [0x0 string]
          AcquisitionTime: [0x0 string]
             RasterFormat: "ENVI"
                   Height: 610
                    Width: 340
                    Bands: 103
                 DataType: "double"
               Interleave: "bsq"
             HeaderOffset: 0
                ByteOrder: "ieee-le"
                BandNames: [0x0 string]
                     FWHM: []
                     Gain: []
                   Offset: []
          ReflectanceGain: []
        ReflectanceOffset: []
                 BadBands: []
               CloudCover: []
               SunAzimuth: []
             SunElevation: []
          SolarIrradiance: []
         EarthSunDistance: []
          WavelengthUnits: "Nanometers"
    
    

    メタデータから空のフィールドを見つけて削除します。

    metadata = hcube.Metadata;
    fields = fieldnames(metadata);
    indx = find(structfun(@isempty,metadata)==1);
    newMetadata = rmfield(metadata,fields(indx));

    AcquistionTime フィールドの値を現在の日付に設定します。

    currentDate = string(datetime("now",Format="yyyy-MM-dd"));
    newMetadata.AcquistionTime = currentDate;

    新しいメタデータをもつ hypercube オブジェクトを作成します。新しい hypercube オブジェクトの DataCube プロパティと Wavelength プロパティは、入力データと同じになります。

    nhcube = hypercube(hcube.DataCube,hcube.Wavelength,newMetadata);

    新しい hypercube オブジェクトの Metadata プロパティを検査します。

    nhcube.Metadata
    ans = struct with fields:
                 Height: 610
                  Width: 340
                  Bands: 103
               DataType: "double"
             Interleave: "bsq"
           HeaderOffset: 0
              ByteOrder: "ieee-le"
         AcquistionTime: "2023-12-04"
        WavelengthUnits: "Nanometers"
    
    

    バージョン履歴

    R2020a で導入