Выбран вариант 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- Загружает видео или создаёт синтетический демонстрационный ролик.
- Находит ключевые точки через
cv2.goodFeaturesToTrack. - Отслеживает их методом Lucas-Kanade через
cv2.calcOpticalFlowPyrLK. - Строит траектории движения в координатной системе кадра.
- Считает плотный поток Farneback через
cv2.calcOpticalFlowFarneback. - Визуализирует плотный поток в HSV-представлении.
- Выделяет движущиеся области по модулю потока.
- Сохраняет количественные метрики и краткий 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 лучше подходит, когда нужна плотная карта движения, примерная сегментация движущихся областей или визуальный анализ всего кадра.