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