Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Домашнее задание 1: оптический поток и динамика видео

Выбран вариант B: учебная система анализа движения.

Проект сравнивает два подхода к оптическому потоку:

  • Lucas-Kanade (LK): разреженный поток по ключевым точкам.
  • Farneback: плотный поток по всем пикселям кадра.

Если пользовательское видео не передано, скрипт автоматически создаёт учебный ролик data/demo_motion.mp4 с несколькими движущимися объектами, слабым движением камеры, тенями, шумом и участком motion blur. Это делает работу полностью воспроизводимой.

Структура

  • src/motion_analysis.py - полный пайплайн анализа движения.
  • data/demo_motion.mp4 - автоматически генерируемое учебное видео.
  • outputs/ - визуализации, маски, метрики и краткий отчёт.
  • HW.md - исходное условие домашнего задания.
  • Seminar_4.md - материалы семинара по оптическому потоку.

Запуск

Установить зависимости:

pip install -r requirements.txt

Запустить на автоматически созданном видео:

python3 src/motion_analysis.py

Запустить на своём видео:

python3 src/motion_analysis.py --input path/to/video.mp4 --max-frames 160

Что делает пайплайн

  1. Загружает видео или создаёт синтетический демонстрационный ролик.
  2. Находит ключевые точки через cv2.goodFeaturesToTrack.
  3. Отслеживает их методом Lucas-Kanade через cv2.calcOpticalFlowPyrLK.
  4. Строит траектории движения в координатной системе кадра.
  5. Считает плотный поток Farneback через cv2.calcOpticalFlowFarneback.
  6. Визуализирует плотный поток в HSV-представлении.
  7. Выделяет движущиеся области по модулю потока.
  8. Сохраняет количественные метрики и краткий error analysis.

Основные параметры

Для LK используются:

  • maxCorners=220 - максимальное число ключевых точек.
  • qualityLevel=0.01 - минимальное качество углов.
  • minDistance=7 - минимальное расстояние между точками.
  • winSize=(21, 21) - окно поиска LK.
  • maxLevel=3 - число уровней пирамиды.

Для Farneback используются:

  • levels=3 - уровни пирамиды.
  • winsize=21 - размер окна усреднения.
  • iterations=3 - итерации на каждом уровне.
  • poly_n=5, poly_sigma=1.2 - параметры локальной полиномиальной аппроксимации.

Артефакты

После запуска в outputs/ появляются:

  • lk_trajectories_overlay.png - траектории LK поверх последнего кадра.
  • lk_trajectories_coordinates.png - траектории LK в координатной системе кадра.
  • farneback_flow_hsv.png - карта плотного потока Farneback.
  • farneback_motion_mask.png - бинарная маска движения.
  • farneback_magnitude_heatmap.png - тепловая карта модуля потока.
  • farneback_magnitude_histogram.png - распределение средней величины движения.
  • metrics.json - численные метрики.
  • analysis_report.md - краткий отчёт по результатам.

Анализ ошибок

Lucas-Kanade устойчив на текстурных углах и хорошо показывает отдельные траектории. Он теряет точки, когда объект выходит из кадра, появляется motion blur, область слабо текстурирована или движение слишком быстрое для выбранного окна.

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

В реальной задаче LK лучше выбирать для лёгкого трекинга характерных точек и оценки локальных траекторий. Farneback лучше подходит, когда нужна плотная карта движения, примерная сегментация движущихся областей или визуальный анализ всего кадра.

About

hw1

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages