exponenta event banner

blockproc

Обработка отдельных блоков для изображения

Описание

пример

B = blockproc(A,[m n],fun) обрабатывает изображение A применяя функцию fun каждому отдельному блоку размера [m n] и объединяют результаты в выходное изображение, B.

пример

B = blockproc(src_filename,[m n],fun) обрабатывает изображение с именем файла src_filenameсчитывание и обработку по одному блоку за раз. Этот синтаксис полезен для обработки больших изображений.

B = blockproc(adapter,[m n],fun) обрабатывает исходный образ, указанный adapterодин ImageAdapter объект. Используйте этот синтаксис, если необходим пользовательский API для чтения и записи в определенный формат файла изображения.

пример

blockproc(___,Name,Value) использует аргументы пары имя-значение для управления различными аспектами поведения блока.

Примеры

свернуть все

Чтение изображения в рабочую область.

I = imread('pears.png');

Создание функции обработки блоков.

fun = @(block_struct) imresize(block_struct.data,0.15);

Обработка изображения поблочно.

I2 = blockproc(I,[100 100],fun);

Отображение исходного изображения и обработанного изображения.

figure;
imshow(I);

Figure contains an axes. The axes contains an object of type image.

figure;
imshow(I2);

Figure contains an axes. The axes contains an object of type image.

Создание функции обработки блоков.

fun = @(block_struct) ...
   std2(block_struct.data) * ones(size(block_struct.data));

Выполните операцию обработки блоков, указав входное изображение по имени файла.

I2 = blockproc('moon.tif',[32 32],fun);

Отображение исходного изображения и обработанной версии.

figure;
imshow('moon.tif');

Figure contains an axes. The axes contains an object of type image.

figure;
imshow(I2,[]);

Figure contains an axes. The axes contains an object of type image.

Чтение изображения в рабочую область.

I = imread('peppers.png');

Создание функции обработки блоков.

fun = @(block_struct) block_struct.data(:,:,[2 1 3]);

Выполните операцию обработки блоков.

blockproc(I,[200 200],fun,'Destination','grb_peppers.tif');

Отображение исходного изображения и обработанного изображения.

figure;
imshow('peppers.png');

Figure contains an axes. The axes contains an object of type image.

figure;
imshow('grb_peppers.tif');

Figure contains an axes. The axes contains an object of type image.

Примечание.Для выполнения этого примера необходимо заменить 'largeImage.tif' с именем файла.

Создание функции обработки блоков.

fun = @(block_struct) block_struct.data;

Преобразование изображения TIFF в новое изображение JPEG2000. Заменить 'largeImage.tif' с именем фактического файла изображения.

blockproc('largeImage.tif',[1024 1024],fun,'Destination','New.jp2');

Входные аргументы

свернуть все

Образ для обработки, заданный как числовой массив.

Имя исходного файла, указанное как вектор символа или скаляр строки. Файлы должны иметь один из этих типов файлов и иметь имя с одним из перечисленных расширений.

  • TIFF (* .tif, * .tiff)

  • JPEG2000 (*.jp2, *.jpf, *.jpx, *.j2c, *.j2k)

Типы данных: char | string

Адаптер образа, указанный как ImageAdapter объект. Один ImageAdapter является определяемым пользователем классом, предоставляющим blockproc с общим API для чтения и записи в определенный формат файла изображения. Дополнительные сведения см. в разделе Выполнение обработки блоков для файлов изображений в неподдерживаемых форматах.

Размер блока, заданный как 2-элементный вектор. m - количество строк и n - количество столбцов в блоке.

Дескриптор функции, указанный как дескриптор. Функция должна принимать block_struct в качестве входных данных и возвращать массив, вектор или скаляр. Если fun возвращает пустое значение, затем blockproc не генерирует никаких выходных данных и возвращает пустые после обработки всех блоков.

Дополнительные сведения об дескрипторах функций см. в разделе Создание дескриптора функции.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'BorderSize',[8 4]

Назначение для вывода, указанное как пара, разделенная запятыми, состоящая из 'Destination' и одно из следующих. При указании 'Destination' аргумент, blockproc не возвращает обработанное изображение в качестве выходного аргумента, а вместо этого записывает выходные данные в целевой файл.

  • Вектор символов или строковый скаляр с именем целевого файла. Файлы должны иметь один из этих типов файлов и иметь имя с одним из перечисленных расширений.

    • TIFF (* .tif, * .tiff)

    • JPEG2000 (*.jp2, *.j2c, *.j2k)

    Если файл с таким именем существует, он перезаписывается.

  • Один ImageAdapter , который обеспечивает общий API для чтения и записи в конкретный формат файла изображения. Дополнительные сведения см. в разделе Выполнение обработки блоков для файлов изображений в неподдерживаемых форматах.

'Destination' аргумент полезен, если выход слишком велик, чтобы поместиться в память. Он обеспечивает рабочий процесс для обработки изображений типа «файл-файл» для произвольно больших изображений.

Примечание

Невозможно запросить выходной аргумент при указании 'Destination' аргумент.

Количество пикселов границы, добавляемых к каждому блоку, указанное как пара, разделенная запятыми, состоящая из 'BorderSize' и 2-элементный вектор положительных целых чисел вида [v h]. Функция добавляет v строки над и под каждым блоком и h колонны слева и справа от каждого блока. Размер каждого результирующего блока:

[m+2*v, n+2*h]

По умолчанию функция автоматически удаляет границу из результата fun. См. раздел TrimBorder для получения дополнительной информации.

Панели функций блокируют границы, выходящие за границы изображения с нулями.

Частичные блоки колодок, чтобы сделать их полноразмерными, заданными как разделенная запятыми пара, состоящая из 'PadPartialBlocks' и false или true. Частичные блоки возникают, когда размер изображения не делится точно на размер блока. Если они существуют, то частичные блоки располагаются вдоль правого и нижнего края изображения.

Если установлено значение true, blockproc колодки частичные блоки, чтобы сделать их полноразмерными mоколо-n блоки. Значение по умолчанию: false, что означает, что функция не заполняет частичные блоки, а обрабатывает их как есть. blockproc использует нули для заполнения частичных блоков при необходимости.

Метод, используемый для наложения границы изображения, указанной как разделенная запятыми пара, состоящая из 'PadMethod' и одно из следующих.

СтоимостьОписание
'replicate'Повторите элементы границы.
'symmetric'Изображение подушки с зеркальными отражениями самого себя.
числовой скалярИзображение площадки со скалярным значением. По умолчанию граница изображения заполняется значением 0.

Типы данных: char | string

Удаление пикселов границы из вывода пользовательской функции, указанной как разделенная запятыми пара, состоящая из 'TrimBorder' и true или false. Если установлено значение true, blockproc функция удаляет пикселы границы из вывода пользовательской функции, fun. Функция удаляет v строки в верхней и нижней части выходных данных fun, и h колонны с левого и правого края. BorderSize аргумент определяет v и h.

Используйте параллельную обработку, указанную как разделенная запятыми пара, состоящая из 'UseParallel' и false или true. Если установлены Toolbox™ Parallel Computing, если установлено значение trueMATLAB ® автоматически открывает параллельный пул работников на локальном компьютере .blockproc выполняет вычисления для всех доступных работников. Дополнительные сведения см. в разделе Параллельная обработка блоков в больших файлах изображений.

Панель ожидания дисплея, заданная как разделенная запятыми пара, состоящая из 'DisplayWaitbar' и true или false. Если установлено значение true, blockproc отображает строку ожидания, указывающую ход выполнения длительных операций. Предотвратить blockproc из отображения панели ожидания, установка DisplayWaitbar кому false.

Выходные аргументы

свернуть все

Обработанный образ, возвращенный в виде числового массива.

Подробнее

свернуть все

Структура блока

Структура блока - это структура MATLAB, которая содержит данные блока и другую информацию о блоке. Поля в структуре блока:

ОбластьОписание
border2-элементный вектор вида [v h]. border указывает размер вертикального и горизонтального заполнения вокруг блока данных. См. раздел BorderSize для получения дополнительной информации.
blockSize2-элементный вектор вида [rows cols]. blockSize указывает размер данных блока. Если граница указана, размер не включает пикселы границы.
datamоколо-n или mоколо-nоколо-p массив блочных данных.
imageSize2-элементный вектор вида [rows cols]. imageSize указывает полный размер входного изображения.
location2-элементный вектор вида [row col]. location в поле указывается позиция первого пикселя (минимальная строка, минимальный столбец) данных блока во входном изображении. Если граница была задана, местоположение относится к первому пикселю данных дискретного блока, а не к добавленным пикселям границы.

Совет

  • Выбор подходящего размера блока может значительно повысить производительность. Дополнительные сведения см. в разделе Размер и производительность блока.

  • Если выходное изображение B слишком большой, чтобы поместиться в память, а затем опустить выходной аргумент и вместо этого использовать Destination аргумент пары имя-значение для записи выходных данных в файл.

  • blockproc может читать изображения BigTIFF, но имеет ограниченную поддержку записи изображений BigTIFF в файл. Если вы записываете изображение в файл, то blockproc автоматически выбирает тип файла в соответствии с размером файла. Если изображение меньше или равно 4,0 Гб, то blockproc сохраняет изображение как стандартное изображение TIFF. Если размер файла превышает 4,0 Гб, то blockproc сохраняет изображение как изображение BigTIFF.

    blockproc не предоставляет аргумент, позволяющий указать тип файла BigTIFF, если размер файла меньше или равен 4,0 Гб. Если требуется записать небольшое изображение в виде файла BigTIFF, укажите пользовательский адаптер изображения с помощью adapter аргумент. Дополнительные сведения см. в разделах TIFF, BigTIFF и BLKPROC.

  • Чтобы определить, является ли записанный файл TIFF стандартным TIFF или BigTIFF, запросите подпись формата изображения с помощью imfinfo функция:

    tiffinfo = imfinfo(Destination);
    tiffformat = tiffinfo.FormatSignature

    Если последнее ненулевое значение tiffformat равно 42, то файл находится в стандартном формате TIFF. Если последнее ненулевое значение равно 43, то файл имеет формат BigTIFF.

Расширенные возможности

Представлен в R2009b