2014-08-30 4 views
4

Я пытаюсь понять, как работают классификаторы хара. Я читаю документацию opencv здесь: http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html, и кажется, что вы в основном обучаете набор данных, чтобы получить что-то вроде шаблона. Затем вы кладете шаблон поверх фактического изображения, которое вы хотите проверить, и вы проходите проверку и проверяете каждый пиксель, чтобы убедиться, что он вероятен или вряд ли будет тем, что вы ищете. Поэтому, полагая, что это правильно, я дошел до того момента, когда я смотрел на фотографию ниже, и я не понимал. Являются ли блоки предполагаемыми регионами «вероятными» и «маловероятными»? Заранее спасибоУточнение классификатора HAAR

enter image description here

ответ

4

Эти модели являются признаки, которые оцениваются для обучения изображения. Например, для функции 1a учебный процесс находит квадратные области во всех ваших учебных изображениях, где левая половина обычно ярче правой (или наоборот). Для функции 3a тренировка находит квадратные области, где центр темнее окружающего.

Эти особенности, которые вы изобразили, были выбраны для харасного каскада не потому, что они особенно хороши, а главным образом потому, что они являются extremely fast to evaluate.

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

После тренировки Хаара каскад состоит из ряда правил, или этапов, как это:

  • оценки функции 1a для области (x1, y1) - (x2, y2). Является ли результат больше порога z1?
    (что означает: есть левая половина этой области ярче, чем в правой половине на определенную сумму?)
    • если да, то вернуть «не матч»
    • если нет, то выполнить на следующем этапе

В классическом Хаара каскада, каждое такое правило, с участием только одной функции в одном месте с одним порогом, представляет собой стадию каскада. OpenCV фактически использует каскад , что означает, что каждый этап состоит из нескольких из этих простых функций.

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

Когда каскад хара выполняется, все этапы выполняются по порядку; только изображение, которое пройдет первый И второй И третий ... этап будет принят.

Во время обучение первый этап также обучен первым. Затем второй этап тренируется только с образовательными изображениями, которые пройдут на первом этапе, и так далее.

+0

спасибо. Это имеет больший смысл. – JustBlossom

+0

Просто, чтобы уточнить, когда вы говорите первый этап, второй этап и так далее, вы имеете в виду этапы, на которых он построен? – JustBlossom

+1

@ LearnLanguages96 каскад хара состоит из многих подобных этапов, которые выполняются и обучаются в определенном порядке. Первый этап сначала тренируется, а затем выполняется первым. Второй этап выполняется только для изображений, которые проходят первый этап, а во время обучения тренируется только с изображениями, которые проходят первый этап. Я добавил некоторые детали в ответ на это. Отказ от ответственности: вся эта информация в основном из моей памяти о классическом каскаде хара. OpenCV может выполнять некоторые отклонения, такие как * boosting *, о которых я мало что знаю. – HugoRune

Смежные вопросы