exponenta event banner

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) содержит данные для пикселя в [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...) записывает многолучевые данные в файл, указывая любую из этих необязательных пар параметр/значение.

Параметр

Описание

'precision'

Вектор символов или строковый скаляр, задающий форму и размер каждого элемента, записанного в файл. См. справку для fwrite для списка допустимых значений. Точность по умолчанию - это класс данных.

'offset'

Число байтов, пропускаемых перед первым элементом данных. Если файл еще не существует, multibandwrite записывает значения NULL ASCII для заполнения пространства. Чтобы указать другое значение заливки, используйте параметр 'fillvalue'.

Этот параметр полезен при записи заголовка в файл до или после записи данных. При записи заголовка в файл после записи данных откройте файл с помощью fopen использование 'r+' разрешение.

'machfmt'

Символьный вектор или строковый скаляр для управления форматом записи данных в файл. Типичные значения: 'ieee-le' для маленьких эндиан и 'ieee-be' для больших эндианов. См. справку для fopen для получения полного списка доступных форматов. По умолчанию используется формат локального компьютера.

'fillvalue'

Число, указывающее значение, используемое вместо отсутствующих данных. 'fillvalue' может быть одним числом, задающим значение заполнения для всех отсутствующих данных, или 1-by-Number-of-bands вектором чисел, задающим значение заполнения для каждой полосы. Это значение используется для заполнения пространства при записи данных порциями.

Методы чередования

interleave - вектор символов или строковый скаляр, определяющий способ multibandwrite перемежает полосы при записи данных в файл. Если data двумерный, multibandwrite игнорирует interleave аргумент. В следующей таблице перечислены поддерживаемые методы и этот пример многополосного файла используется для иллюстрации каждого метода.

Поддерживаемые способы перемежения полос включают в себя перечисленные ниже.

Метод

Указано как

Описание

Пример

Чередование диапазонов по линиям

'bil'

Запись всей строки из каждой области

AAAAABBBBBCCCCC 
AAAAABBBBBCCCCC 
AAAAABBBBBCCCCC

Перемежается по пикселям

'bip'

Запись пикселя из каждой полосы

ABCABCABCABCABC...

Диапазон - последовательный

'bsq'

Написать каждую группу целиком

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