运动目标检测——光流法及opencv代码实现
运动目标检测技术旨在从序列图像和背景图像中提取变化区域,常用于视频监控、图像压缩、三维重建、异常检测等领域。
运动目标检测的主要方法有帧差法、背景差法和光流法。光流法来自仿生学,更接近直觉。大量昆虫的视觉机制都是基于光流法。
20世纪50年代,心理学家Gibson在其著作《视觉世界的感知》中首次提出了基于心理学实验的光流法的基本概念,但直到20世纪80年代,Horn、Kanade、Lucash和Schunck才创造性地将灰度与二维速度场联系起来,引入了光流约束方程的算法,为光流计算做了基础工作。
光流:由于目标对象或相机的移动,图像对象在两个连续图像中的移动。
球在五个连续帧内运动形成的光流球在五个连续帧内运动形成的光流一般来说,对于一个画面序列,是找出连续帧之间每幅图像中每个像素的运动速度和方向(两个连续帧中一个像素的位移矢量)的光流场。
点A在t帧中的位置为(x1,y1),点A在t帧中的位置为(x2,y2),所以像素A的位移向量为(UX,vy) = (x2,y2)-(x1,y6550。
如何知道帧t+1中A点的位置,涉及到不同的光流计算方法。主要有四种方法:基于梯度的方法、基于匹配的方法、基于能量的方法和基于相位的方法。
光流法依赖于三个假设:
根据光流场中二维矢量的密度,光流方法可以分为密集光流和稀疏光流。
基于区域匹配生成的密集光流场基于区域匹配生成的稀疏光流场只跟踪特征明显的组点(比如角点),所以计算开销小。
基于特征匹配生成的稀疏光流场基于特征匹配生成的稀疏光流场/OpenCV Doc/2 . 3 . 2/HTML/Modules/Video/Doc/Motion _ Analysis _ and _ Object _ Tracking.html # calcopticalFlowBarnback
(1)calcOpticalFlowPyrLK
基于金字塔LK光流算法,计算了部分点集的稀疏光流。
参考论文《Lucas Kana de特征跟踪器的金字塔实现算法描述》。
(2)calcOpticalFlowFarneback
基于Gunnar Farneback算法的稠密光流计算。
参考论文“基于多项式展开的两帧运动估计”。
(3)CalcOpticalFlowBM
采用块匹配法计算光流。
(4)计算流程
基于Horn-Schunck算法的稠密光流计算。
参考文件“确定光流”
(5)计算流程f
论文“简单流:非迭代、次线性光流算法”的实现
LK光流法效应