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 输入指定为字符向量或字符串标量。该函数将条带>定义为三维数组的第三个维度,如下图所示。

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

您可以使用 multibandread 的参数来指定读取操作的各个方面,例如读取哪些条带。有关详细信息,请参阅参数

X 是二维数组(如果只读取一个条带);否则是三维数组。默认情况下,X 返回为 double 数据类型的数组。使用 precision 参数可将数据映射到不同数据类型。

X = multibandread(...,subset1,subset2,subset3) 读取文件中数据的子集。您最多可以使用三个子集设置参数指定沿行、列和条带维度的数据子集。有关详细信息,请参阅子集设置参数

注意

除了 BSQ、BIL 和 BIP 文件,还可以使用 TIFF 文件格式存储多条带图像。在这种情况下,可使用 imread 函数导入数据。

参数

该表格介绍了 multibandread 所接受的参数。

参数

描述

filename

字符向量或字符串标量,包含要读取的文件的名称。

size

三元素整数向量包含 [height, width, N],其中

  • height 是总行数

  • width 是每行元素总数

  • N 是总条带数。

如果全部读取,那么它们就是数据的维度。

precision

指定要读取的数据格式的字符向量或字符串标量,例如 'uint8''double''integer*4'fread 函数支持的其他任何精度。

注意:还可以使用 precision 参数指定输出数据的格式。例如,若要读取 uint8 数据并输出一个 uint8 数组,可将精度指定为 'uint8=>uint8'(或 '*uint8')。若要读取 uint8 数据并向 MATLAB® 软件输出单精度数据,可将其指定为 'uint8=>single'。有关详细信息,请参阅 fread

offset

指定文件中第一个数据元素位置的标量(从 0 开始计算)。该值表示文件起始处到数据起始处的字节数。

interleave

存储数据的格式,指定为下列值之一:

  • 'bsq' - 条带顺序

  • 'bil'- 条带按行交错

  • 'bip'- 条带按像素交错

有关这些交错方法的详细信息,请参阅 multibandwrite 参考页。

byteorder

指定数据存储字节顺序(机器格式)的字符向量或字符串标量,例如:

  • 'ieee-le' - Little-endian

  • 'ieee-be' - Big-endian

关于支持格式的完整列表,请参阅 fopen

子集设置参数

最多可以指定三个子集设置参数。每个取子集参数都是一个三元素元胞数组 {dim,method,index},其中

参数

描述

dim

取子集时所沿的维度。指定为下列任意值之一:

  • 'Column'

  • 'Row'

  • 'Band'

method

子集设置方法。指定为下列值之一:

  • 'Direct'

  • 'Range'

如果忽略此子集元胞数组元素,multibandread 将使用 'Direct' 作为默认值。

index

如果 method'Direct'index 则是指定沿条带维度读取索引的向量。

如果 method'Range'index 则是三元素向量 dim,用来确定要沿 [start, increment, stop] 指定维度读取的范围和步长。如果 index 是二元素向量,multibandread 假设 increment 的值是 1

示例

示例 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]} )

使用条带按像素交错格式读取数据前两行和前两列。

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

使用条带按行交错格式读取数据。

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

删除本例中创建的文件。

delete(filename);

示例 2

从 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 之前推出