这是一个基于树莓派和卡尔曼滤波原理的,能够自动调动摄像头实时追踪目标的目标识别与跟踪系统。
一、项目概述
本项目利用树莓派平台采集视频图像,利用opencv计算机视觉库识别视频序列中的目标,构建模型算法预测目标运动轨迹,实现目标识别与跟踪功能,研究的内容主要包括:
(一)动目标识别跟踪算法
(二)树莓派硬件观测系统设计
(三)目标智能车系统设计
二、原理分析
整个项目可以划分为以下几个部分:数据采集、目标识别、目标跟踪与摄像头转动
系统流程图如下:
(一)数据采集
采用USB摄像头与树莓派4b进行视频流的获取以及每帧图像的处理。
(二)目标识别
首先将图像由RGB模型转为HSV模型,通过人为设定的HSV阈值对图像进行二值化处理,得到仅显示目标的图像(会掺杂些许噪声),然后进行开闭操作滤除噪声以及平滑目标图像边界,然后通过最大面积判决器框出目标图像,最后基于目标图像识别框得到目标的质心位置。
-
RGB模型转HSV模型 将颜色的描述由红R、绿G、蓝B的混合转为色调H、饱和度S、亮度V。HSV模型对颜色的描述更加直观,更加易于处理。
RGB转HSV公式: -
二值化处理
利用PS获取目标颜色的HSV阈值范围,将HSV图像中,HSV参数处于阈值范围内的像素点设为白色;HSV参数位于阈值范围以外的像素点设为黑色,从而将目标区别于其他物体,在二值化图像中显示出来。 -
膨胀
膨胀是一种卷积操作,它将目标像素的值替换为卷积核覆盖区域的局域最大值。 -
腐蚀
腐蚀是与膨胀相反的操作,腐蚀操作计算的是核覆盖范围内的局部最小值。 -
开操作
先将图像进行腐蚀,然后再膨胀。具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用,用于去除噪声。 -
闭操作
先对图像做膨胀处理,然后再进行腐蚀处理。具有填充物体内细小空洞,链接临近物体和平滑边界的作用。
(三)目标跟踪
为解决卡尔曼滤波发散的问题,在扩展卡尔曼滤波的基础上加入自适应因子以改善系统跟踪性能。
-
扩展卡尔曼滤波
扩展卡尔曼滤波(Extended Kalman Filter,EKF)是标准卡尔曼滤波在非线性情形下的一种扩展形式。EKF的基本思想是利用泰勒展开,通过舍弃非线性项,将非线性模型转变为线性模型,然后采用卡尔曼滤波框架对信号进行滤波。
EKF的状态转移方程和观测方程为: EKF分为预测(predict)和更新(updata):
预测: 更新: 迭代过程如下: -
渐消滤波原理
卡尔曼滤波具有无限增长的记忆性,它获得的滤波值使用了k时刻以前的全部观测数据。对于动态模型来说,在进行滤波时,应加大新数据的占比,减小旧数据的作用。
文献[1]提出了自适应渐消因子卡尔曼滤波的方程,相较于扩展卡尔曼滤波,仅仅在的计算中引入了渐消因子: -
渐消因子分析
-
渐消因子选择
-
异常处理
(四)摄像头转动
-
摄像头转动机制 本系统采用四相五线减速步进电机控制摄像头的转动。当步进驱动器接收到一个脉冲信号时,驱动步进电机按设定方向转动一个固定角度(步进角)。通过控制脉冲的个数来精确地控制步进电机的角位移量,通过控制脉冲的频率来控制电机转动的速度及加速度,从而达到调速的目的。
(a)本系统的步进电机为四相电机,1励磁方式驱动,通过给ABCD四相依次通电来实现转动。
(b)电机的驱动
每一相给一个持续0.005s的高电平和0.00001的暂停时间,从而实现最小转动角度。在高电平段,该相电机通电;在低电平段,该相电机做减速运动。只有通过先加速后减速的方式才能较平稳地实现较小的步距角,进而实现高精度的镜头转动。对于大角度的转动,则可以通过给出连续多个脉冲,使步进电机实现整倍于步距角的转动。 -
摄像头转动控制 为简化摄像头转动,避免引入一些不必要的噪声,我们仅将摄像头的转动限制在水平方向。在帧图像中建立如下坐标系:
由于在观测时,摄像头转动周期短,目标相对于摄像头转轴中心仅改变了小角度,故可将目标实际运动的距离等效成投影在成像平面上的距离。
三、实验结果
(一)系统实物
- 目标系统
- 观测系统
- 减速步进电机及驱动芯片
(二)图像处理结果
- 识别系统
(1)输入图像二值化 将满足阈值的像素点设为白色,其他像素点设为黑色,从而将目标区别于其他物体地显示在二值图像中。(零星白点为环境噪声)
(2)二值化图像开闭操作处理
用滤波器大小为(30,30)的开闭操作处理二值化图像,得:
经开闭操作后,环境噪声被滤除,且目标物体边缘得到平滑处理。
(3)识别结果
采用最大面积判决器框选出目标物体,得:
此时目标识别程序运行于笔记本平台,随着目标的摆动,程序每秒处理的帧数会随之改变,平均下来,程序每秒能处理的帧数大约为36.06。后期将目标识别程序移植到树莓派,但限于树莓派算力,实时处理的fps大约只有12.8~13.4。 - 跟踪系统
(1)前三周基于扩展卡尔曼滤波
a、三种路径测试
设计目标系统三种不同的运动模式以检测跟踪系统的鲁棒性,其中预测与测量曲线中,红色曲线为预测点构成的曲线,蓝色曲线为实际测量点构成的曲线。
(a)匀速圆运动
预测与测量曲线
预测协方差图 对于匀速圆运动模式,除去前25帧存在的较大“启动误差”外,预测值与实际测量值仅有细微误差,可得结论:跟踪系统对于非线性不明显的非线性模型可以做到较好的预测。
(*启动误差:Kalman滤波器的初始位置位于帧图像左上角,需要一定的时间,才能收敛到目标实际位置,在该过程中,预测位置与实际目标距离具有较大的误差)
(b)z字运动
预测与测量曲线
预测协方差图
从预测跟踪曲线图中可以看出,跟踪系统对伴有噪声的测量轨迹起到了平滑抗噪的作用;且由预测协方差图可以得出结论:跟踪系统虽然在目标方向突变时,会有方差波动,但方差总体处于较低水平,即对方向突变的非线性运动也可起到较好的跟踪效果。 (c)先匀速后加速圆运动 预测与测量曲线 预测协方差图 由预测跟踪曲线可以看出,外圈(加速部分)虽然预测曲线在一定程度上偏离测量曲线,但同时也基本反映了目标的运动轨迹;从预测协方差图可以看出:在内圈(匀速部分),预测误差相对较小;但随着目标由匀速转为加速(内圈运动到外圈),预测误差相较于匀速部分出现较大起伏,但整体依然处于低水平。由此,可以得出,目标跟踪系统可以较好地跟踪非线性运动目标,但随着非线性程度加大,预测误差会出现较大波动。
b、异常处理测试
(a)无异常处理时目标跟踪丢失现象
(b)添加异常处理后
ⅰ低速或静止状态下的长时间强干扰 若目标不动,则无论错误识别多久,只要识别框没有恢复到异常前的位置,就一直会采用异常跟踪:跟踪点保持异常前的位置,不受异常的影响。
ⅱ运动状态下短时间强干扰
可见添加异常处理模块后,当识别框发生短暂丢失时,跟踪点(红点)不会被其干扰,而保持在目标轨迹上。
(2)最后一周采用自适应卡尔曼滤波
a、在预测方差较小,即对预测模型信任度较高的情况下,对比卡尔曼滤波与自适应卡尔曼滤波
ⅰ、一般卡尔曼滤波
(红色曲线为滤波预测曲线,蓝色曲线为测量曲线)
在一般卡尔曼滤波下,由于模型无法准确描述目标的运动,而测量的作用小,导致在目标出现方向突变时,系统滤波轨迹会较大地偏离目标实际轨迹且收敛速度慢,无法准确“描述”目标的运动轨迹,难以达到实用的要求。
ⅱ、自适应卡尔曼滤波
(红色曲线为滤波预测曲线,蓝色曲线为测量曲线)
对比可以看出,自适应卡尔曼滤波的预测曲线相对于一般卡尔曼滤波更加贴合实际测量曲线,可见自适应卡尔曼滤波可以自适应地调接测量值在滤波过程中的权值,从而解决卡尔曼滤波器发散的问题。
ⅲ、误差对比图
对比得出,一般卡尔曼滤波在目标运动方向突变时,会出现较大的误差,从而导致,滤波曲线较大的偏离目标实际运动轨迹;而自适应卡尔曼滤波无论是在线性运动时,还是在方向突变运动时,都一直保持低水平误差,由此可以看出自适应卡尔曼滤波对运动模式多变的目标系统具有更好的自适应性。
b、运动目标跟踪视频
实验结果见Github。
结果分析:目标低速的情况下基本能保持目标位于摄像头视野中央。
原因分析:
(a)摄像头传输图像速率慢;
(b)减速电机的转速较慢;
(c)树莓派算力有限,无法快速的处理图像;
(d)未引入反馈,无法采用类似pid算法来做到精确控制;
(e)模型存在系统误差,且目标和系统均存在抖动。
四、调试过程问题记录
调试过程见Github
五、各周工作及人员分工情况
略
六、收获与总结
(一)对已有知识的扩展:
a.利用我们组成员参加智能车竞赛留下的智能车和参加电子设计竞赛搭建的树莓派平台组合搭建出了两套系统—观测系统和目标系统
b.对我们随机课做的kalman滤波课题做了更加深入的理解且应用于实践,同时在此基础上进行了拓展kalman和自适应kalman的研究和应用。
(二)新收获的知识:
a.学习到了图像处理的一些基本知识,实践实现了颜色识别。
b.将kalman滤波应用与目标跟踪,并将识别与跟踪结合,同时在实践中感悟到识别与跟踪的关系—不能单靠识别,识别容易丢失异常;跟踪依靠识别,跟踪起到平滑(防抖,抗噪)和预测作用。
(三)能力方面:
a.动手实践能力
b.理论研究能力
c.数据处理能力
d.项目规划统筹能力
e.团队分工合作能力
f.系统调试能力
g.异常处理能力
七、参考文献
[1]徐定杰,贺瑞,沈锋,盖猛.基于新息协方差的自适应渐消卡尔曼滤波器[J].系统工程与电子技术,2011,33(12):2696-2699.
[2]彭丁聪.卡尔曼滤波的基本原理及应用[J].软件导刊.2009,(1): 32-34
[3]安德里安·凯勒,加里·布拉德斯基.学习OpenCV 3.清华大学出版社
[4]图像处理:图像腐蚀、膨胀,开操作、闭操作:
https://blog.csdn.net/qinghuaci666/article/details/81749427
[5]OpenCV颜色识别:
https://blog.csdn.net/chen134225/article/details/80812591
[6]卡尔曼滤波系列–(二)扩展卡尔曼滤波:
https://blog.csdn.net/weixin_42647783/article/details/89054641
[7]四相五线步进电机:
https://blog.csdn.net/qq5132834/article/details/51452200
[8]Arduino基础入门篇26-步进电机:
https://www.jianshu.com/p/877006ab4859
我在该项目中担任项目负责人,负责项目的统筹、人员的分工、目标跟踪模块的设计与实现。
项目成果: https://github.com/Yangliangzhe/Target-Recognition-and-Tracking-System-based-on-Raspberry-PI