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