техника, о которой я собираюсь поговорить, это больше ориентированный на машинное обучение подход; На мой взгляд, это довольно увлекательно, хотя и не совсем недавно: это было описано в статье «Надежное распознавание лиц в реальном времени» Виолой и Джонсом. Я использовал реализацию OpenCV для университетского проекта.
Он основан на особенностях типа волос, которые состоят из сложений и вычитаний интенсивности пикселей в прямоугольных областях изображения. Это можно сделать очень быстро, используя процедуру, называемую интегральным изображением, для которой также существуют реализации GPGPU (иногда их называют «сканирование префиксов»). После вычисления интегрального изображения за линейное время любая подобная хаару особенность может быть оценена за постоянное время. Элемент в основном представляет собой функцию, которая принимает подокно 24x24 изображения S и вычисляет элемент значения (S); триплет (особенность, порог, полярность) называется слабым классификатором, потому что
полярность * функция (S) <полярность * порог </p>
верно для одних изображений и ложно для других; ожидается, что слабый классификатор будет работать немного лучше, чем случайное предположение (например, он должен иметь точность не менее 51-52%).
Полярность: -1 или + 1.
Пространство объектов большое (~ 160'000 функций), но ограничено.
Несмотря на то, что в принципе порог может быть любым числом, из простых соображений, касающихся обучающего набора, получается, что если имеется N примеров, то для определения полярности и каждого признака необходимо изучить только порог N + 1 для каждой характеристики. тот, который держит лучшую точность. Таким образом, лучший слабый классификатор может быть найден путем тщательного поиска в пространстве триплетов.
По сути, сильный классификатор может быть собран путем итеративного выбора наилучшего из возможных слабых классификаторов с использованием алгоритма, называемого «адаптивное повышение», или AdaBoost; на каждой итерации примеры, которые были неправильно классифицированы в предыдущей итерации, взвешиваются больше. Сильный классификатор характеризуется собственным глобальным порогом, вычисляемым AdaBoost.
Несколько сильных классификаторов объединены в виде ступеней в каскаде внимания; идея каскада внимания заключается в том, что 24x24 подокна, которые явно не являются гранями, отбрасываются на первых этапах; сильный классификатор обычно содержит только несколько слабых классификаторов (например, 30 или 40), поэтому он очень быстро вычисляется. Каждый этап должен иметь очень высокий отзыв, в то время как уровень ложных срабатываний не очень важен. если имеется 10 ступеней, каждая из которых имеет 0,99 отзыва и 0,3 ложных срабатывания, то конечный каскад будет иметь 0,9 отзыва и чрезвычайно низкий уровень ложных срабатываний. По этой причине сильный классификатор обычно настраивается, чтобы увеличить количество отзывов и ложных срабатываний. Настройка в основном включает в себя уменьшение глобального порога, вычисляемого AdaBoost.
Подокно, ведущее в конец каскада, считается гранью.
Необходимо проверить несколько подокнов в исходном изображении, в конечном итоге перекрывающихся, в конечном итоге после изменения масштаба изображения.
Пока, надеюсь, это было интересно; -)
Dario