メインコンテンツ

hyperpca

ハイパースペクトル データの主成分分析

    説明

    outputDataCube = hyperpca(inputData,numComponents) はハイパースペクトル データ キューブのスペクトル バンドから、指定された数の主成分を計算します。この関数は主成分バンドを含む新しいデータ キューブを返します。出力データ キューブのスペクトル バンドの数は、指定された主成分の数 numComponents と等しくなります。スペクトル次元削減を実現するには、指定した主成分の数がハイパースペクトル データ キューブ inputData 内のスペクトル バンドの数未満でなければなりません。

    また、[outputDataCube,coeff] = hyperpca(___) はハイパースペクトル データ キューブのスペクトル次元をまたがって推定された主成分係数も返します。

    [outputDataCube,coeff,var] = hyperpca(___) は、前の構文で説明した出力引数に加えて、主成分バンドによって保持された分散の割合を返します。

    [___] = hyperpca(___,Name=Value) は名前と値の引数を使用して主成分分析 (PCA) 法および追加オプションを指定します。

    メモ

    この関数には、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 が必要です。

    すべて折りたたむ

    ハイパースペクトル データをワークスペースに読み取ります。

    hcube = imhypercube("paviaU.dat");

    ハイパースペクトル データ キューブの主成分バンドを計算します。抽出する主成分の数を 10 に指定します。既定では、関数は特異値分解 (SVD) 法を使用して主成分を抽出します。

    reducedDataCube = hyperpca(hcube,10);

    入力データ キューブの最初の 10 個のスペクトル バンドを表示します。

    datacube = gather(hcube);
    figure
    montage(datacube(:,:,1:10),BorderSize=[10 10],Size=[2 5],DisplayRange=[]);

    Figure contains an axes object. The hidden axes object contains an object of type image.

    可視化のため、主成分の値を [0, 1] の範囲に入るよう再スケーリングします。データ キューブから抽出された主成分バンドをすべて表示します。

    figure
    rescalePC = rescale(reducedDataCube,0,1);
    montage(rescalePC,BorderSize=[10 10],Size=[2 5]);
    title("Principal Component Bands of Data Cube")

    Figure contains an axes object. The hidden axes object with title Principal Component Bands of Data Cube contains an object of type image.

    ハイパースペクトル データをワークスペースに読み取ります。

    hcube = imhypercube("paviaU.dat");

    固有値分解を使用して入力データ キューブの PCA を実行します。抽出する主成分の数を 3 に指定します。主成分 (PC) バンド、係数、および保持された分散を導出します。

    [outputDataCube,coeff,var] = hyperpca(hcube,3,Method="Eig");

    可視化のため、主成分の値を [0, 1] の範囲に入るよう再スケーリングします。データ キューブから抽出された主成分バンドをすべて表示します。

    figure
    rescalePC = rescale(outputDataCube,0,1);
    montage(rescalePC,BorderSize=[10 10],Size=[1 3]);
    title("Principal Component Bands of Data Cube")

    Figure contains an axes object. The hidden axes object with title Principal Component Bands of Data Cube contains an object of type image.

    主成分係数をプロットし、それぞれの主成分によって保持された分散の割合を表示します。保持された分散値の総和は、入力ハイパースペクトル データの情報の 99% が 3 つの主成分によって取得されていることを示唆しています。

    figure
    plot(hcube.Wavelength,coeff);
    legend(["PC1";"PC2";"PC3"],Location="SouthEast")
    text(430,0.19,"Retained variance");
    text(430,0.17,"PC1: "+num2str(var(1)))
    text(430,0.15,"PC2: "+num2str(var(2)))
    text(430,0.13,"PC3: "+num2str(var(3)))
    xlabel("Wavelength")
    ylabel("PC Coefficients")

    Figure contains an axes object. The axes object with xlabel Wavelength, ylabel PC Coefficients contains 7 objects of type line, text. These objects represent PC1, PC2, PC3.

    入力引数

    すべて折りたたむ

    入力ハイパースペクトル データ。サイズが M x N x C のハイパースペクトル データ キューブを表す 3 次元数値配列または hypercube オブジェクトとして指定します。ハイパースペクトル データ キューブは実数で非スパースでなければなりません。

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

    データ キューブから抽出する主成分バンドの数。正の整数スカラーとして指定します。この値は入力データ キューブ内にあるスペクトル バンドの数以下でなければなりません。

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

    名前と値の引数

    すべて折りたたむ

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

    例: hyperpca(hcube,10,Method="eig")

    PCA の手法。次のいずれかの値として指定します。

    • "svd" — 特異値分解法を使用して主成分を導出します。

    • "eig" — 固有値分解法を使用して主成分を導出します。

    データ型: char | string

    スペクトル バンドを平均センタリングするためのインジケーター。次のいずれかの値として指定します。

    • true または 1 — 主成分バンドを計算する前にスペクトル バンドの平均を減算することで入力データ キューブ内の各スペクトル バンドをセンタリングします。

    • false または 0 — 入力データ キューブ内のスペクトル バンドを平均センタリングすることなく主成分バンドを計算します。

    データ型: logical

    出力引数

    すべて折りたたむ

    PCA 変換されたデータ キューブ。サイズが M x N x numComponents の 3 次元数値配列として返されます。出力データ キューブの空間次元は、入力データ キューブの空間次元と同じです。出力データ キューブのスペクトル次元は、指定された主成分の数 numComponents と等しくなります。

    入力データ型が double の場合、出力データ型も double です。それ以外の場合、出力データ型は single です。

    データ型: single | double

    主成分係数。サイズが CnumComponents 列の行列として返されます。C は入力データ キューブ内のスペクトル バンドの数です。coeff の各列には、1 つの主成分の係数が格納されます。列は成分分散の降順です。

    入力データ型が double の場合、coeff のデータ型も double です。それ以外の場合、データ型は single です。

    データ型: single | double

    各主成分によって保持された分散。numComponents に等しい長さのベクトルとして返されます。保持された分散は、各主成分によって説明される分散の割合の合計を指定します。

    入力データ型が double の場合、var のデータ型も double です。それ以外の場合、データ型は single です。

    データ型: single | double

    バージョン履歴

    R2020a で導入