Виртуальный оператор сотовой связи
- 1 year ago
- 0
- 0
Оператор Собеля — дискретный дифференциальный оператор , вычисляющий приближённое значение градиента яркости изображения. Результатом применения оператора Собеля в каждой точке изображения является либо вектор градиента яркости в этой точке, либо его норма . Используется в области обработки изображений , в частности, часто применяется в алгоритмах выделения границ .
Оператор Собеля основан на свёртке изображения небольшими сепарабельными целочисленными фильтрами в вертикальном и горизонтальном направлениях, поэтому его относительно легко вычислять. С другой стороны, используемая им аппроксимация градиента достаточно грубая, особенно это сказывается на высокочастотных колебаниях изображения.
Оператор вычисляет градиент яркости изображения в каждой точке. Так находится направление наибольшего увеличения яркости и величина её изменения в этом направлении. Результат показывает, насколько «резко» или «плавно» меняется яркость изображения в каждой точке, а значит, вероятность нахождения точки на грани, а также ориентацию границы. На практике вычисление величины изменения яркости (вероятности принадлежности к грани) надёжнее и проще в интерпретации, чем расчёт направления.
Математически градиент функции двух переменных для каждой точки изображения (которой и является функция яркости) — двумерный вектор , компонентами которого являются производные яркости изображения по горизонтали и вертикали. В каждой точке изображения градиентный вектор ориентирован в направлении наибольшего увеличения яркости, а его длина соответствует величине изменения яркости. Это означает, что результатом оператора Собеля в точке, лежащей в области постоянной яркости, будет нулевой вектор , а в точке, лежащей на границе областей различной яркости, — вектор, пересекающий границу в направлении увеличения яркости.
Строго говоря, оператор использует ядра , с которыми сворачивают исходное изображение для вычисления приближённых значений производных по горизонтали и по вертикали. Пусть — это исходное изображение, а и — два изображения, на которых каждая точка содержит приближённые производные по и по . Они вычисляются следующим образом:
где обозначает двумерную операцию свертки.
Координата здесь возрастает «направо», а — «вниз». В каждой точке изображения приближённое значение величины градиента можно вычислить путём использования полученных приближенных значений производных:
Используя эту информацию, мы можем также вычислить направление градиента:
где, к примеру, угол Θ равен нулю для вертикальной границы, у которой тёмная сторона слева.
Поскольку функция яркости известна только в дискретных точках, мы не можем определить производные до тех пор, пока не положим яркость дифференцируемой функцией , которая проходит через эти точки. С этой дополнительной предпосылкой производную дифференцируемой функции яркости можно вычислить как от функции, с которой взяты замеры — точки изображения. Оказывается, что производные в любой отдельной точке есть функции яркости от всех точек изображения. Однако приближения их производных можно определить с большей или меньшей степенью точности.
Оператор Собеля представляет собой более неточное приближение градиента изображения, но он достаточно качественен для практического применения во многих задачах. Точнее, оператор использует значения интенсивности только в окрестности каждого пикселя для получения приближения соответствующего градиента изображения, и использует только целочисленные значения весовых коэффициентов яркости для оценки градиента.
Оператор Собеля состоит из двух отдельных операций :
Формулы фильтра Собеля для производных изображения в разных пространствах для :
Вот пример трёхмерного ядра Собеля для оси :
Как следует из определения, оператор Собеля можно реализовать простыми техническими и программными средствами: для приближения вектор-градиента нужны только восемь пикселей вокруг точки изображения и целочисленная арифметика. Более того, оба дискретных фильтра, описанные выше, можно разделить:
и две производные, и , теперь можно вычислить как
Раздельность этих вычислений может привести к уменьшению арифметических действий с каждым пикселем.
Применение свёртки к группе пикселей можно представить псевдокодом :
N(x, y) = Сумма { K(i, j).P(x-i, y-j)}, для i, j от −1 до 1.
N(x, y) представляет собой результат применения матрицы свёртки K к P.
Программная реализация оператора Собеля может эффективно использовать SIMD -расширения системы команд современных процессоров (т. н. векторизация кода), при этом выигрыш в скорости вычисления оператора может составлять до пяти раз по сравнению с высокоуровневой реализацией . Ручное кодирование на языке ассемблера позволяет обогнать по скорости такие компиляторы, как Microsoft Visual C++ и Intel C++ Compiler .
Вычисление оператора Собеля элементарно распараллеливается на произвольное число потоков (в пределе каждую точку результирующего изображения можно вычислять независимо от соседних). Например, при наличии двух процессоров ( ядер ) верхний полукадр изображения может быть обработан одним из них, а нижний — другим.
Результатом применения оператора Собеля является двумерная карта градиента для каждой точки. Её можно обработать и показать как картинку, на которой участки с большой величиной градиента (в основном, грани) будут видны как белые линии. Нижеприведённые изображения иллюстрируют это на примере простого изображения:
Оператор Собеля сглаживает паразитные эффекты на изображении, вызываемые чисто центрально-дифференциальным оператором , но не обладает полной вращательной симметрией . Щарр исследовал улучшение этого свойства и пришёл к выводу, что лучшие результаты даёт следующее ядро :