Алгоритм обнаружения Виолы-Джонса с использованием OpenCV haarcascade xml

Я пытаюсь реализовать детектор Виолы Джонса. Поскольку у меня недостаточно изображений или времени для обучения классификаторов, я решил использовать эти OpenCV.

До сих пор я мог загружать все haarcascade_frontface_alt.xml в структуры в памяти, создавать интегральное изображение для быстрой суммы площадей и создавать базовый алгоритм для детектора. Но он не работает так, как ожидалось, ну вообще.

Итак, если кто-нибудь знает, как работает детектор Виолы Джонса, и знает, как OpenCV использует свои структуры, подтвердите или опровергните мои предположения:

1, интегральное изображение вычисляется в значениях с плавающей запятой в диапазоне от 0->1 для белого цвета
2, для каждого объекта вы берете площадь в пределах его прямоугольников, умножаете на вес и суммируете со всеми прямоугольниками
3, если сумма > порог, значение left_val суммируется дальше, если не используется right_val
4, сумма для всех классификаторов на этапе > чем stage_threshold, может быть лицом, поэтому переходите к следующему этапу, если нет, то break
5, повторить для всех этапов, окон обнаружения и весов...

Пока я получаю все виды обнаруженных областей, кроме тех, которые содержат лица...

Пожалуйста, если мои предположения об использовании каскада openCV неверны, помогите. Спасибо.


person B.Gen.Jack.O.Neill    schedule 23.04.2012    source источник
comment
попробуйте этот учебник по opencv: opencv.itseez.com/doc /tutorials/objdetect/cascade_classifier/   -  person Abid Rahman K    schedule 24.04.2012


Ответы (1)


  1. Используете ли вы float или int в качестве типа данных для интегрального изображения, не имеет значения, если это позволяет хранить значения, достаточно большие для предотвращения арифметического переполнения. Значения не должны быть нормализованы. Нормализация выполняется позже, во время оценки классификатора (см. 3).

  2. да

  3. если сумма * обратная_область ‹ порог * стандартное_отклонение, левое_значение суммируется далее, ... (см. ниже).

  4. да

  5. да

Я рекомендую вам взглянуть на порты OpenCV высокого уровня, такие как JViolaJones, написанные на Java, или js-objectdetect для каскадов на основе пней, особенно computeSat() и detectSingleScale() и Haar.js для не основанных на пне каскады написаны на JavaScript, чтобы лучше понять алгоритм. Оптимизированный код OpenCV C/C++ несколько труден для чтения.

person le_m    schedule 05.09.2012
comment
Обе библиотеки, на которые вы ссылаетесь, сами по себе являются портами JViolaJones, которые я нашел более читабельными (если вы знать Java). - person fzembow; 06.09.2012
comment
Я добавил JViolaJones в ответ. - person le_m; 06.09.2012