Запись данных с перемежением полос в файл
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) содержит данные для пикселя в [firstrow+I-1, firstcolumn+J-1] в (firstband+K-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 |
Примечание
Для успешного выполнения этих примеров необходимо находиться в папке, доступной для записи.
Запишите все данные (чередующиеся по строкам) в файл за один вызов.
data = reshape(uint16(1:600), [10 20 3]); multibandwrite(data,'data.bil','bil');
Напишите однополосное мозаичное изображение с одним вызовом для каждой плитки. Это полезно только в том случае, если подмножество каждого диапазона доступно при каждом вызове 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
fread | fwrite | multibandread