Оператор Превитта
Обнаружение функций |
---|
Обнаружение края |
Обнаружение углов |
Обнаружение больших двоичных объектов |
Обнаружение гребня |
Преобразование Хафа |
Тензор структуры |
Обнаружение аффинных инвариантных функций |
Описание функции |
Масштабировать пространство |
Оператор Превитта используется при обработке изображений , особенно в алгоритмах обнаружения краев . Технически это дискретный оператор дифференцирования , вычисляющий аппроксимацию градиента функции интенсивности изображения. В каждой точке изображения результатом работы оператора Прюитта является либо соответствующий вектор градиента, либо норма этого вектора. Оператор Превитта основан на свертке изображения с помощью небольшого разделимого целочисленного фильтра в горизонтальном и вертикальном направлениях и поэтому относительно недорог с точки зрения вычислений, таких как Собел и Кайяли. [1] операторы. С другой стороны, градиентная аппроксимация, которую он производит, является относительно грубой, особенно для высокочастотных изменений изображения. Оператор Превитта был разработан Джудит М.С. Превитт . [2]
Упрощенное описание
[ редактировать ]Проще говоря, оператор вычисляет градиент интенсивности изображения в каждой точке, определяя направление максимально возможного увеличения от светлого к темному и скорость изменения в этом направлении. Таким образом, результат показывает, насколько «резко» или «плавно» изображение меняется в этой точке и, следовательно, насколько вероятно, что часть изображения представляет собой край , а также то, как этот край может быть ориентирован. На практике расчет величины (вероятности края) более надежен и легче интерпретируется, чем расчет направления.
Математически градиент функции двух переменных (здесь функция интенсивности изображения) представляет собой в каждой точке изображения двумерный вектор с компонентами, определяемыми производными в горизонтальном и вертикальном направлениях. В каждой точке изображения вектор градиента указывает в направлении максимально возможного увеличения интенсивности, а длина вектора градиента соответствует скорости изменения в этом направлении. Это означает, что результатом действия оператора Превитта в точке изображения, которая находится в области постоянной интенсивности изображения, является нулевой вектор, а в точке на краю — вектор, указывающий через край, от более темных к более ярким значениям.
Формулировка
[ редактировать ]Математически оператор использует два ядра 3×3, которые свернуты с исходным изображением для вычисления аппроксимации производных — одно для горизонтальных изменений, а другое для вертикальных. Если мы определим в качестве исходного изображения и и представляют собой два изображения, которые в каждой точке содержат приближения горизонтальной и вертикальной производной, последние вычисляются как:
где здесь обозначает двумерную операцию свертки .
Поскольку ядра Прюитта можно разложить как произведения усреднения и дифференцированияядро, они вычисляют градиент со сглаживанием. Следовательно, это отделяемый фильтр . Например, можно записать как
Координата x определяется здесь как увеличение в направлении «влево», а координата y определяется как увеличение в направлении «вверх». В каждой точке изображения полученные аппроксимации градиента можно объединить, чтобы получить величину градиента, используя:
Используя эту информацию, мы также можем рассчитать направление градиента:
где, например, Θ равно 0 для вертикального края, который темнее с правой стороны.
Пример
[ редактировать ]Пример кода
[ редактировать ]% MATLAB Code | Prewitt Operator from Scratch % Read Input Image input_image = imread('[name of input image file].[file format]'); % Displaying Input Image input_image = uint8(input_image); figure, imshow(input_image); title('Input Image'); % Convert the truecolor RGB image to the grayscale image input_image = rgb2gray(input_image); % Convert the image to double input_image = double(input_image); % Pre-allocate the filtered_image matrix with zeros filtered_image = zeros(size(input_image)); % Prewitt Operator Mask Mx = [-1 0 1; -1 0 1; -1 0 1]; My = [-1 -1 -1; 0 0 0; 1 1 1]; % Edge Detection Process % When i = 1 and j = 1, then filtered_image pixel % position will be filtered_image(2, 2) % The mask is of 3x3, so we need to traverse % to filtered_image(size(input_image, 1) - 2 %, size(input_image, 2) - 2) % Thus we are not considering the borders. for i = 1:size(input_image, 1) - 2 for j = 1:size(input_image, 2) - 2 % Gradient approximations Gx = sum(sum(Mx.*input_image(i:i+2, j:j+2))); Gy = sum(sum(My.*input_image(i:i+2, j:j+2))); % Calculate magnitude of vector filtered_image(i+1, j+1) = sqrt(Gx.^2 + Gy.^2); endend% Displaying Filtered Image filtered_image = uint8(filtered_image); figure, imshow(filtered_image); title('Filtered Image'); % Define a threshold value thresholdValue = 100; % varies between [0 255] output_image = max(filtered_image, thresholdValue); output_image(output_image == round(thresholdValue)) = 0; % Displaying Output Image output_image = im2bw(output_image); figure, imshow(output_image); title('Edge Detected Image');
См. также
[ редактировать ]- Собель оператор
- Оператор Лапласа
- Робертс Кросс
- Обнаружение края
- Обнаружение функций (компьютерное зрение)
- Цифровая обработка изображений
- Компьютерное зрение
- Извлечение признаков
- Градиент изображения
- Производное изображения
- Фильтр Габора
Ссылки
[ редактировать ]- ^ Дим, Жюль Р.; Такамура, Тамио (11 декабря 2013 г.). «Альтернативный подход к классификации спутниковых облаков: применение краевого градиента» . Достижения метеорологии . 2013 : 1–8. дои : 10.1155/2013/584816 . ISSN 1687-9309 .
- ^ Превитт, JMS (1970). «Улучшение и извлечение объектов». Обработка изображений и психопикторика . Академическая пресса.
- ^ Компьютерщики для фанатов (28 июля 2023 г.). « MATLAB - обнаружение краев изображения с использованием оператора Превитта с нуля »