目标识别与追踪 计算机视觉项目实战-背景建模与光流估计( 三 )


开运算操作函数介绍
= cv2.(img, cv2., )
img:原始图像
cv2.:表示进行开运算,相同的我们所知道的还有闭运算 。
:卷积核,同样我们对开运算的卷积核要进行设定 。
然后,= cv2.这里是寻找轮廓,这里注意的是新的版本返回的是两个数值,旧的版本是3个数值 。
for c in contours:#计算各轮廓的周长perimeter = cv2.arcLength(c,True)if perimeter > 188:#找到一个直矩形(不会旋转)x,y,w,h = cv2.boundingRect(c)#画出这个矩形cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
遍历每一个轮廓,然后计算轮廓的周长,进行筛选如果周长的数值大于188,那么我们把这个矩阵给画出来 。
cv2.imshow('frame',frame)cv2.imshow('fgmask', fgmask)k = cv2.waitKey(150) & 0xffif k == 27:breakcap.release()cv2.destroyAllWindows()
然后这里就结束了 。我们来看一下视频 。
这个是项目中的视频的结果 。然后我们继续做一下开头投篮的一个背景建模视频 。
这里和官方视频有很大的差距,分析了一下主要原因是由于我们手工录制的视频他一直在发抖,摄像头一直在抖动,稳定性不高导致的背景中的噪音点较多,但是我们去掉这个缺陷之后呢,可以看到运动中的篮球和人物展示的效果都是非常不错的 。篮球在空中飞的过程中刻画的也是非常的清晰 。
【目标识别与追踪计算机视觉项目实战-背景建模与光流估计】??光流估计
光流是空间运动的物体在观测成像平面上的像素运动的“瞬时速度”,根据各个像素点的速度矢量特征,可以对图像进行动态分析,例如说目标追踪 。

目标识别与追踪  计算机视觉项目实战-背景建模与光流估计

文章插图
这里我们假设车在移动的过程中,第一帧和第二帧图像,他们像素点的移动过程是分速度的大小的,右图所示 。这个过程中有很多个小概念需要知道:
1.亮度恒定:同一点随着时间的变化,我们认为他的亮度是不发生改变的 。也就是说第一帧和第二帧我们忽略了亮度对于光流的影响 。
2. 小运动:随着时间的变化不会引起位置的剧烈变化,只有在小运动的情况下才能用前后帧之间的单位位置变化的偏导数 。
3. 空间一致:一个场景上临近的点投影到图像上也是临近点,且临近点速度一致 。因为光流法基本方程约束只有一个,要求x,y方向的速度,有两个位置变量,所以需要联立n个方程求解 。
Lucas-算法
根据上述的条件,我们可以进行一下约束方程的书写:
这里很简单,就是说前后帧的图像进行了位置的一个等式,我们认为他是一个小运动 。且符合亮度恒定,然后进行了一阶泰勒公式展开 。得到的结果进行左右约掉了一部分,然后我们可以得到:
继续推导:
这里面有两个未知数,u和v 。那么我们至少要需要两个方程才能解决这个问题 。所以我们构造方程使用了多个点进行构造,这就符合了我们第三个条件,就是空间一致 。
这里面我们用了25个方程来构造这个函数,那么2个未知数,用了25个方程他有一个什么好处呢?就是说和我们在机器学习中的一元线性回归任务当中基于很多点选择一条完美的直线很类似,就是要把这个解弄得完美一点 。
差不多这个意思 。
然后我们最后通过最小二乘法进行了求解,但是这里有一个问题就是出现了一个逆矩阵,那么我们知道逆矩阵是要符合条件的,那么就需要λ1和λ2,当是角点的时候 。才可逆 。所以我们在检测的过程中拿到的点都要是角点才可以 。