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

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

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

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

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

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

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

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

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