Main Content

multibandwrite

将波段交错数据写入文件

语法

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

说明

multibandwrite(data,filename,interleave) 将二维或三维数字或逻辑数组 data 写入 filename 所指定的二进制文件。filename 指定为字符向量或字符串标量。data 第三维的长度决定了写入文件的波段数。波段以 interleave 指定的格式写入文件。关于该参量的详细信息,请参阅交叉方法

如果文件名已存在,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],它指定要写入文件的数据的完整三维大小。

注意

在该语法中,可以多次调用 multibandwrite 将所有数据写入文件。在第一次调用时,multibandwrite 使用数据子集以外所有值的填充值写入整个文件。在接下来的每次调用中,multibandwrite 使用 data 中的数据子集的值覆盖这些填充值。在写文件过程中,参数 filenameinterleaveoffsettotalsize 必须保持不变。

multibandwrite(...,param,value...) 根据指定的可选参数/值对将多波段数据写入文件。

参数

描述

'precision'

指定写入文件的每个元素的形式和大小的字符向量或字符串标量。请参阅 fwrite 帮助以查看有效值的列表。默认精度是数据的类。

'offset'

在第一个数据元素前跳过的字节数。如果文件不存在,multibandwrite 将写入 ASCII 空值来填充空白。要指定其他的填充值,使用 'fillvalue' 参数。

如果要在写入数据之前或之后写入文件头,该选项将非常有用。若要在写入数据后再写入文件头,需通过 fopen 函数并使用 'r+' 权限来打开文件。

'machfmt'

控制数据写入文件时所用格式的字符向量或字符串标量。典型值有 'ieee-le'(代表 little endian)和 'ieee-be'(代表 big endian)。请参阅 fopen 帮助以查看可用格式的完整列表。默认机器格式是本机格式。

'fillvalue'

一个指定用来填充缺失数据的值的数字。'fillvalue' 可以是单个数字,用来指定所有缺失数据的填充值,也可以是一个 1×N(N 代表波段数)的数字向量,用来指定每个波段的填充值。该值用于填充按块写入数据时出现的空白。

交叉方法

interleave 是指定 multibandwrite 在将数据写入文件时如何交错波段的字符向量或字符串标量。如果 data 是二维的,multibandwrite 会忽略 interleave 参量。下表列出了支持的方法并用多波段文件示例对每种方法进行了解释。

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

交错波段支持的方法如下表所列。

方法

指定为

描述

示例

波段按行交错

'bil'

从每个波段写入整行

AAAAABBBBBCCCCC 
AAAAABBBBBCCCCC 
AAAAABBBBBCCCCC

波段按像素交错

'bip'

从每个波段写入一个像素

ABCABCABCABCABC...

波段顺序

'bsq'

整体写入每个波段

AAAAA 
AAAAA 
AAAAA 
BBBBB 
BBBBB 
BBBBB 
CCCCC 
CCCCC 
CCCCC

示例

注意

要成功运行这些示例,必须在可写文件夹中。

示例 1

在一次调用中将所有数据写入文件(按行交错)。

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

示例 2

写入一个单波段分块图,每次调用一个图块。要使用此方法,每次调用 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 之前推出

另请参阅

| |