Выполнение скользящего окружения и отличных блочных операций по столбцам, если это возможно, может уменьшать время выполнения, требуемое обработать изображение.
Например, предположите операцию, которую вы выполняете, включает вычисление среднего значения каждого блока. Этот расчет намного быстрее, если вы сначала перестраиваете блоки в столбцы, потому что можно вычислить среднее значение каждого столбца с одним вызовом mean
функция, вместо того, чтобы вызвать mean
для каждого блока индивидуально.
Чтобы использовать обработку столбца, используйте colfilt
функция. Эта функция
Изменяет каждое скольжение или отличный блок матрицы изображений в столбец во временной матрице
Передает временную матрицу функции, которую вы задаете
Перестраивает получившуюся матрицу назад в исходную форму
Для скользящей операции окружения, colfilt
создает временную матрицу, которая имеет отдельный столбец для каждого пикселя в оригинальном изображении. Столбец, соответствующий данному пикселю, содержит значения окружения того пикселя от оригинального изображения.
Следующая фигура иллюстрирует этот процесс. В этом рисунке 6 5 матрица изображений обрабатывается в 2 3 окружениях. colfilt
создает один столбец для каждого пикселя в изображении, таким образом, существует в общей сложности 30 столбцов во временной матрице. Столбец каждого пикселя содержит значение пикселей в его окружении, таким образом, существует шесть строк. colfilt
нулевые клавиатуры входное изображение по мере необходимости. Например, окружение верхнего левого пикселя в фигуре имеет двух соседей с нулевым знаком, должных обнулять дополнение.
colfilt Создает Временную Матрицу для Скольжения Окружения
Временная матрица передается функции, которая должна возвратить одно значение для каждого столбца. (Много функций MATLAB® прокладывают себе путь, например, mean
медиана
станд
сумма
, и т.д.), получившиеся значения затем присвоены соответствующим пикселям в выходном изображении.
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
- n
, и изображением является mm
- nn
, размером временной матрицы является (m*n)
- (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
.