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