Цель данной работы - получить общее представление о фундаментальных объектах компьютерного зрения - особых точках. Рассмотреть одно из возможных применений - трекинг объектов.
Данный репозиторий содержит:
include
-- директория с заголовочным файлом, содержащим интерфейс трекераsamples
-- директория с исходным кодом приложения, которое запускает трекинг на видео. Имя алгоритма и путь к видео передаются параметрами командной строки. Кроме того, может быть указан файл с описанием ground-truth траектории, в этом случае приложение также выдаст метрики precision и recall для запускаемого трекера.dataset
-- директория с примерами видео. Для каждого видео имеется одноименный файл с расширением.txt
, в котором указана ground-truth траектория..gitignore
-- список файлов, находящихся в директории проекта, но игнорируемые git'ом..travis.yml
-- конфигурационный файл для системы автоматического тестирования Travis-CI.CMakeLists.txt
-- общий файл для сборки проекта с помощью CMake.README.md
-- настоящий файл.
Основные задачи:
- Реализовать алгоритм трекинга Median Flow
- Собрать качественные метрики на имеющемся наборе видео, дать им оценку
Дополнительные задачи:
- Улучшить качественные оценки трекинга при помощи реализации вспомогательных
процедур:
- использование различных способов фильтрации точек (фиксированный порог, среднее и т.п.)
- оценка масштаба
- использование различных особых точек (Harris corners, goodFeaturesToTrack, SIFT/SURF/ORB features и т.п.)
- детектировать срыв трекинга
- Сделать форк upstream-репозитория, затем клонировать origin к себе на локальную машину.
- Собрать проект с помощью CMake и MS VS. В результате успешной сборки в
build-каталоге в директории
bin
долен появить исполняемый файлtracking_sample.exe
- Запустить
tracking_sample.exe
для получения справки и разобраться с параметрами его запуска. - Добавить новую реализацию интерфейса
Tracker
. - Реализовать примитивную версию алгоритма Median Flow
- Запустить реализованный трекер на различных видео из каталога
dataset
, проанализировать его качество - Реализовать полную версию алгоритма, проанализировать качество
- Попытаться ещё улучшить качество (см. Дополнительные задачи)
- Сделать форк upstream-репозитория, затем клонировать origin к себе на локальную машину. Для инструкций можно обратиться к разделу [Общие инструкции по работе с Git][git-intro] в [практической работе 1][practice1].
- Собрать проект с помощью CMake и MS VS (см. раздел
[Сборка проекта с помощью CMake и MS VS][cmake-msvs]
в [практической работе 1][practice1]). В результате успешной сборки
в build-каталоге в директории
bin
долен появить исполняемый файлtracking_sample.exe
- Запустить
tracking_sample.exe
для получения справки и разобраться с параметрами его запуска.- Приложение можно запускать без параметров - тогда оно просто выдает справку.
- Можно также передать 2 параметра, например
tracking_sample.exe dummy ../../dataset/car.mp4
. Тогда откроется окно, в котором нужно будет мышью выбрать объект для трекинга. После чего будет показан результат трекинга с использованием указанного алгоритма (в данном случае -dummy
) - Можно передать 3 параметра, например,
tracking_sample.exe dummy ../../dataset/car.mp4 ../../dataset/car.txt
. Тогда, кроме результатов указанного трекера, будет показан также ground-truth. А по завершении видео, будут выведены качественные оценки алгоритма.
- Добавить новую реализацию интерфейса
Tracker
.- Добавить новый файл с расширением
.cpp
в директориюsamples
(например,tracker_median_flow.cpp
). - Перезапустить CMake, чтобы он "подхватил" созданный файл.
- Реализовать в созданном файле интерфейс
Tracker
, аналогично реализации в файлеtracker_dummy.cpp
. Тела методов могут быть пока тривиальными. - Добавить свою реализацию в функцию-фабрику
createTracker
в файлеtrackers_factory.cpp
.
- Добавить новый файл с расширением
- Реализовать примитивную версию алгоритма Median Flow. Метод
track
в созданной реализации должен содержать:- Выбор точек в прямоугольнике
- Вычисление для них optical flow (и фильтрация "плохих" точек)
- Выбор медианных смещений по X и по Y
- Запустить реализованный трекер на различных видео из каталога
dataset
, проанализировать его качество. Насколько полученные оценки близки к 1? В каких случаях алгоритм срабатывает плохо? - Реализовать полную версию алгоритма, проанализировать качество. Шаги
"полного" алгоритма следующие:
- Выбрать точки в прямоугольнике
- Вычислить для них optical flow (и отбросить "плохие")
- Вычислить обратный optical flow (и отбросить плохие по forward-backward правилу)
- Взять медианные смещения по X и по Y
- Оценить масштаб Фильтрация по forward-backward правилу осуществляется следующим образом:
- Вычислить optical flow в обратном направлении
- Отфильтровать точки - если положение оригинальной точки и её образа, вычисленного с помощью forward-backward flow "сильно" отличаются, её нужно отбросить Фильтрация "плохих" точек осуществляется следующим образом:
- Найти медианную ошибку
- Назначить "плохими" все точки с большей ошибкой Оценка масштаба осуществляется следующим образом:
- Для всех пар точек нужно определить отношение расстояния между ними на предыдущем и следующем кадре
- Выбрать медианное отношение
- Попытаться ещё улучшить качество (см. Дополнительные задачи)