Main Content

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

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) ファイルを指定できます。

    • EO-1 Hyperion

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

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

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

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

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

    メモ

    関数 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 オブジェクトを作成します。この構文を使用すると、超方格オブジェクトの Metadata プロパティを変更できます。

    メモ

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

    入力引数

    すべて展開する

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

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

    .ntf

    .nsf

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

    ENVI イメージ ファイル

    ENVI ヘッダー ファイル

    .dat.img.raw

    .hdr

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

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

    Hyperion ヘッダー ファイル

    .L1R

    .hdr

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

    データ型: char | string

    イメージ ファイル名。文字ベクトルまたは string スカラーとして指定します。入力ファイルは、ファイル拡張子 .dat.raw、または .L1R をもつフラット バイナリ ラスター ファイルでなければなりません。バイナリ データはバンド順データ並び (BSQ) 形式、画素挟み込みバンド並び (BIP) 形式、またはライン挟み込みバンド並び (BIL) 形式でなければなりません。

    データ型: char | string

    ヘッダー ファイル名。文字ベクトルまたは string スカラーとして指定します。ヘッダー ファイルにはイメージ ファイル img のメタデータが格納されています。ヘッダー ファイルの拡張子は .hdr です。

    データ型: 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/Bdoc22a/build/matlab/toolbox/images/supportpackages/hyperspectral/hyperdata/paviaU.hdr"
              FileModDate: "25-Feb-2020 03:59:34"
                 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: "2022-05-10"
        WavelengthUnits: "Nanometers"
    
    

    バージョン履歴

    R2020a で導入