[ハイパースペクトル] ハイパースペクトルデータの取得と表示

1. 環境整備

        ハイパースペクトル データ表示に特別に使用されるスペクトル パッケージをインストールする必要があります。

pip install spectral

2. データロード

生のハイパースペクトル.matデータと分類データgt.mat (ground-turth)        を事前に準備し、 scipy.ioloadmat(.)を使用してそれをプログラムに読み込みます。

from scipy.io import loadmat

org_img = loadmat('HDate/PaviaU/paviaU.mat')

loadmat(.) を直接使用すると、次のように構成されるdict辞書        が出力されることに注意してください。

        実際のハイパースペクトル データ行列を取得するには、loadmat(.) の後に位置決め用のインデックスを追加する必要があるため、完全な read ステートメントは次のようになります。

from scipy.io import loadmat

input_image = loadmat('HDate/PaviaU/paviaU.mat')['paviaU']
gt = loadmat("HDate/PaviaU/paviaU_gt.mat")['paviaU_gt']

        2 つの変数の種類とサイズを出力すると、次のようになります。

         ハイパースペクトル画像は従来の RGB 画像と同様に 610*340*103 の行列で、最初の 2 つの次元は長さと幅、最後の次元はチャネル数であることがわかりますが、チャネル数は3 チャネルのみの RGB 画像と比較すると、はるかに高いです。

        また、 gt は事前にマークされた地盤行列で、グレースケール イメージに相当し、各ピクセルの値は 0 ~ 255 で、さまざまなタイプを表します

3. データ表示

        データ表示は主にspectralのimshow(.)を使って行われます。使い方はopencvのimshow(.)と同じです。

        1. ハイパースペクトル画像表示

import spectral as spy

view1 = spy.imshow(data=input_image, bands=[69, 27, 11], title="img")

                ヒント: 関数内の Bands パラメータは色を補正するために使用されます。bands パラメータが追加されていない場合、レンダリングされる色は正しくなくなります (下図を参照)。

         2. ハイパースペクトル分類表示

view2 = spy.imshow(classes=gt, title="gt")

        3. ハイパースペクトル画像と分類オーバーレイ表示

view3 = spy.imshow(data=input_image, bands=[69, 27, 11], classes=gt)

         4. ハイパースペクトルカラーチャンネル表示

                何のためにあるのか分かりませんが、とにかくかっこいいです

spy.view_cube(input_image, bands=[69, 27, 11])

         5. ハイパースペクトル高次元特徴表示

pc = spy.principal_components(input_image)
xdata = pc.transform(input_image)
spy.view_nd(xdata[:, :, :15], classes=gt)

        6. データストレージ

                 save_rgb(.) 関数を使用して、上記の画像を RGB 画像の形式で指定した場所に保存します。関数は次のとおりです。

spy.save_rgb(data=input_image,bands=[69, 27, 11],filename='hello.jpg')

 4. 小さな実験

        opencv を使用してハイパースペクトル イメージを表示すると、3 次元チャネルが多すぎるためにエラーが報告されます。ただし、gt はグレースケール画像と同等なので、この問題は発生しません。

        ただし、カテゴリ間のギャップが小さすぎるため (カテゴリ番号は通常 10 を超えない)、実際の表示は黒になります。したがって、各要素は 10 倍に拡大され、opencv を使用して表示されます。

gtx = gt*10
cv2.imshow('Test',gtx)

おすすめ

転載: blog.csdn.net/weixin_37878740/article/details/130740764