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, an 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 для чтения и записи в конкретный формат файла изображения. Для получения дополнительной информации смотрите Выполнение обработки блоков для файлов изображений в неподдерживаемых форматах.

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

Обработанное изображение, возвращенное как числовой массив.

Подробнее о

свернуть все

Блочный Struct

Блочный struct является структурой MATLAB, которая содержит данные блока и другую информацию о блоке. Поля в struct блока:

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

Совет

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

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

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

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

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

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

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

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

Введенный в R2009b