Выполнение скользящего окружения и отличных блочных операций по столбцам, если это возможно, может уменьшать время выполнения, требуемое обработать изображение.
Например, предположите операцию, которую вы выполняете, включает вычисление среднего значения каждого блока. Это вычисление намного быстрее, если вы сначала перестраиваете блоки в столбцы, потому что можно вычислить среднее значение каждого столбца с одним вызовом функции mean
, вместо того, чтобы вызвать mean
для каждого блока индивидуально.
Чтобы использовать обработку столбца, используйте функцию colfilt
. Эта функция
Изменяет каждое скольжение или отличный блок матрицы изображений в столбец во временной матрице
Передает временную матрицу функции, которую вы задаете
Перестраивает получившуюся матрицу назад в исходную форму
Для скользящей операции окружения colfilt
создает временную матрицу, которая имеет отдельный столбец для каждого пикселя в оригинальном изображении. Столбец, соответствующий данному пикселю, содержит значения окружения того пикселя от оригинального изображения.
Следующая фигура иллюстрирует этот процесс. В этой фигуре 6 5 матрица изображений обрабатывается в 2 3 окружениях. colfilt
создает один столбец для каждого пикселя в изображении, таким образом, существует в общей сложности 30 столбцов во временной матрице. Столбец каждого пикселя содержит значение пикселей в его окружении, таким образом, существует шесть строк. нулевые клавиатуры colfilt
входное изображение по мере необходимости. Например, окружение верхнего левого пикселя в фигуре имеет двух соседей с нулевым знаком, должных обнулять дополнение.
colfilt Создает Временную Матрицу для Скольжения Окружения
Временная матрица передается функции, которая должна возвратить одно значение для каждого столбца. (Много функций MATLAB® прокладывают себе путь, например, mean
, median
, std
, sum
, и т.д.), получившиеся значения затем присвоены соответствующим пикселям в выходном изображении.
colfilt
может привести к тем же результатам как nlfilter
с более быстрым временем выполнения; однако, это может использовать больше памяти. Пример ниже устанавливает каждый выходной пиксель на максимальное значение в окружении входного пикселя, приводя к тому же результату как пример nlfilter
, показанный в Реализации Линейной и Нелинейной Фильтрации как Скользящие Операции Окружения.
I2 = colfilt(I,[3 3],'sliding',@max);
Для отличной блочной операции colfilt
создает временную матрицу путем реорганизации каждого блока в изображении в столбец. colfilt
заполняет оригинальное изображение 0, при необходимости, прежде, чем создать временную матрицу.
Следующая фигура иллюстрирует этот процесс. 6 16 матрица изображений обрабатывается в 4 6 блоках. colfilt
первые нулевые клавиатуры изображение, чтобы сделать размер 8 18 (шесть 4 6 блоки), и затем перестраивает блоки в шесть столбцов 24 элементов каждый.
colfilt Создает Временную Матрицу для Отличной Блочной операции
После реорганизации изображения во временную матрицу colfilt
передает эту матрицу функции. Функция должна возвратить матрицу, одного размера как временная матрица. Если размером блока является m
-by-n
, и изображением является mm
-by-nn
, размером временной матрицы является (m*n)
-by-(ceil(mm/m)*ceil(nn/n))
. После функциональных процессов временная матрица вывод перестроен в форму матрицы оригинального изображения.
Этот пример устанавливает все пиксели в каждом 8 8 блок изображения к среднему пиксельному значению для блока.
I = im2double(imread('tire.tif')); f = @(x) ones(64,1)*mean(x); I2 = colfilt(I,[8 8],'distinct',f);
Анонимная функция в примере вычисляет среднее значение блока и затем умножает результат на вектор из единиц, так, чтобы выходной блок был одного размера как входной блок. В результате выходное изображение одного размера как входное изображение.
Можно использовать colfilt
, чтобы реализовать многие из тех же отличных блочных операций, которые выполняет blockproc
. Однако colfilt
имеет определенные ограничения, которые не делает blockproc
:
Выходное изображение должно быть одного размера как входное изображение.
Блоки не могут наложиться.
Для ситуаций, которые не удовлетворяют эти ограничения, используйте blockproc
.