Main Content

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

hypercube

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

    説明

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

    作成

    説明

    hcube = hypercube(filename) は、指定した入力ファイル filename からハイパースペクトル データを読み取ります。入力ファイルには、地球観測 (EO) 衛星からの衛星データを含む NITF (National Imagery Transmission Format) ファイル、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(enviImg,enviHdr) は、ENVI バイナリ データ ファイル enviImg からハイパースペクトル データを読み取ります。この関数は、ENVI ヘッダー ファイル enviHdr 内のメタデータを使用して enviImg のデータを解釈します。

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

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

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

    メモ

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

    入力引数

    すべて展開する

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

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

    .ntf

    .nsf

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

    ENVI イメージ ファイル

    ENVI ヘッダー ファイル

    .dat

    .hdr

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

    データ型: char | string

    ENVI イメージ ファイル名。文字ベクトルまたは string スカラーとして指定します。入力ファイルはファイル拡張子 .dat を持つフラット バイナリ ラスター ファイルでなければなりません。バイナリ データは band sequential (BSQ) 形式、band-interleaved-by-pixel (BIP) 形式、または band-interleaved-by-line (BIL) 形式でなければなりません。

    データ型: char | string

    ENVI ヘッダー ファイル名。文字ベクトルまたは string スカラーとして指定します。ヘッダー ファイルには ENVI イメージ ファイル enviImg のメタデータが格納されています。ヘッダー ファイルの拡張子は .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

    プロパティ

    すべて展開する

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

    ハイパースペクトル データ キューブ。サイズが 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

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

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

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

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

    • "single"

    • "double"

    • "uint8"

    • "uint16"

    • "int16"

    • "uint32"

    • "int32"

    • "uint64"

    • "int64"

    Interleave

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

    • "bsq" — Band-sequential

    • "bil" — Band-interleaved-by-line

    • "bip" — Band-interleaved-by-pixel

    HeaderOffset

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

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

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

    データ型: 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]
    
    
    R2020a で導入