メインコンテンツ

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

hypercube

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

    説明

    関数 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) ファイルを指定できます。hypercube オブジェクトは、次の衛星によって取得されたハイパースペクトル データおよびマルチスペクトル データをサポートします。

    • 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 プロパティを変更できます。

    hcube = hypercube(___,BlockSize=blockSize) は、前の構文の入力引数の任意の組み合わせに加えて、ハイパースペクトル データ キューブを読み込むためのブロック サイズを指定します。

    メモ

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

    Hyperspectral Imaging Library for Image Processing Toolbox は、MATLAB® 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

    データ ブロックのサイズ。正の整数の 2 要素ベクトルとして指定します。ベクトルの各要素は、それぞれ各ブロックの行数と列数に対応します。この引数は、hypercube オブジェクトの BlockSize プロパティを設定します。

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

    プロパティ

    すべて展開する

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

    ハイパースペクトル データ キューブ。サイズが 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" — すべての波長がナノメートル単位である場合 (200 より大きく 100000 より小さい)

    • "Micrometers" — すべての波長がマイクロメートル単位である場合 (0.2 より大きく 100 より小さい)

    • "" — すべての波長がナノメートル単位でもマイクロメートル単位でもない場合。

    メモ

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

    データ型: struct

    データ ブロックのサイズ。正の整数の 2 要素ベクトルとして格納されます。ベクトルの各要素は、それぞれ各ブロックの行数と列数に対応します。ブロックを使用してハイパースペクトル データ キューブを読み込むことで、メモリ不足に陥ることなく、大規模なデータ セットの小さな領域を読み込むことができます。

    • BlockSize の値が小さいと、関数のメモリ使用量は減りますが、実行時間が長くなります。

    • BlockSize の値が大きいと、メモリ使用量は増えますが、実行時間が短くなります。

    このプロパティは、名前と値の引数 blockSize を使用して設定できます。

    • 各ブロックの行数は、ハイパースペクトル イメージの行数以下でなければなりません。ハイパースペクトル イメージの行数より大きい値が指定された場合、BlockSize は代わりにハイパースペクトル イメージの行数を使用します。

    • 各ブロックの列数は、ハイパースペクトル イメージの列数以下でなければなりません。ハイパースペクトル イメージの列数より大きい値が指定された場合、BlockSize は代わりにハイパースペクトル イメージの列数を使用します。

    データ型: double

    オブジェクト関数

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

    すべて折りたたむ

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

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

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

    hcube
    hcube = 
      hypercube with properties:
    
          DataCube: "[610x340x103 double]"
        Wavelength: [103x1 double]
          Metadata: [1x1 struct]
         BlockSize: [610 340]
    
    

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

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

    Figure contains an axes object. The axes object with title RGB Image of Data Cube contains an object of type image.

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

    hcube.Metadata
    ans = struct with fields:
                 Filename: "/mathworks/devel/bat/filer/batfs2566-0/Bdoc24b.2725827/build/runnable/matlab/toolbox/images/supportpackages/hyperspectral/hyperdata/mavendata/paviaU.hdr"
              FileModDate: "21-Jun-2024 16:13:21"
                 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"
    
    

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

    hcube = hypercube('paviaU.hdr');

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

    hcube
    hcube = 
      hypercube with properties:
    
          DataCube: "[610x340x103 double]"
        Wavelength: [103x1 double]
          Metadata: [1x1 struct]
         BlockSize: [610 340]
    
    

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

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

    Figure contains an axes object. The axes object with title RGB Image of Data Cube contains an object of type image.

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

    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')

    Figure contains an axes object. The axes object with xlabel Band Number, ylabel Wavelength contains 4 objects of type line, text. One or more of the lines displays its values using only markers These objects represent Original Values, New Values.

    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: "[384x512x3 uint8]"
        Wavelength: [3x1 double]
          Metadata: [1x1 struct]
         BlockSize: [384 512]
    
    

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

    hcube = hypercube('paviaU.dat');

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

    hcube.Metadata
    ans = struct with fields:
                 Filename: "/mathworks/devel/bat/filer/batfs2566-0/Bdoc24b.2725827/build/runnable/matlab/toolbox/images/supportpackages/hyperspectral/hyperdata/mavendata/paviaU.hdr"
              FileModDate: "21-Jun-2024 16:13:21"
                 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: "2024-09-05"
        WavelengthUnits: "Nanometers"
    
    

    詳細

    すべて展開する

    バージョン履歴

    R2020a で導入

    すべて展開する