Детектор углов Harris - это оператор обнаружения углов, который обычно используется в алгоритмах компьютерного зрения для извлечения углов и определения особенностей изображения. Впервые он был представлен Крисом Харрисом и Майком Стивенсом в 1988 году после усовершенствования углового детектора Моравека. По сравнению с предыдущим, детектор углов Харриса учитывает разницу угловых оценок напрямую по отношению к направлению, вместо использования смещаемых участков для каждых 45-градусных углов, и было доказано, что он более точен в различении краев и углы. С тех пор он был улучшен и принят во многие алгоритмы для предварительной обработки изображений для последующих приложений.

Это часть 7-й серии Feature Detection and Matching. Другие статьи включены

Угол

Угол - это точка, локальная окрестность которой находится в двух доминирующих и разных краевых направлениях. Другими словами, угол можно интерпретировать как соединение двух краев, где край - это внезапное изменение яркости изображения. Углы являются важными элементами изображения, и их обычно называют точками интереса, которые инвариантны к перемещению, повороту и освещению.

Итак, давайте разберемся, почему углы считаются лучшими функциями или хорошими для отображения патчей. На приведенном выше рисунке, если мы возьмем плоский участок, градиент не изменится ни в каком направлении. Точно так же в краевой области не наблюдается изменения градиента вдоль краевого направления. Таким образом, и плоская область, и краевая область плохо подходят для сопоставления патчей, поскольку они не очень различимы (есть много похожих участков вдоль края в краевой области). В угловой области мы наблюдаем значительное изменение градиента во всех направлениях. Из-за этого углы считаются хорошими для сопоставления патчей (смещение окна в любом направлении приводит к значительному изменению внешнего вида) и, как правило, более стабильными при изменении точки обзора.

Обнаружение углов

Идея состоит в том, чтобы рассмотреть небольшое окно вокруг каждого пикселя p изображения. Мы хотим идентифицировать все такие пиксельные окна, которые уникальны. Уникальность можно измерить, сдвинув каждое окно на небольшую величину в заданном направлении и измерив величину изменения, которое происходит в значениях пикселей.

Более формально, мы берем сумму квадратов разности (SSD) значений пикселей до и после сдвига и идентифицируем пиксельные окна, где SSD большой, для сдвигов во всех 8 направлениях. Давайте определим функцию изменения E (u, v) как сумму всех сумм квадратов разностей (SSD), где u, v - координаты x, y каждого пикселя в нашем 3 x 3 window, а I - значение интенсивности пикселя. Все элементы изображения - это пиксели с большими значениями E (u, v), определяемыми некоторым порогом.

Мы должны максимизировать эту функцию E (u, v) для обнаружения углов. Это означает, что мы должны максимизировать второй член. Применяя расширение Тейлора к приведенному выше уравнению и используя некоторые математические шаги, мы получаем окончательное уравнение как:

Теперь мы переименовываем суммированную матрицу в M:

Итак, уравнение теперь выглядит следующим образом:

Помните, что мы хотим, чтобы SSD был большим по размеру для всех восьми направлений или, наоборот, чтобы SSD был маленьким ни по одному из направлений. Решая собственные векторы M, мы можем получить направления как для наибольшего, так и для наименьшего увеличения SSD. Соответствующие собственные значения дают нам фактическую величину этих увеличений. Оценка R рассчитывается для каждого окна:

λ 1 и λ 2 - собственные значения M. Таким образом, значения этих собственных значений определяют, является ли область угловой, краевой или плоской.

  • Когда | R | мала, что происходит, когда λ 1 и λ 2 маленькие, область плоская.
  • Когда R ‹0, что происходит при λ 1 ›› λ 2 или наоборот, область является краем.
  • Когда R велико, что происходит, когда λ 1 и λ 2 большие и λ 1∼ λ 2, область - угол.

Псевдокод высокого уровня

  1. Возьмите исходное изображение в оттенках серого

2. Примените фильтр Гаусса, чтобы сгладить шум.

3. Примените оператор Собела, чтобы найти значения градиента x и y для каждого пикселя изображения в градациях серого.

4. Для каждого пикселя p в изображении в градациях серого рассмотрите окно 3 × 3 вокруг него и вычислите функцию силы угла. Назовите это его значением Харриса.

5. Найдите все пиксели, которые превышают определенный порог и являются локальными максимумами в определенном окне (для предотвращения дублирования функций).

6. Для каждого пикселя, который соответствует критериям в 5, вычислите дескриптор функции.

Реализация

Мне удалось реализовать детектор угла Харриса с помощью OpenCV. Вот как я это сделал:

Ссылка на Github для кода: https://github.com/deepanshut041/feature-detection/tree/master/harris

использованная литература

Спасибо за прочтение! Если вам понравилось, нажмите кнопку хлопка ниже и следите за Data Breach, чтобы получать больше обновлений.