Отличная обработка блока

В отличной обработке блока вы делите матрицу на m-by-n разделы. Эти разделы или отличные блоки, накладывают матрицу изображений, запускающуюся в левом верхнем углу без перекрытия. Если блоки не соответствуют точно по изображению, можно добавить дополнение в изображение или работать с частичными блоками на правых краях или базовых краях изображения. Следующие данные показывают 15 30 матрица, разделенная на 4 8 блоки. Правые края и базовые края имеют частичные блоки. Можно обработать частичные блоки, как, или можно заполнить изображение так, чтобы получившийся размер был 16 32. Для получения дополнительной информации смотрите, Применяют Дополнение. (Чтобы управлять на изображении пикселем за один раз, а не блоком за один раз, используют скользящую функцию обработки окружения. Для получения дополнительной информации смотрите Скользящие Операции Окружения.)

Изображение, разделенное на отличные блоки

Реализуйте Обработку Блока Используя Функцию blockproc

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

Например, команды ниже процесса отображают I в 25 25 блоках с функциональным myfun. В этом случае функция myfun изменяет размер блоков, чтобы сделать миниатюру. (Для получения дополнительной информации об указателях на функцию, см. Создание указателя на функцию (MATLAB). Для получения дополнительной информации об анонимных функциях, см. Анонимные функции (MATLAB).)

myfun = @(block_struct) imresize(block_struct.data,0.15);
I = imread('tire.tif');
I2 = blockproc(I,[25 25],myfun);

Примечание

Должный блокировать краевые эффекты, изменяя размер изображения с помощью blockproc не приводит к тем же результатам как изменение размеров целого изображения целиком.

Пример ниже использует функцию blockproc, чтобы установить каждый пиксель в каждом 32 32 блок изображения к среднему значению элементов в том блоке. Анонимная функция вычисляет среднее значение блока, и затем умножает результат на матрицу из единиц, так, чтобы выходной блок был одного размера как входной блок. В результате выходное изображение одного размера как входное изображение. Функция blockproc не требует, чтобы изображения были одного размера. Если это - результат, вы хотите, убедитесь, что функция, которую вы задаете, возвращает блоки соответствующего размера:

myfun = @(block_struct) ...
   uint8(mean2(block_struct.data)*...
   ones(size(block_struct.data)));
I2 = blockproc('moon.tif',[32 32],myfun);
figure;
imshow('moon.tif');
figure;
imshow(I2,[]);

Примечание

Много операций, что blockproc может реализовать выполнение намного быстрее, если вычисления выполняются на столбцах матрицы, а не прямоугольных блоках. Для получения информации об этом подходе смотрите Использование, По столбцам Обрабатывающее, чтобы Ускорить Скользящее Окружение или Отличные Блочные операции.

Примените дополнение

При обработке изображения в блоках можно хотеть добавить дополнение по двум причинам:

  • Решать проблему частичных блоков

  • Создать перекрывающиеся границы

Как описано в Отличной Обработке Блока, если блоки не соответствуют точно по изображению, частичные блоки происходят вдоль базовых краев и правых краев изображения. По умолчанию эти частичные блоки обрабатываются, как, без дополнительного дополнения. Установите параметр 'PadPartialBlocks' на true, чтобы заполнить правые края или базовые края изображения и сделать блоки полноразмерными.

Можно также добавить границы в каждый блок. Используйте параметр 'BorderSize', чтобы задать дополнительные строки и столбцы пикселей вне блока, значения которого учтены при обработке блока. Когда существует граница, blockproc передает расширенный блок, включая границу, к заданной функции.

Изображение, разделенное на отличные блоки с заданными границами

Чтобы обработать блоки в фигуре выше с указателем на функцию myfun, вызов:

B = blockproc(A,[4 8],myfun,'BorderSize',[1 2], ...
   'PadPartialBlocks',true)

И дополнение частичных блоков и границы блока добавляют к полному размеру изображения, как вы видите в фигуре. Оригинал 15 30 матрица становится 16 32 матрица из-за дополнения частичных блоков. Кроме того, каждый блок в изображении обрабатывается с 1 2 пиксельная граница — один дополнительный пиксель на верхних и нижних ребрах и два пикселя вдоль левых и правых ребер. Блоки вдоль ребер изображений, расширенных, чтобы включать границу, расширяют вне границ оригинального изображения. Краевые элементы изображения вдоль ребер изображений увеличивают итоговый размер входной матрицы к 18 36. Наиболее удаленный прямоугольник в фигуре формирует рисунок новых контуров изображения после того, как все дополнение было добавлено.

По умолчанию blockproc заполняет изображение нулями. Если вам нужен другой тип дополнения, используйте функцию blockproc параметр 'PadMethod'.