1. 環境整備
ハイパースペクトル データ表示に特別に使用されるスペクトル パッケージをインストールする必要があります。
pip install spectral
2. データロード
生のハイパースペクトル.matデータと分類データgt.mat (ground-turth) を事前に準備し、 scipy.ioでloadmat(.)を使用してそれをプログラムに読み込みます。
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)