Скользящая операция окружения является операцией, которая выполняется пиксель за один раз со значением любого данного пикселя в выходном изображении, определяемом применением алгоритма к значениям окружения соответствующего входного пикселя. Окружение пикселя является некоторым набором пикселей, заданных их местоположениями относительно того пикселя, который называется центральным пикселем. Окружение является прямоугольным блоком, и когда вы перемещаетесь от одного элемента до следующего в матрице изображений, слайдов блока окружения в том же направлении. (Чтобы управлять на изображении блоком за один раз, а не пикселем за один раз, используют отличную функцию обработки блока. Смотрите, что Отличный Блок Обрабатывает для получения дополнительной информации.)
Следующий рисунок показывает блоки окружения для некоторых элементов в 6 5 матрица с 2 3 скольжением блоков. Центральный пиксель для каждого окружения отмечен точкой. Для получения информации о том, как определяется центральный пиксель, смотрите, Определяют Центральный Пиксель.
Блоки окружения в 6 5 матрице
Центральный пиксель является фактическим пикселем во входном изображении, обрабатываемом операцией. Если окружение имеет нечетное число строк и столбцов, центральный пиксель находится на самом деле в центре окружения. Если одна из размерностей имеет даже длину, центральный пиксель только слева от центра или чуть выше центра. Например, в окружении 2 на 2, центральный пиксель является верхним левым.
Для любого m
- n
окружение, центральный пиксель
floor(([m n]+1)/2)
В 2 3 блоке, показанном в предыдущей фигуре, центральный пиксель (1,2), или пиксель во втором столбце верхней строки окружения.
Выполнять скользящую операцию окружения,
Выберите один пиксель.
Определите окружение пикселя.
Примените функцию к значениям пикселей в окружении. Эта функция должна возвратить скаляр.
Найдите пиксель в выходном изображении, положение которого соответствует положению центрального пикселя во входном изображении. Установите этот выходной пиксель на значение, возвращенное функцией.
Повторите шаги 1 - 4 для каждого пикселя во входном изображении.
Например, функциональная сила быть операцией усреднения, которая суммирует значения пикселей окружения и затем делит результат на количество пикселей в окружении. Результатом этого вычисления является значение выходного пикселя.
Когда блок окружения скользит по изображению, некоторые пиксели в окружении могут отсутствовать, особенно если центральный пиксель находится на границе изображения. Например, если центральный пиксель является пикселем в левом верхнем углу изображения, окружения включают пиксели, которые не являются частью изображения.
Чтобы обработать эти окружения, двигая операции окружения заполняют границы изображения, обычно с 0. Другими словами, эти функции обрабатывают краевые элементы изображения путем предположения, что изображение окружается дополнительными строками и столбцами 0. Эти строки и столбцы не становятся частью выходного изображения и используются только в качестве частей окружений фактических пикселей в изображении.
Можно использовать скользящие операции окружения, чтобы реализовать много видов фильтрации операций. Одним примером скользящей соседней операции является свертка, которая используется, чтобы реализовать линейную фильтрацию. MATLAB® обеспечивает conv
и filter2
функции для выполнения свертки и тулбокса обеспечивают imfilter
функция. Смотрите то, Что Изображение, Просачивающееся Пространственная Область? для получения дополнительной информации об этих функциях.
В дополнение к свертке существует много других операций фильтрации, которые можно реализовать через скользящие окружения. Многие из этих операций нелинейны по своей природе. Например, можно реализовать скользящую операцию окружения, где значение выходного пикселя равно стандартному отклонению значений пикселей в окружении входного пикселя.
Чтобы реализовать множество скользящих операций окружения, используйте nlfilter
функция. nlfilter
берет в качестве входных параметров изображение, размер окружения и функцию, которая возвращает скаляр, и возвращает изображение одного размера с входным изображением. nlfilter
вычисляет значение каждого пикселя в выходном изображении путем передачи окружения соответствующего входного пикселя функции.
Много операций, что nlfilter
может реализовать запуск намного быстрее, если расчеты выполняются на столбцах матрицы, а не прямоугольных окружениях. Для получения информации об этом подходе смотрите Использование, По столбцам Обрабатывающее, чтобы Ускорить Скользящее Окружение или Отличные Блочные операции.
Например, этот код вычисляет каждый выходной пиксель путем взятия стандартного отклонения значений 3х3 окружения входного пикселя (то есть, сам пиксель и его восемь непрерывных соседей).
I = imread('tire.tif'); I2 = nlfilter(I,[3 3],'std2');
Можно также записать код, чтобы реализовать определенную функцию, и затем использовать эту функцию с nlfilter
. Например, эта команда обрабатывает матричный I
в 2 3 окружениях с функцией под названием myfun.m
. Синтаксис @myfun
пример указателя на функцию.
I2 = nlfilter(I,[2 3],@myfun);
Если вы предпочитаете не писать код, чтобы реализовать определенную функцию, можно использовать анонимную функцию вместо этого. Этот пример преобразует изображение, чтобы классифицировать double
потому что функция квадратного корня не задана для uint8
тип данных.
I = im2double(imread('tire.tif'));
f = @(x) sqrt(min(x(:)));
I2 = nlfilter(I,[2 2],f);
(Для получения дополнительной информации об указателях на функцию см. Создание указателя на функцию (MATLAB). Для получения дополнительной информации об анонимных функциях, см. Анонимные функции (MATLAB).)
Следующий пример использует nlfilter
установить каждый пиксель на максимальное значение в его 3х3 окружении.
Этот пример только предназначается, чтобы проиллюстрировать использование nlfilter
. Для более быстрого способа выполнить эту локальную максимальную операцию, используйте imdilate
.
I = imread('tire.tif');
f = @(x) max(x(:));
I2 = nlfilter(I,[3 3],f);
imshow(I);
figure, imshow(I2);
Каждый набор выходного пикселя к максимальному входному значению окружения