В отличной обработке блока вы делите матрицу изображений на прямоугольные блоки и выполняете операции обработки изображений на отдельных блоках. Блоки запускаются в левом верхнем углу и полностью покрывают изображение без перекрытия. Если блоки не соответствуют точно по изображению, то любые неполные блоки рассматриваются частичными блоками. Рисунок показывает 15 30 пиксельное изображение, разделенное на 4 8 пиксельные блоки. Правые края и базовые края имеют частичные блоки.
Изображение, разделенное на отличные блоки
Можно обработать частичные блоки, как, или можно добавить дополнение в изображение так, чтобы размер изображения был кратным размеру блока. Для получения дополнительной информации смотрите, Применяют Дополнение.
Чтобы выполнить отличные блочные операции, используйте 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);
Примечание
Много операций, что blockproc
может реализовать запуск намного быстрее, если расчеты выполняются на столбцах матрицы, а не прямоугольных блоках. Для получения информации об этом подходе смотрите Использование, По столбцам Обрабатывающее, чтобы Ускорить Скользящее Окружение или Отличные Блочные операции.
При обработке изображения в блоках можно хотеть добавить дополнение по двум причинам:
Обратиться к частичным блокам, когда размер изображения не является кратным размеру блока.
Создать перекрывающиеся границы с каждым блоком.
По умолчанию частичные блоки обрабатываются, как, без дополнительного дополнения. Установите 'PadPartialBlocks'
аргумент к true
заполнять правые края или базовые края изображения и делать блоки полноразмерными.
Используйте 'BorderSize'
аргумент, чтобы задать дополнительные строки и столбцы пикселей вне блока, значения которого учтены при обработке блока. Когда существует граница, blockproc
передает расширенный блок, включая границу, к заданной функции.
Например, эта команда процессы отображает A
в 4 8 пиксельных блоках, добавляя 1 2 пиксельная граница вокруг каждого блока и дополняющих нуль частичных блоков к полному размеру блока. Эта пиксельная граница расширяет каждый блок на один дополнительный пиксель на верхних и нижних ребрах и два пикселя вдоль левых и правых ребер во время обработки. Фигура изображает демонстрационное изображение A
и указывает в сером на пиксельную границу, добавленную к трем демонстрационным блокам.
B = blockproc(A,[4 8],myfun,'BorderSize',[1 2], ... 'PadPartialBlocks',true)
Отобразите A
Разделенный на отличные блоки с заданными границами
И дополнение частичных блоков и границы блока добавляют в полный размер изображения A
, как изображено на рисунке. Поскольку частичные блоки дополнены, оригинал 15 30 пиксельные увеличения изображений размера к следующему кратному размер блока, в этом случае, 16 32 пиксели. Поскольку 1 2 пиксельная граница добавляется к каждому блоку, блоки вдоль ребер изображений включают пиксели, которые расширяют вне границ оригинального изображения. Краевые элементы изображения вдоль ребер изображений увеличивают эффективный размер входной матрицы к 18 36 пикселям. Наиболее удаленный прямоугольник на рисунке формирует рисунок новых контуров изображения после того, как все дополнение будет добавлено.
По умолчанию, blockproc
заполняет изображение нулями. Если вам нужен другой тип дополнения, используйте 'PadMethod'
параметр blockproc
функция.