Main Content

multibandread

バイナリ ファイルからバンドインターリーブ データの読み込み

構文

X = multibandread(filename,size,precision,offset,interleave,byteorder)
X = multibandread(...,subset1,subset2,subset3)

説明

X = multibandread(filename,size,precision,offset,interleave,byteorder) は、バイナリ ファイル filename からバンド順データ並び (BSQ)、ライン挟み込みバンド並び (BIL)、または画素挟み込みバンド並び (BIP) データを読み取ります。filename 入力は文字ベクトルまたは string スカラーとして指定します。この関数は、以下の図に示すような 3 次元配列の 3 番目の次元として帯域 (band) を定義します。

Schematic showing relationship between rows, columns, and bands of data

multibandread のパラメーターを使用すると、読み取る帯域など、読み取り操作の各種の側面を指定できます。詳細については、パラメーターを参照してください。

1 つの帯域のみを読み込む場合、X は 2 次元配列になります。帯域が複数の場合、X は 3 次元配列になります。既定の設定では、X のデータ型は double になります。precision パラメーターを使用して、他のデータ型を指定することができます。

X = multibandread(...,subset1,subset2,subset3) は、ファイル内のデータの一部を読み取ります。3 つのサブセット化パラメーターを使用して、行、列、帯域に関する次元に合ったデータ サブセットを指定できます。詳細については、サブセット化パラメーターを参照してください。

メモ

BSQ、BIL、BIP ファイル以外にも、マルチバンド イメージは、TIFF ファイル形式を使って保存することができます。その場合、関数 imread を使用してデータをインポートします。

パラメーター

次の表で、multibandread が受け入れられる引数を説明します。

引数

説明

filename

読み取るファイル名を含む文字ベクトルまたは string スカラー。

size

[height, width, N] で構成される三要素整数ベクトル。

  • height は、行の総数です。

  • width は各行の総要素数です。

  • N は、帯域の数です。

データ全体が読み込まれる場合、これはデータの次元になります。

precision

読み込むデータの形式を指定する文字ベクトルまたは string スカラー。たとえば、'uint8''double''integer*4' または関数 fread でサポートされる他のいずれかの精度。

メモ: precision パラメーターを使用して、出力データの形式を指定できます。たとえば、uint8 データを読み込み、配列 uint8 を出力するには、'uint8=>uint8' (または '*uint8') の精度を指定します。uint8 データを読み込み、単精度で MATLAB® ソフトウェアに出力するには、'uint8=>single' と指定します。詳細については、fread を参照してください。

offset

ファイル内の最初のデータ要素の位置を、0 ベースで指定したスカラー。この値は、ファイルの先頭からデータが始まる位置までをバイト数で表します。

interleave

データの保存形式。次のいずれかの値として指定します。

  • 'bsq' — バンド順データ並び

  • 'bil'— ライン挟み込みバンド並び

  • 'bip'— 画素挟み込みバンド並び

これらのインターリーブ法の詳細については、multibandwrite のリファレンス ページを参照してください。

byteorder

データを保存するバイト順序 (マシン形式)。次のような文字ベクトルまたは string スカラーで指定します。

  • 'ieee-le' — リトルエンディアン

  • 'ieee-be' — ビッグエンディアン

サポートしている形式の一覧に関する詳細については、関数 fopen を参照してください。

サブセット化パラメーター

3 つのサブセット化パラメーターを指定することができます。個々のサブセット化パラメーターは、3 要素の cell 配列 {dim,method,index} になります。

パラメーター

説明

dim

サブセット化を行う次元。次のいずれかの値として指定します。

  • 'Column'

  • 'Row'

  • 'Band'

method

サブセット化の手法。次のいずれかの値として指定します。

  • 'Direct'

  • 'Range'

サブセット cell 配列の中からこの要素を省略すると、multibandread は、既定の設定として 'Direct' を使用します。

index

method'Direct' の場合、index は帯域の次元に沿って読み込まれるインデックスを指定するベクトルになります。

method'Range' の場合、indexdim で指定した次元に沿って、読み込まれる範囲とステップ サイズを指定する [start, increment, stop] の 3 要素ベクトルになります。index が 2 要素のベクトルの場合、multibandreadincrement の値を 1 と仮定します。

すべて折りたたむ

データセットに対して初期パラメーターを設定します。

rows=3;
cols=3;
bands=5;
filename = tempname;

データセットを定義します。

fid = fopen(filename,"w","ieee-le");
fwrite(fid,1:rows*cols*bands,"double");
fclose(fid);

バンド順データ並び形式を使用して、その他の帯域のデータを読み取ります。

im1 = multibandread(filename,[rows cols bands], ...
                    "double",0,"bsq","ieee-le", ...
                    {"Band","Range",[1 2 bands]})
im1(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


im1(:,:,2) =

    19    20    21
    22    23    24
    25    26    27


im1(:,:,3) =

    37    38    39
    40    41    42
    43    44    45

最初の 2 行 2 列 のデータを画素挟み込みバンド並び形式を使用して読み取ります。

im2 = multibandread(filename,[rows cols bands], ...
                    "double",0,"bip","ieee-le", ...
                    {"Row","Range",[1 2]}, ...
                    {"Column","Range",[1 2]})
im2(:,:,1) =

     1     6
    16    21


im2(:,:,2) =

     2     7
    17    22


im2(:,:,3) =

     3     8
    18    23


im2(:,:,4) =

     4     9
    19    24


im2(:,:,5) =

     5    10
    20    25

ライン挟み込みバンド並び形式を使用してデータを読み取ります。

im3 = multibandread(filename,[rows cols bands], ...
                    "double",0,"bil","ieee-le")
im3(:,:,1) =

     1     2     3
    16    17    18
    31    32    33


im3(:,:,2) =

     4     5     6
    19    20    21
    34    35    36


im3(:,:,3) =

     7     8     9
    22    23    24
    37    38    39


im3(:,:,4) =

    10    11    12
    25    26    27
    40    41    42


im3(:,:,5) =

    13    14    15
    28    29    30
    43    44    45

この例で作成されたファイルを削除します。

delete(filename)

FITS ファイル tst0012.fits の 74880 バイトから始めて int16 BIL データを読み込みます。

im4 = multibandread("tst0012.fits",[31 73 5], ...
                    "int16",74880,"bil","ieee-be", ...
                    {"Band","Range",[1 3]});
im5 = double(im4)/max(max(max(im4)));
imagesc(im5)

バージョン履歴

R2006a より前に導入