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]。firstrow 和 firstcolumn 指定左上方图像像素的位置。firstband 给出要写入的第一个波段的索引。例如,data(I,J,K) 包含了第 (firstband+K-1) 个波段中 [firstrow+I-1, firstcolumn+J-1] 位置像素的数据。
totalsize 是一个 1×3 数组,[totalrows,totalcolumns,totalbands],它指定要写入文件的数据的完整三维大小。
注意
在该语法中,可以多次调用 multibandwrite 将所有数据写入文件。在第一次调用时,multibandwrite 使用数据子集以外所有值的填充值写入整个文件。在接下来的每次调用中,multibandwrite 使用 data 中的数据子集的值覆盖这些填充值。在写文件过程中,参数 filename、interleave、offset 和 totalsize 必须保持不变。
multibandwrite(...,param,value...) 根据指定的可选参数/值对将多波段数据写入文件。
参数 | 描述 |
|---|---|
| 指定写入文件的每个元素的形式和大小的字符向量或字符串标量。请参阅 |
| 在第一个数据元素前跳过的字节数。如果文件不存在, 如果要在写入数据之前或之后写入文件头,该选项将非常有用。若要在写入数据后再写入文件头,需通过 |
| 控制数据写入文件时所用格式的字符向量或字符串标量。典型值有 |
| 一个指定用来填充缺失数据的值的数字。 |
交叉方法
interleave 是指定 multibandwrite 在将数据写入文件时如何交错波段的字符向量或字符串标量。如果 data 是二维的,multibandwrite 会忽略 interleave 参量。下表列出了支持的方法并用多波段文件示例对每种方法进行了解释。

交错波段支持的方法如下表所列。
方法 | 指定为 | 描述 | 示例 |
|---|---|---|---|
波段按行交错 |
| 从每个波段写入整行 | AAAAABBBBBCCCCC AAAAABBBBBCCCCC AAAAABBBBBCCCCC |
波段按像素交错 |
| 从每个波段写入一个像素 | ABCABCABCABCABC... |
波段顺序 |
| 整体写入每个波段 | 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 之前推出
另请参阅
multibandread | fwrite | fread