Main Content

multibandwrite

バンドインターリーブ データのファイルへの書き込み

構文

multibandwrite(data,filename,interleave)
multibandwrite(data,filename,interleave,start,totalsize)
multibandwrite(...,param,value...)

説明

multibandwrite(data,filename,interleave) は、2 次元または 3 次元の数値または logical 配列の datafilename で指定したバイナリ ファイルに書き込みます。filename は文字ベクトルまたは string スカラーとして指定します。data の 3 次元目の長さは、ファイルに書き込む帯域数を決定するものです。帯域は interleave で指定した型で、ファイルに書き込まれます。この引数に関する詳細は、インターリーブ法を参照してください。

filename が既に存在する場合、multibandwrite は、オプションの offset パラメーターを指定しない限り、それを書き換えます。他のオプションのパラメーターの詳細については、最後の構文とその説明を参照してください。

multibandwrite(data,filename,interleave,start,totalsize) は、data をバイナリ ファイル filename に細分化された形で書き込みます。この構文で、data は全データセットの中のサブセットです。

start は、1 行 3 列の配列 [firstrow firstcolumn firstband] で、書き込むデータの始まりを指定します。firstrowfirstcolumn は、イメージ ピクセルの左上の位置を指定します。firstband は、書き込む最初の帯域のインデックスを与えます。たとえば、data(I,J,K) は、(firstband+K-1) 番目の帯域の中の [firstrow+I-1, firstcolumn+J-1] のピクセルのデータです。

totalsize は、1 行 3 列の配列 [totalrows,totalcolumns,totalbands] で、ファイルに書き込むデータのフルな 3 次元サイズを指定します。

メモ

この構文内で、ファイルにすべてのデータを書き込むには、multibandwrite を複数回呼び出す必要があります。はじめて呼び出されたとき、multibandwrite はデータ サブセットの外側にあるすべての値に対して、すべての値を使用して、ファイル全体を書き込みます。個々に連続する呼び出しの中で、multibandwrite は、これらの値を data 内のサブセットで書き換えます。パラメーター filenameinterleaveoffsettotalsize は、ファイルに書き込まれる場合、定数のまま使用されます。

multibandwrite(...,param,value...) は、マルチ帯域データを、次のオプション パラメーター/値のペアを指定して書き込みます。

パラメーター

説明

'precision'

ファイルに書き込む個々の要素の形式とサイズを指定する文字ベクトルまたは string スカラー。有効な値の一覧は、関数 fwrite に関するヘルプを参照してください。既定の精度は、データのクラスになります。

'offset'

最初のデータ要素の前まで、スキップするバイト数。ファイルが準備されていない場合、multibandwrite は空白を埋めるために、ASCII のヌル値を書き込みます。異なる値を設定入力するには、パラメーター 'fillvalue' を使用します。

このオプションは、データを書き込む前、または後のいずれかにヘッダー ファイルに書き込む場合に有効です。データが書き込まれた後にファイルにヘッダーを書き込む場合は、'r+' の権限を使用して fopen でファイルを開きます。

'machfmt'

データをファイルに書き込む形式を制御する文字ベクトルまたは string スカラー。一般的な値は、'ieee-le''ieee-be' で、それぞれリトル エンディアンとビッグ エンディアンです。利用可能な形式に関する一覧は、fopen のヘルプを参照してください。既定のマシン書式は、ローカルのマシン形式です。

'fillvalue'

欠損データの代わりに使用する値を指定する数字。'fillvalue' は、すべての欠損データに対し埋め込み値を指定する 1 つの数字、または各帯域に対し埋め込み値を指定する数字の 1 行帯域数列からなるベクトルです。この値は、データの大部分が記述されたときに、空白を埋めるために使用するものです。

インターリーブ法

interleave は、multibandwrite がデータをファイルに書き込む際の帯域のインターリーブ法を指定する文字ベクトルまたは string スカラーです。data が 2 次元の場合、multibandwrite は引数 interleave を無視します。以下の表は、サポートされている方法の一覧を示し、例のマルチ帯域ファイルを使用して、個々の方法を示します。

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

インターリーブ帯域のサポートされる方法は、以下のリストになります。

メソッド

指定値

説明

ライン挟み込みバンド並び

'bil'

個々の帯域からすべての行を書き込む

AAAAABBBBBCCCCC 
AAAAABBBBBCCCCC 
AAAAABBBBBCCCCC

画素挟み込みバンド並び

'bip'

個々の帯域から 1 つのピクセルを書き込む

ABCABCABCABCABC...

バンド順データ並び

'bsq'

各帯域をその全体に書き込む

AAAAA 
AAAAA 
AAAAA 
BBBBB 
BBBBB 
BBBBB 
CCCCC 
CCCCC 
CCCCC

メモ

これらの例を実行するためには、書き込み可能なフォルダーに移動しなければなりません。

例 1

1 回の呼び出しでファイルにすべてのデータ (ライン単位のインターリーブ) を書き込みます。

data = reshape(uint16(1:600), [10 20 3]);
multibandwrite(data,'data.bil','bil');

例 2

各整列に対して 1 回の呼び出しを使って、単一の帯域の整列したイメージを書き込むこれは、各帯域のサブセットが multibandwrite の各呼び出しで利用可能な場合のみ有効です。

numBands = 1;
dataDims = [1024 1024 numBands];
data = reshape(uint32(1:(1024 * 1024 * numBands)), dataDims);
 
for band = 1:numBands
   for row = 1:2
      for col = 1:2
 
         subsetRows = ((row - 1) * 512 + 1):(row * 512);
         subsetCols = ((col - 1) * 512 + 1):(col * 512);

         upperLeft = [subsetRows(1), subsetCols(1), band];
         multibandwrite(data(subsetRows, subsetCols, band), ...
                          'banddata.bsq', 'bsq', upperLeft, dataDims);

      end
   end
end

バージョン履歴

R2006a より前に導入