基于光流场的运动分析

1.实验原理

1.1光流概念

光流(Optical Flow)是空间运动物体在观测成像面上的像素运动的瞬时速度。光流场(Optical Flow Field)是指图像灰度模式的表面运动(即图像灰度的变化)。
1.2光流场工作原理
我们利用算法来实现。
假设:
1.连续的两帧图像之间,目标像素的亮度不改变
2.相邻的像素之间有相似的移动

设图像在像素点,时刻t的灰度值为I(x,y,t)。在经过了时间后,此像素在下一帧移动了,此时的灰度值为,而且亮度不变,因此
在这里插入图片描述

将上诉右式子做泰勒展开
在这里插入图片描述

在消去I(x, y, t)并忽略掉阶数大于或等于2的项后,得到光流约束方程
在这里插入图片描述

其中在这里插入图片描述

和分别是图像的梯度,是图像沿着时间的梯度。
利用第二个假设,算法使用3 X 3的窗口。因此这个窗口中有9个像素点满足公式

用最小二乘法解得

以上都是基于运动距离较短的情况,如果在短时间内运动的距离很长,那么我们可以通过图像金字塔将大幅度的运动压缩为小幅度的运动。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

2.实验步骤

2.1视频准备

首先固定相机的位置,对目标物体的运动进行拍摄,保持光照亮度不变

2.2程序实现

为了实现跟踪目标物体的任务,我们将其转化为跟踪目标物体上特定点的任务。
我们调用库中的函数来实现
首先读取第一帧,将彩色图像转化为灰度图,然后利用cv2.goodFeactureToTrack()找到角点

ret, old_frame = cap.read()  
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)    
p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)

然后迭代的使用LK算法实现目标点的跟踪

nextPts,status,err = cv.calcOpticalFlowPyrLK(   prevImg, nextImg, prevPts, nextPts[, status[, err[, winSize[, maxLevel[, criteria[, flags[, minEigThreshold]]]]]]])  
prevImg表示上一帧图像、nextImg表示当前帧图像,prevPts表示上一帧图像的角点,nextPts表示当前帧图像的角点、winSize表示局部运动中金字塔的窗口大小,maxLevel表示金字塔的层数,criteria表示终止条件。

2.3绘制运动轨迹

 	for i, (new, old) in enumerate
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值