blockproc

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

Синтаксис

B = blockproc(A,[m n],fun)
B = blockproc(src_filename,[m n],fun)
B = blockproc(adapter,[m n],fun)
blockproc(___,Name,Value)

Описание

пример

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.

пример

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;
imshow(I2);

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

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

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

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

Отобразите оригинальное изображение и обработанную версию.

figure;
imshow('moon.tif');

figure;
imshow(I2,[]);

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

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;
imshow('grb_peppers.tif');

Примечание: Чтобы запустить этот пример, необходимо заменить '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

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

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

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

Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB).

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

Место назначения для вывода, заданного как пара, разделенная запятой, состоящая из 'Destination' и одно из следующих.

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

    • TIFF (*.tif, *.tiff)

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

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

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

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

Примечание

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

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

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

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

Функция заполняет блоки расширением границ вне ребер изображений с нулями.

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

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

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

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

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

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

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

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

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

свернуть все

Выходная матрица, возвращенная как числовая матрица.

Больше о

свернуть все

Блокируйте Struct

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

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

Советы

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

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

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

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