Запись полосно-перемеженных данных в файл
multibandwrite(data,filename,interleave)
multibandwrite(data,filename,interleave,start,totalsize)
multibandwrite(...,param,value...)
multibandwrite(data,filename,interleave)
пишет data
, двух- или трехмерный числовой или логический массив, в двоичный файл, заданный как filename
. The 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