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

Обнаружение признаков, часть 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

✅ Найденные теги: МЕТОД, новости, Обнаружение, признаки, Углы, Харрис

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

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