Жёлтый треугольник с узором на тёмном фоне с волнистыми жёлтыми линиями.

Обнаружение признаков, часть 3: Обнаружение углов по методу Харриса

Как найти наиболее информативные точки на изображениях

Делиться

67e0da2f4d3a4aff2cc8aa0d9ca56efa

Введение

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

В двух предыдущих статьях этой серии мы рассмотрели наиболее популярные операторы для обнаружения границ изображений: операторы Собеля, Шарра, Лапласа , а также оператор Гаусса, используемый для сглаживания изображений. В той или иной форме эти операторы использовали производные изображения и градиенты, представленные сверточными ядрами.

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

637c3a3d8511f79ce85fc36e3c14afa9

Пример

Представьте, что вы собираете двухмерный пазл. Большинство людей вначале находят деталь, изображение которой совпадает с краем объекта. Почему? Потому что так проще идентифицировать соседние детали, поскольку количество деталей, имеющих схожий край объекта, минимально.

Мы можем пойти еще дальше и сосредоточиться не на краях, а на углах — областях, где объект меняет направление своего ребра. Эти фрагменты встречаются еще реже, чем просто края, и благодаря своей уникальной форме позволяют еще проще искать другие смежные фрагменты.

Например, в приведенной ниже головоломке есть 6 ребер (B2, B3, B4, D2, D3 и D4) и только 1 угол (C5). Выбрав угол в начале, становится проще определить его положение, поскольку он встречается реже, чем ребра.

25e8ba67d9d715ed0fb81222f7ae5c18

Цель этой статьи — понять, как можно обнаруживать углы. Для этого мы рассмотрим детали алгоритма обнаружения углов Харриса — одного из самых простых и популярных методов, разработанного в 1988 году.

Идея

Рассмотрим три типа областей: плоские , краевые и угловые . Структуру этих областей мы уже показали выше. Наша цель — понять распределение градиентов в этих трех случаях.

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

Плоский регион

Простейший случай — это плоская область. Обычно вся область изображения имеет почти одинаковые значения интенсивности, что делает значения градиента по осям X и Y незначительными и центрированными вокруг 0.

Взяв точки градиента (Gₓ, Gᵧ) из приведенного выше примера плоского изображения, мы можем построить график их распределения, который выглядит следующим образом:

9bf80eba9d2dffa7e4ab840829da537d

Теперь мы можем построить эллипс вокруг нанесенных точек с центром в точке (0, 0). Затем мы можем определить его две главные оси:

  • Главная ось, вдоль которой эллипс максимально растянут.
  • Малая ось, вдоль которой эллипс достигает своей минимальной протяженности.

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

Тем не менее, для каждой из двух главных осей мы можем вычислить радиусы эллипса λ₁ и λ₂. Как показано на рисунке выше, они почти равны и имеют малые относительные значения.

Краевая область

В краевой области интенсивность изменяется только в пределах этой зоны. За пределами края интенсивность остается практически неизменной. Учитывая это, большинство точек градиента по-прежнему центрированы вокруг (0, 0).

Однако на небольшом участке вокруг краевой зоны значения градиента могут резко меняться в обоих направлениях. На приведенном выше примере край расположен по диагонали, и мы видим изменения в обоих направлениях. Таким образом, распределение градиента смещено в диагональном направлении, как показано ниже:

07a878cffc4e581e531b2d6bce329007

В краевых областях отображаемый эллипс обычно смещен в одну сторону и имеет очень разные радиусы λ₁ и λ₂.

Угловой регион

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

Если мы рассмотрим угловую структуру, то её можно приблизительно представить как пересечение двух рёбер, имеющих два разных направления. Что касается рёбер, то, как мы уже обсуждали в предыдущем разделе, распределение идёт в одном направлении либо по оси X, либо по оси Y, либо в обоих направлениях.

Наличие двух ребер в углу приводит к образованию двух различных точечных спектров, растущих в двух разных направлениях от центра. Пример показан ниже.

9baa35fb9491d317f8d5486aeb78ac13

Наконец, если мы построим эллипс вокруг этого распределения, то заметим, что он больше, чем в плоском и краевом случаях. Мы можем различить этот результат, измерив λ₁ и λ₂, которые в этом сценарии примут гораздо большие значения.

Визуализация

Мы только что рассмотрели три сценария, в которых λ принимало разные значения. Для лучшей визуализации результатов можно построить диаграмму, представленную ниже:

95d8023165df73f72fba2b3e8e565733

Формула

Для классификации региона по одной из трех зон обычно используется приведенная ниже формула для оценки коэффициента R:

R = λ₁ ⋅ λ₂ – k ⋅ (λ₁ + λ₂)², где 0,04 ≤ k ≤ 0,06

На основе значения R мы можем классифицировать область изображения:

  • R < 0 – краевая область
  • R ~ 0 – плоская область
  • R > 0 – угловая область

OpenCV

Обнаружение углов по Харрису легко реализовать в OpenCV с помощью функции cv2.CornerHarris. Давайте посмотрим на примере ниже, как это можно сделать.

Вот входное изображение, с которым мы будем работать:

147ba5561ecb4323c6c257c6077a0b13

Для начала импортируем необходимые библиотеки.

import numpy as np import cv2 import matplotlib.pyplot as plt

Мы собираемся преобразовать входное изображение в формат оттенков серого, поскольку детектор Харриса работает с интенсивностью пикселей. Также необходимо преобразовать формат изображения в float32, поскольку вычисленные значения, связанные с пикселями, могут выходить за пределы диапазона [0, 255].

path = 'data/input/shapes.png' image = cv2.imread(path) grayscale_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) grayscale_image = np.float32(grayscale_image)

Теперь мы можем применить фильтр Харриса. Функция cv2.cornerHarris принимает четыре параметра:

  • grayscale_image – входное изображение в оттенках серого в формате float32.
  • blockSize (= 2) – определяет размеры пиксельного блока в окрестности целевого пикселя, рассматриваемого для обнаружения углов.
  • ksize (= 3) – размерность фильтра Собеля, используемого для вычисления производных.
  • k (= 0,04) – коэффициент в формуле, используемой для вычисления значения R.

R = cv2.cornerHarris(grayscale_image, 2, 3, 0.04) R = cv2.dilate(R, None)

Функция cv2.cornerHarris возвращает матрицу точно таких же размеров, как и исходное изображение в оттенках серого. Ее значения могут выходить далеко за пределы нормального диапазона [0, 255]. Для каждого пикселя эта матрица содержит значение коэффициента R, которое мы рассматривали выше.

Оператор cv2.dilate — это морфологический оператор, который при желании можно использовать сразу после него для более наглядной группировки локальных углов.

Распространенный метод заключается в определении порогового значения, ниже которого пиксели считаются углами. Например, мы можем считать все пиксели изображения углами, значение R которых больше максимального глобального значения R, деленного на 100. В нашем примере мы присваиваем таким пикселям красный цвет (0, 0, 255).

Для визуализации изображения необходимо преобразовать его в формат RGB.

image[R > 0.01 * R.max()] = [0, 0, 255] image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

Наконец, для отображения выходного изображения мы используем библиотеку maplotlib.

plt.figure(figsize=(10, 8)) plt.imshow(image_rgb) plt.title('Обнаружение углов Харриса') plt.axis('off') plt.tight_layout() plt.show()

Вот результат:

8b4bfb06c4adfeb75254dd889e5098e4

Заключение

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

В реальной жизни часто возникает необходимость запустить классификатор границ для всего изображения. Построение эллипса вокруг точек градиента и оценка коэффициента R каждый раз требует значительных ресурсов, поэтому для ускорения процесса используются более сложные методы оптимизации. Тем не менее, они во многом основаны на той интуиции, которую мы изучали здесь.

Ресурсы

  • Угловой детектор Харриса | Википедия
  • Обнаружение углов Харриса | OpenCV

Все изображения, если не указано иное, предоставлены автором.

Источник: towardsdatascience.com

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

ИИ почти всех обгонит? Прогнозы звучат громко, но есть нюансы…
Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.
dummy-img
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.
dummy-img
dummy-img
Взаимодействие человека и машины погружается под воду.
Взаимодействие человека и машины погружается под воду.
Image Not Found
Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.

Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.

Вкратце Опубликовано: Изображение предоставлено: Thos Robinson/Getty Images для The New York Times (откроется в новом окне) Джули Борт Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.…

Апр 21, 2026
dummy-img

Как почистить виниловые пластинки (2026): пылесос, ультразвук, чистящий раствор, щетка.

Эти щелчки и треск недопустимы. Приведите свою музыку в порядок с помощью этого удобного руководства. Источник: www.wired.com

Апр 21, 2026
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Это сегодняшний выпуск The Download, нашей ежедневной новостной рассылки, которая предоставляет вам ежедневную порцию событий в мире технологий. Кибермошенники обходят системы безопасности банков с помощью незаконных инструментов, продаваемых в Telegram. В центре по отмыванию денег в Камбодже…

Апр 21, 2026
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Это сегодняшний выпуск The Download, нашей ежедневной новостной рассылки, которая предоставляет вам ежедневную порцию событий в мире технологий. Кибермошенники обходят системы безопасности банков с помощью незаконных инструментов, продаваемых в Telegram. В центре по отмыванию денег в Камбодже…

Апр 21, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых