Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции? |
Детектирование пешеходов
2. Некоторые алгоритмы детектирования пешеходов на изображениях и их программные реализации в библиотеке OpenCV
2.1. Задача детектирования пешеходов и подходы к ее решению
Задача детектирования объектов на изображениях заключается в поиске положения всех объектов заданного класса на изображении. Положение объекта можно понимать по-разному, например, как множество пикселей, соответствующих объекту, или, как координаты прямоугольника, окаймляющего объект. В данной работе рассматривается второй подход, т.е. на выходе алгоритма детектирования требуется получить множество окаймляющих прямоугольников.
В связи с актуальностью и сложностью задачи детектирования пешеходов
на настоящий момент существует множество разнообразных подходов к ее
решению. Так, предпринимались попытки осуществить детектирование
путем сравнения предобработанных изображений с некоторыми эталонами
(шаблонами) с помощью специальной метрики [1]; использования
детекторов и дескрипторов особых точек [2]; применения сегментации
изображения [3] и т.д. Одним из наиболее популярных и перспективных на
настоящий момент подходов к детектированию объектов на изображении
является, так называемый, метод бегущего окна. Данный метод основан на
осуществлении экстенсивного поиска объектов определенного размера в
пикселях : последовательно рассматриваются области изображения
заданного размера, им ставится в соответствие признаковое описание, на
основе которого с помощью алгоритма классификации принимается
решение, содержит ли данная область объект или нет. Более подробно
данный подход и особенности его реализации рассматриваются ниже,
здесь же, отметим, что ключевыми компонентами системы
детектирования, основанной на таком подходе, являются алгоритмы
получения признакового описания изображения и его классификации.
Одним из наиболее популярных признаковых описаний, является
HOG-дескриптор (Histogram of Oriented Gradients, гистограмма
ориентированных градиентов), изначально разработанный для решения
задачи детектирования пешеходов [4] и на настоящий момент в том или
ином виде использующийся в большинстве современных детекторов.
2.2. HOG-признаки
Основная идея, лежащая в основе HOG, заключается в том, что внешний вид и форма части объекта могут быть достаточно хорошо описаны распределением градиентов интенсивности пикселей, соответствующих данной части, без точной информации о градиентах в каждой точке. Под градиентом здесь понимается аппроксимация градиента функции интенсивности (яркости), которая предполагается дифференцируемой, но известной лишь в узлах равномерной сетки – пикселях, в заданной точке с помощью некоторой разностной схемы. Алгоритм вычисления HOG-признаков за исключением некоторых моментов идентичен алгоритму вычисления SIFT-дескриптора, описанному в лекционной части курса. Основным отличием HOG от SIFT является то, что SIFT-описание составляется для окрестности ключевой точки, в то время как HOG-признаки покрывают все изображение (более того, с перекрытием).
Базовой единицей HOG-дескриптора является блок (block) –
прямоугольная область пикселей изображения заданных размеров. Блок
состоит из ячеек (cells), в свою очередь состоящих из пикселей. Каждой
ячейке ставится в соответствие гистограмма ориентаций (углов наклона
относительно горизонтали) градиентов из заданного количества полос
(bins), при этом направление считается "беззнаковым", т.е. наклон в и
считаются эквивалентными. Подобно 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, который заключается в нормализации
вектора по
-метрике, замене компонент полученного вектора, превышающих L2HysThreshold, на данное пороговое значение, и повторной нормализации по
-метрике.
- L2HysThreshold – пороговое значение, используемое при нормализации HOG-описания блока.
- gammaCorrection – определяет будет ли выполнена гамма- коррекция изображения перед вычислением признаков. В случае, если gammaCorrection=true, интенсивность каждого пикселя обработанного изображения будет равняться корню из его исходной интенсивности.
- nlevels – максимальное количество масштабов изображения, используемых при осуществлении детектирования объектов различных размеров.