- •Реферат
- •Введение
- •Постановка задачи
- •1 Аналитический обзор предметной области
- •Компьютерное зрение
- •Обзор методов детектирования объектов
- •Эмпирические методы
- •Методы характерных инвариантных признаков
- •Методы обнаружения лица по внешним признакам
- •Распознавание с помощью шаблонов, заданных разработчиком
- •Выбор алгоритма
- •Обзор методов детектирования движения
- •1.3.1 Межкадровая разность
- •1.3.2 Базовый кадр
- •1.3.3 Методы оптического потока
- •Обзор инструментальных средств для разработки программного продукта
- •Библиотека OpenCv
- •1.4.2 Среда разработки MathWorks matlab
- •1.5 Интерфейсы последовательной передачи данных
- •2 Оборудование и аппаратная реализация
- •2.1.1 Характеристики камеры
- •Передача команд по протоколу visca
- •Получение изображения с камеры
- •Работа с портом
- •3 Анализ видеоизображения. Детектор лица
- •3.1 Постановка задачи
- •3.2 Метод Виолы-Джонса
- •3.2.1 Описание алгоритма
- •3.2.2 Схема распознавания
- •3.2.3 Признаки класса
- •3.2.4 Схема обучения
- •3.2.5 Интегральное представление изображений
- •3.2.6 Обучение
- •3.2.7 Распознавание
- •3.3 Программная реализация
- •4 Анализ видеоизображения. Слежение за лицом
- •4.1Постановка задачи
- •4.2 Метод Лукаса-Канаде
- •4.2.2 Одномерный случай
- •4.2.2 Двумерный случай
- •4.2.3 Недостатки метода
- •4.3 Выбор оптимальных параметров
- •4.4 Программная реализация алгоритма
- •5 Управление поворотом камеры
- •5.1 Постановка задачи
- •5.2 Перенацеливание на заданную точку поверхности
- •5.3 Модель принятия решений
- •6 Исследование системы
- •6.1 Оценка точности перенацеливания
- •6.2 Проверка на устойчивость к смене освещения
- •6.3 Время задержки
- •6.4 Устойчивость при частичном перекрытии объекта
- •6.5 Анализ влияния шумов
- •Заключение
- •Список литературы
- •Приложение 1. Код программы
3.2.7 Распознавание
После обучения на тестовой выборке имеется обученная база знаний из T слабых классификаторов. Для каждого классификатора известны: признак Хаара, использующийся в этом классификаторе, его положение внутри окна размером 24х24 пикселя и значение порога E.
На вход алгоритму поступает изображение I(r,c) размером WхH, где I(r,c) – яркостная составляющая изображения. Результатом работы алгоритма служит множество прямоугольников R(x,y,w,h), определяющих положение лиц в исходном изображении I.
Алгоритм сканирует изображение I на нескольких масштабах, начиная с базовой шкалы: размер окна 24х24 пикселя и 11 масштабов, при этом каждый следующий уровень в 1.25 раза больше предыдущего, по рекомендации авторов. Алгоритм распознавания выглядит следующим образом:
Для поиска объекта на цифровом изображении используется обученный классификатор, представленный в формате xml.
Структура классификатора:
где maxWeakCount – количество слабых классификаторов;
stageThereshold – максимальный порог яркости;
weakClassifiers – набор слабых классификаторов, на основе которых выносится решение о том, находится объект на изображении или нет;
internalNodes и leafValues – параметры конкретного слабого классификатора.
Первые два значения в internalNodes не используются, третье — номер признака в общей таблице признаков (она располагается в XML-файле под тегом features), четвертое — пороговое значение слабого классификатора. Если значение признака Хаара меньше порога слабого классификатора, выбирается первое значение leafValues, если больше — второе.
На основе этого базиса строится каскад классификаторов, принимающих решение о том, распознан объект на изображении или нет. Наличие или отсутствие предмета в окне определяется разницей между значением признака и порогом, полученным в результате обучения.
После применения данного алгоритма на выходе получаем интересующую область изображения, содержащую лицо человека.
3.3 Программная реализация
Для реализации метода трекинга будем использовать две обученные модели детектирования фронтального лица и лица в профиль:
CvHaarClassifierCascade *cascade_frontal_face = (CvHaarClassifierCascade *)cvLoad("D:/openCV/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml", 0, 0, 0);
CvHaarClassifierCascade *cascade_profile_face = (CvHaarClassifierCascade *)cvLoad("D:/openCV/opencv/sources/data/haarcascades/haarcascade_profileface.xml", 0, 0, 0);
Далее нам необходимо получить изображение с камеры для поиска лица на нем. Для работы алгоритма будем использовать цикл while(), на каждой итерации которого будем получать изображение в текущий момент времени. Выход из цикла будет означать, что изображение найдено и передавать управление модулю слежения за объектом.
Захватив изображение с камеры переводим в градации серого:
cvCvtColor(frame, gray, CV_RGB2GRAY);
frame – входное изображение,
gray – выходное,
CV_RGB2GRAY– конвертирование из RGB-пространства в оттенки серого (значение интенсивности вычисляется как взвешенная линейная свертка интенсивностей по всем трем каналам R,G,B):
Y = 0.3R + 0.59G + 0.11B
Далее полученное изображению передаем в функцию, реализующую детектор лица Виолы-Джонса:
cvHaarDetectObjects(gray, cascade, MemStorage, 1.1, 3, CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE , cvSize(50, 50))
gray - целевое изображение, к которому применяется каскад;
cascade – обученная модель
MemStorage – хранилище памяти
1.1 - коэффициент увеличения масштаба
3 - минимальный соседний порог
CV_HAAR_FIND_BIGGEST_OBJECT – находит наибольшее лицо
CV_HAAR_SCALE_IMAGE
cvSize(50, 50) - минимальный размер, по которому производится поиск, нужно задать как можно меньше, так как какой масштаб лица будет – не определено.
На выходе функции получаем минимальный ограничивающий прямоугольник, содержащий лицо человека и передаем его модулю слежения:
CvRect (x,y,width,height),
где (x,y) – координаты нижней левой точки прямоугольника, width – ширина, height – высота.
В общем, алгоритм в цикле while() можно представить следующими шагами:
Получение нового изображения.
Детектирование лица в фронтал
Если лицо не найдено, то используется другая модель для поиска лица в профиль.
Если лицо не найдено, то возвращение к шагу 1, иначе выход из цикла и передача управления в модуль слежения за объектом.
