Visual Vibration Tracking 0.2
Загрузка...
Поиск...
Не найдено
Оптический (визуальный) трекинг вибрации

Описание модулей

Программа глобально имеет 4 модуля (режима работы). Фактически они располагаются в порядке, который предполагается как наиболее логичный способ использования программы.

Каждый имеет модуль имеет общий интерфейс взаимодействия:
Выход из режима на клавишу 'Q'
Пауза на 'пробел'

1. Калибровка камеры

Перед началом работы с записанными видео с конкретной камеры необходимо выполнить её калибровку. Она выполняется один раз, после чего полученные в её процессе значения будут применены при удалении дисторсии.

Внимание
У камеры могут быть несколько режимов съёмки (например, как у гоупро: широкоугольный, средний, узкий). Как правило, они реализованы программно.
При смене режима съёмки необходимо ещё раз выполнять калибровку, так как параметры дисторсии изменяются вместе с этим режимом.
Даже если линза камеры осталось той же (не поменяла своих параметров), сама картинка была программно растянута/сжата, а это в свою очередь внесло новые искажения.

2. Удаление дисторсии

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

3. Мониторинг вибрации

Основной режим работы приложения. Описание управления и пояснения представлены ниже.

4. Увеличение вибрации (визуальное)

Выполняется визуальное увеличение вибрации (маленьких и незаметных движений).

Управление в программе

Стандартный режим

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

Режим выбора области интереса (ROI)

Этот режим предназначен для выделения (с помощью зажатой ЛКМ) области интереса - прямоугольника, в котором впоследствии будут найдены наиболее подходящие для трекинга точки (см. детектор углов Харриса и cv::cornerMinEigenVal())
После "отпускания" ПКМ режим будет автоматически изменён на Стандартный, после чего с найденными в области интереса точками будут производиться те же действия, что и с "одиночными" (описано выше), за исключением того, что вместо выведения максимальной магнитуды справа от точки в виде текста, эта максимальная магнитуда будет отображаться в виде цвета точки.
Для наглядности снизу появится градиентная шкала, чтобы можно было соотносить информацию о цвете с частотой в цифрах

Стандартный режим

Этот режим ставит на паузу программу нажатием на 'пробел'

Блок-схемы основных алгоритмов

Блок-схема калибровки камеры

Блок-схема удаления дисторсии

Блок-схема основной части программы

Для лучшего понимания, мне кажется, стоит сначала ознакомиться с FrameHandler (класс, отвечающий за работу с видео), а также LonelyPointHandler и ColoredPointHandler

См. также
VibrationDetector VibrationDetector::ExecuteVibrationDetection() - то, по чему строилась блок-схема
VibrationDetector::TrackAndCalc() - то, где трекаются точки и вызывается метод БПФ
VibrationDetector::ServeTheQueues() - то, где "обслуживаются" очереди на удаление/добавление точек. Не знаю, на сколько правильно реализовывать это таким путём, но мне в голову пришла такая идея.
Вызывается она на каждом кадре после вычисления новых позиций, чтобы не нарушить работу TrackAndCalc().

Блок-схема усиления движения