ハイパースペクトルデータ

提供: HSDAnalyzerWiki
ナビゲーションに移動 検索に移動

北海道衛星株式会社製ハイパースペクトルカメラにて取得するハイパースペクトルデータ(HSD)は、BIL(Band Interleaved by Line)形式に則り構築しています。

ハイパースペクトルデータ形式(BILに準拠)
ハイパースペクトルデータ形式(BILに準拠)

ハイパースペクトルデータの構造について

BIL形式(標準)

BIL形式とは、1ライン目の1バンド目,2バンド目,...kバンド目,2ライン目の1バンド目,2バンド目,...という順でデータが並んでいることを指します。ただし、ENVI等で読み込む場合は、画像の上下とバンドが逆になっています。

HSDAnalyzer内部において、HSDは幅(Width)×高さ(Height)×バンド数(Band)の3次元配列データとして存在しています。構造のイメージは波長毎の画像がバンド数分重なった、幅×高さ×バンド数の直方体です。バンド数の小さい方が短波長、大きい方が長波長になります。

ハイパースペクトルデータイメージ
ハイパースペクトルデータイメージ

ヘッダー情報

ハイパースペクトルデータ読み込み

C#にてHSDを読み込む際のコードは以下の通りになります。

this.fileName = fileName;	読み込むファイルのパス
FileStream hsd;
hsd = new FileStream(fileName, FileMode.Open, FileAccess.Read);	ファイルのストリームを作成

int width = Form1.HSDSobj.width;	HSD幅
int height = Form1.HSDSobj.height;	HSD高さ
int band = Form1.HSDSobj.bands;	HSDバンド数
int buff;
for (int i = 0; i < height; i++)
{
    for (int k = 0; k < bands; k++)
    {
        for (int j = 0; j < width; j++)
        {
            buff = hsd.ReadByte();	1バイト読み込む
            if (buff > -1 && buff != 0)
            {
                HSData[j, i, k] = (short)buff;	配列に格納
            }
            else if (buff == 0)
            {
                HSData[j, i, k] = 1;
            }
            else
            {
                break;
            }
        }
    }
}