Опубликован: 02.09.2013 | Доступ: свободный | Студентов: 429 / 54 | Длительность: 19:27:00
Самостоятельная работа 8:

Детектирование пешеходов

< Самостоятельная работа 7 || Самостоятельная работа 8: 12345

2. Некоторые алгоритмы детектирования пешеходов на изображениях и их программные реализации в библиотеке OpenCV

2.1. Задача детектирования пешеходов и подходы к ее решению

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

В связи с актуальностью и сложностью задачи детектирования пешеходов на настоящий момент существует множество разнообразных подходов к ее решению. Так, предпринимались попытки осуществить детектирование путем сравнения предобработанных изображений с некоторыми эталонами (шаблонами) с помощью специальной метрики [1]; использования детекторов и дескрипторов особых точек [2]; применения сегментации изображения [3] и т.д. Одним из наиболее популярных и перспективных на настоящий момент подходов к детектированию объектов на изображении является, так называемый, метод бегущего окна. Данный метод основан на осуществлении экстенсивного поиска объектов определенного размера в пикселях w \times h: последовательно рассматриваются области изображения заданного размера, им ставится в соответствие признаковое описание, на основе которого с помощью алгоритма классификации принимается решение, содержит ли данная область объект или нет. Более подробно данный подход и особенности его реализации рассматриваются ниже, здесь же, отметим, что ключевыми компонентами системы детектирования, основанной на таком подходе, являются алгоритмы получения признакового описания изображения и его классификации. Одним из наиболее популярных признаковых описаний, является HOG-дескриптор (Histogram of Oriented Gradients, гистограмма ориентированных градиентов), изначально разработанный для решения задачи детектирования пешеходов [4] и на настоящий момент в том или ином виде использующийся в большинстве современных детекторов.

2.2. HOG-признаки

Основная идея, лежащая в основе HOG, заключается в том, что внешний вид и форма части объекта могут быть достаточно хорошо описаны распределением градиентов интенсивности пикселей, соответствующих данной части, без точной информации о градиентах в каждой точке. Под градиентом здесь понимается аппроксимация градиента функции интенсивности (яркости), которая предполагается дифференцируемой, но известной лишь в узлах равномерной сетки – пикселях, в заданной точке с помощью некоторой разностной схемы. Алгоритм вычисления HOG-признаков за исключением некоторых моментов идентичен алгоритму вычисления SIFT-дескриптора, описанному в лекционной части курса. Основным отличием HOG от SIFT является то, что SIFT-описание составляется для окрестности ключевой точки, в то время как HOG-признаки покрывают все изображение (более того, с перекрытием).

Базовой единицей HOG-дескриптора является блок (block) – прямоугольная область пикселей изображения заданных размеров. Блок состоит из ячеек (cells), в свою очередь состоящих из пикселей. Каждой ячейке ставится в соответствие гистограмма ориентаций (углов наклона относительно горизонтали) градиентов из заданного количества полос (bins), при этом направление считается "беззнаковым", т.е. наклон в /alpha и (2\pi-\alpha) считаются эквивалентными. Подобно SIFT-дескриптору магнитуда градиента в некотором пикселе дает вклад в полосы гистограммы ячейки, которой принадлежит данный пиксель, а также в гистограммы соседних ячеек. При этом используется линейная интерполяция по углу наклона (полосам одной гистограммы), и билинейная по пространственному расположению (по гистограммам соседних ячеек). Также возможно взвешивание магнитуд градиентов с помощью гауссиана с центром, совпадающим с центром блока. После вычисления гистограмм в каждой ячейке блока, они конкатенируются, тем самым образуя вектор признаков блока. Полученный вектор подвергается нормализации. Такие признаковые описания вычисляются для всех блоков, не выходящих за пределы изображения, с координатами левого верхнего пикселя кратными заданным шагам по вертикали и горизонтали. Причем данные шаги, как правило, задаются так, что блоки перекрываются, т.е. градиент пикселя учитывается при вычислении признаковых описаний нескольких блоков. HOG-описание изображения получается путем конкатенации векторов признаков всех блоков.

В библиотеке OpenCV алгоритм вычисления HOG-признаков реализован в классе HOGDescriptor, входящем в состав модуля objdetect. Указать параметры HOG-дескриптора можно либо при создании объекта данного класса с помощью конструктора:

HOGDescriptor(Size winSize, 
              Size blockSize, 
              Size blockStride, 
              Size cellSize, 
              int nbins, 
              int derivAperture=1, 
              double winSigma=-1,   int histogramNormType=HOGDescriptor::L2Hys, 
              double L2HysThreshold=0.2, 
              bool gammaCorrection=false, 
              int nlevels=HOGDescriptor::DEFAULT_NLEVELS) 
              

либо напрямую изменяя поля данного класса:

Size winSize; 
Size blockSize; 
Size blockStride; 
Size cellSize; 
int nbins; 
int derivAperture; 
double winSigma; 
int histogramNormType; 
double L2HysThreshold; 
bool gammaCorrection; 
int nlevels; 

Рассмотрим данные параметры:

  • winSize – размер изображения, для которого требуется вычислить HOG-описание. В терминах детектора объектов это размеры бегущего окна (описание HOG-детектора, основанного на методе бегущего окна, см. ниже).
  • blockSize – размер блока в пикселях.
  • blockStride – шаг сетки блоков.
  • cellSize – размер ячейки в пикселях. Размер блока должен быть кратен размеру ячейки.
  • nbins – количество полос в гистограмме ориентации градиентов, соответствующей одной ячейке.
  • derivAperture – в текущей версии OpenCV реализация HOG не использует данный параметр.
  • winSigma – величина стандартного отклонения, определяющая гауссиан для взвешивания вкладов магнитуд градиентов в гистограммы: градиенты в пикселях, находящихся ближе к центру блока дают больший вклад. Заданное по умолчанию значение winSigma=-1 означает, что данное стандартное отклонение будет вычислено как (blockSize.width + blockSize.height)/8.
  • histogramNormType – определяет каким образом осуществляется нормализация вектора признаков блока. В настоящий момент поддерживается только алгоритм HOGDescriptor::L2Hys, который заключается в нормализации вектора по L_2-метрике, замене компонент полученного вектора, превышающих L2HysThreshold, на данное пороговое значение, и повторной нормализации по L_2-метрике.
  • L2HysThreshold – пороговое значение, используемое при нормализации HOG-описания блока.
  • gammaCorrection – определяет будет ли выполнена гамма- коррекция изображения перед вычислением признаков. В случае, если gammaCorrection=true, интенсивность каждого пикселя обработанного изображения будет равняться корню из его исходной интенсивности.
  • nlevels – максимальное количество масштабов изображения, используемых при осуществлении детектирования объектов различных размеров.
< Самостоятельная работа 7 || Самостоятельная работа 8: 12345
Андрей Терёхин
Андрей Терёхин

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

Демянчик Иван
Демянчик Иван

В главе 14 мы видим понятие фильтра, но не могу разобраться, чем он является в теории и практике.

" Искомый объект можно описать с помощью фильтра F= \lbrace f_{x',y'},x' \in \lbrace0, ...,w_f \rbrace , y' \in \lbrace 0,...,h_f \rbrace \rbrace "