Гистограмма направленных градиентов
Гистограмма направленных градиентов (англ. Histogram of Oriented Gradients, HOG) — это дескриптор признаков, используемый в компьютерном зрении и обработке изображений для обнаружения объектов. Метод основан на подсчёте количества направлений градиентов (изменений яркости) в локальных участках изображения. HOG относится к классу дескрипторов формы и широко применяется в задачах распознавания образов, особенно для обнаружения пешеходов, транспортных средств и других объектов с характерными контурами.
История
Метод гистограмм направленных градиентов был впервые предложен в 1986 году учёными Дэвидом Лоу и К. Мак-Лафлином в контексте анализа формы объектов. Однако современная и наиболее известная версия HOG была разработана в 2005 году группой исследователей из французского Национального института исследований в области информатики и автоматики (INRIA) под руководством Навнита Далала и Билла Триггса. В своей работе «Histograms of Oriented Gradients for Human Detection» они показали, что HOG значительно превосходит существовавшие на тот момент методы (например, дескрипторы Хаара) по точности обнаружения пешеходов на изображениях. С тех пор HOG стал одним из стандартных инструментов в компьютерном зрении, особенно в сочетании с методом опорных векторов (SVM) для классификации.
Принцип работы
Вычисление градиентов
Первый шаг построения HOG-дескриптора — вычисление градиентов изображения по осям X и Y. Для этого применяются дискретные производные, чаще всего с использованием фильтров Собеля или Превитта. Для каждого пикселя вычисляются:
- Магнитуда градиента: \( G = \sqrt{G_x^2 + G_y^2} \)
- Направление градиента: \( \theta = \arctan\left(\frac{G_y}{G_x}\right) \)
Направление обычно квантуется в диапазоне от 0° до 180° (беззнаковые градиенты) или от 0° до 360° (знаковые градиенты). Для обнаружения пешеходов чаще используют беззнаковые градиенты, так как они инвариантны к изменению контраста (например, тёмный объект на светлом фоне и наоборот дают одинаковые градиенты).
Разбиение на ячейки
Изображение делится на небольшие прямоугольные области — ячейки (cells). Типичный размер ячейки — 8×8 пикселей. Для каждой ячейки строится гистограмма направлений градиентов. Количество бинов гистограммы обычно составляет 9 (по 20° на бин для беззнаковых градиентов от 0° до 180°). Каждый пиксель вносит вклад в гистограмму, пропорциональный своей магнитуде, причём вклад распределяется между двумя соседними бинами (билинейная интерполяция) для уменьшения эффекта квантования.
Блоки и нормализация
Для учёта локальных изменений освещения и контраста ячейки объединяются в блоки (blocks). Блок обычно состоит из 2×2 ячеек (16×16 пикселей). Для каждого блока вычисляется нормализованный вектор признаков. Наиболее распространённый метод нормализации — L2-норма (деление на евклидову норму вектора). Другие варианты: L1-норма, L1-норма с последующим квадратным корнем. Нормализация выполняется с перекрытием блоков (например, шаг блока — одна ячейка), что позволяет каждому пикселю участвовать в нескольких нормализациях и повышает устойчивость дескриптора.
Формирование дескриптора
Итоговый HOG-дескриптор представляет собой конкатенацию всех нормализованных векторов блоков. Для изображения размером 64×128 пикселей (стандартный размер для обнаружения пешеходов) количество ячеек составляет 8×16 = 128, количество блоков — 7×15 = 105 (с учётом перекрытия). Каждый блок даёт вектор размером 4 ячейки × 9 бинов = 36 элементов. Таким образом, общая размерность дескриптора — 105 × 36 = 3780.
Математическая формулировка
Пусть \( I(x, y) \) — интенсивность пикселя в точке \( (x, y) \). Градиенты: \[ G_x(x, y) = I(x+1, y) - I(x-1, y) \] \[ G_y(x, y) = I(x, y+1) - I(x, y-1) \]
Магнитуда и направление: \[ M(x, y) = \sqrt{G_x^2 + G_y^2} \] \[ \theta(x, y) = \arctan\left(\frac{G_y}{G_x}\right) \]
Для ячейки \( C \) с пикселями \( p \in C \) гистограмма \( h \) с \( K \) бинами: \[ h_k = \sum_{p \in C} w(p, k) \cdot M(p) \] где \( w(p, k) \) — вес билинейной интерполяции между бинами \( k \) и \( k+1 \) в зависимости от \( \theta(p) \).
Нормализация блока \( B \), состоящего из ячеек \( C_1, C_2, C_3, C_4 \): \[ v_B = \frac{[h_{C_1}, h_{C_2}, h_{C_3}, h_{C_4}]}{\sqrt{\|h_{C_1}\|^2 + \|h_{C_2}\|^2 + \|h_{C_3}\|^2 + \|h_{C_4}\|^2 + \varepsilon}} \] где \( \varepsilon \) — малая константа для избежания деления на ноль.
Варианты и модификации
HOG с разными параметрами
- Размер ячейки: от 4×4 до 16×16 пикселей. Меньшие ячейки дают более детальное описание, но увеличивают размерность.
- Количество бинов: от 6 до 18. Большее число бинов повышает точность распознавания направлений, но требует больше памяти.
- Тип градиентов: знаковые (0°–360°) или беззнаковые (0°–180°). Знаковые градиенты чувствительны к инверсии контраста.
Улучшенные версии
- PHOG (Pyramid HOG): использует пространственную пирамиду для учёта признаков на разных масштабах.
- CoHOG (Co-occurrence HOG): учитывает совместную встречаемость пар направлений градиентов в соседних ячейках.
- FHOG (Felzenszwalb HOG): модификация, предложенная Педро Фельценшвальбом для детекторов на основе частей объектов (DPM). Включает 31-мерный вектор (9 бинов для беззнаковых градиентов, 18 для знаковых, 4 для нормализованных сумм).
Применение
Обнаружение пешеходов
Наиболее известное применение HOG — детектор пешеходов, предложенный Далалом и Триггсом. Дескриптор HOG извлекается из скользящего окна на изображении, а затем классифицируется с помощью SVM. Этот подход лёг в основу многих систем видеонаблюдения и автомобильных систем безопасности.
Обнаружение транспортных средств
HOG используется для обнаружения автомобилей, велосипедов и мотоциклов на дорогах. В сочетании с другими дескрипторами (например, LBP) он применяется в системах автоматического распознавания номерных знаков.
Распознавание жестов и поз
В системах анализа человеческого тела HOG помогает выделять контуры рук, ног и туловища. Используется в интерфейсах «человек-компьютер» и в анимации.
Медицинская диагностика
HOG применяется для анализа медицинских изображений, например, для обнаружения клеток в гистологических срезах или для сегментации органов на рентгеновских снимках.
Робототехника
В мобильных роботах HOG используется для навигации и обнаружения препятствий. Алгоритм работает в реальном времени на современных процессорах.
Преимущества и недостатки
Преимущества
- Устойчивость к изменениям освещения: нормализация блоков компенсирует локальные вариации контраста.
- Инвариантность к небольшим деформациям: гистограммы сглаживают мелкие искажения формы.
- Простота реализации: алгоритм не требует сложных вычислений и хорошо параллелится.
- Высокая точность для задач обнаружения объектов с чёткими контурами.
Недостатки
- Чувствительность к повороту: HOG не инвариантен к вращению объекта. Для обнаружения объектов под разными углами требуется либо обучение на повёрнутых образцах, либо использование дополнительных методов.
- Высокая размерность: для больших изображений дескриптор может занимать много памяти.
- Зависимость от масштаба: HOG не масштабоинвариантен, поэтому при обнаружении объектов разного размера требуется построение пирамиды изображений.
- Ограниченная применимость для текстур: метод плохо работает для объектов без выраженных градиентов (например, однородных поверхностей).
Сравнение с другими методами
HOG vs. SIFT
SIFT (Scale-Invariant Feature Transform) — более сложный дескриптор, инвариантный к масштабу и повороту. HOG проще и быстрее, но менее устойчив к геометрическим преобразованиям. SIFT часто используется для сопоставления изображений, HOG — для обнаружения объектов.
HOG vs. LBP
LBP (Local Binary Patterns) — дескриптор текстур, который лучше подходит для анализа текстурных изображений (например, тканей, кожи). HOG превосходит LBP в задачах, где важны контуры и формы.
HOG vs. CNN
Свёрточные нейронные сети (CNN) в настоящее время превосходят HOG по точности в большинстве задач компьютерного зрения. Однако HOG остаётся востребованным в приложениях с ограниченными вычислительными ресурсами (встраиваемые системы, мобильные устройства) и в случаях, когда требуется интерпретируемость модели.
Реализации
OpenCV
В библиотеке OpenCV (Open Source Computer Vision Library) реализован класс HOGDescriptor, который позволяет извлекать HOG-признаки и выполнять обнаружение объектов. Пример использования на C++:
``cpp cv::HOGDescriptor hog; std::vector<float> descriptors; hog.compute(image, descriptors); ``
scikit-image
В Python библиотека scikit-image предоставляет функцию hog() из модуля skimage.feature. Пример:
``python from skimage.feature import hog features = hog(image, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2)) ``
MATLAB
В среде MATLAB функция extractHOGFeatures из пакета Computer Vision Toolbox позволяет извлекать HOG-признаки.
Интересные факты
- В оригинальной работе Далала и Триггса (2005) HOG-дескриптор показал точность обнаружения пешеходов около 89% на тестовом наборе INRIA, что было значительным улучшением по сравнению с предыдущими методами.
- HOG часто используется в комбинации с методом опорных векторов (SVM) — такая связка называется HOG+SVM и является классическим примером «обучения с учителем» в компьютерном зрении.
- В 2010 году метод HOG был включён в состав стандартной библиотеки OpenCV, что способствовало его широкому распространению.
- Несмотря на развитие глубокого обучения, HOG продолжает применяться в промышленных системах благодаря низким требованиям к вычислительным ресурсам и отсутствию необходимости в больших наборах данных для обучения.
Источники
- Dalal N., Triggs B. Histograms of Oriented Gradients for Human Detection // IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR). — 2005. — Vol. 1. — P. 886–893.
- Lowe D. G. Distinctive Image Features from Scale-Invariant Keypoints // International Journal of Computer Vision. — 2004. — Vol. 60, No. 2. — P. 91–110.
- Felzenszwalb P. F., Girshick R. B., McAllester D., Ramanan D. Object Detection with Discriminatively Trained Part-Based Models // IEEE Transactions on Pattern Analysis and Machine Intelligence. — 2010. — Vol. 32, No. 9. — P. 1627–1645.
- Bradski G., Kaehler A. Learning OpenCV: Computer Vision with the OpenCV Library. — O'Reilly Media, 2008. — 580 p.
- scikit-image: Image processing in Python // PeerJ. — 2014. — Vol. 2. — e453.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →