Ответы пользователя по тегу OpenCV
  • Как работает Гистограмма Направленных Градиентов (HOG)?

    niosus
    @niosus
    На самом деле, приведенная @Fesor статья - это Статья (с большой буквы) по HOG. Так что, я поддерживаю - все, что вам нужно там есть.

    Для того, чтобы было проще ее читать, я попробую продублировать простым языком что происходит там (все равно статья к прочтению обязательна).

    Итак.
    Для начала, вам нужен большой объем исходных данных. Давайте рассматривать на конкретном примере - обнаружение морд автомобилей. Итак, вам нужно примерно 1000 картинок, к примеру 128х128 пикселей, на каждой из которых будет только машина. Вам нужно также во много раз больше (я использовал недавно 8000) картинок такого же размера, где машин точно не будет.

    Эти все картинки анализируются с помощью HOG, который, по сути считает градиент в каждой точке и в зависимости от направления градиента, записывает некоторое значение в гистограму (это неплохо показано даже в википедии). Вообще в итоге HOG выглядит как очень длинный вектор значений, каждое из которых есть значение определенной ячейки гистограмы.

    После анализа всех ваших исходящих данных, у вас будет целая тьма этих векторов. По сути, каждый из этих векторов - это точка в н-мерном пространстве. И эти точки вам нужно разделить на 2 кластера (для детекции). Чаще всего это делается с помощью SVM (Support Vector Machines), так как они гарантируют оптимальное разделение точек на 2 кластера.

    На выходе SVM у вас есть граница (чаще всего используют линейную) , которая проходит между вашими точками и она и является критерием решения (детектинга).

    Далее, если коротко и на пальцах, для каждого вашего скользящего окна считается HOG и проверяется с какой стороны от границы он лежит. Если со стороны "машинок" то программа кричит о том, что она что-то задетектила, а если с другой - то она молча проверяет следующее окно.

    Надеюсь, вышло не слишком сумбурно.
    Если вам нужен референс по коду - то можете глянуть на мой github: https://github.com/niosus/HOGclassifier

    Там пока есть немного лишнего, но основную идею уловить, я думаю, можно. Через месяц примерно, проэкт свернется до чистого детектинга и из него уберется все ненужное.
    Ответ написан