Использование, по столбцам обрабатывающее, чтобы ускорить скользящее окружение или отличные блочные операции

Выполнение скользящего окружения и отличных блочных операций по столбцам, если это возможно, может уменьшать время выполнения, требуемое обработать изображение.

Например, предположите операцию, которую вы выполняете, включает вычисление среднего значения каждого блока. Это вычисление намного быстрее, если вы сначала перестраиваете блоки в столбцы, потому что можно вычислить среднее значение каждого столбца с одним вызовом функции mean, вместо того, чтобы вызвать mean для каждого блока индивидуально.

Чтобы использовать обработку столбца, используйте функцию colfilt. Эта функция

  1. Изменяет каждое скольжение или отличный блок матрицы изображений в столбец во временной матрице

  2. Передает временную матрицу функции, которую вы задаете

  3. Перестраивает получившуюся матрицу назад в исходную форму

Используя обработку столбца со скользящими операциями окружения

Для скользящей операции окружения 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.