基于CamShift算法和嵌入式的目标跟踪系统

2018-10-12 08:06胡竞文
无线互联科技 2018年18期
关键词:投影图舵机直方图

李 如,胡竞文

(河南科技学院,河南 新乡 453003)

现代社会对小区和居家安全的关注和要求不断提高,运动目标的识别与跟踪技术也已经迅速发展成为现代信息处理领域中一项非常重要的技术,在许多领域都发挥着不可代替的作用。目前,目标检测与跟踪算法已经较为成熟,但其在与嵌入式结合方面的应用研究还处于探索阶段,很多识别算法还未移植到相关平台。

由于嵌入式和各类开源硬件具有方便携带、占位置小等优势,故在无法连接计算机的地方,如野外、便利店门口、街口等地,可实时完成对采集数据的处理。因此,根据上述情况设计一个能够实时调用识别算法,在计算机无法装配的地方实现对目标检测与跟踪系统是本次项目的主要目的。

1 系统功能与设计

本系统的实现主要可分为两个步骤。第一步是摄像头传回实时视频的数据采集和对视频的逐帧数据处理,完成后即可获得视频每一帧中目标中心坐标。继而在第二步中转换成电信号传递给控制摄像头位置的舵机以实现摄像头对目标的跟踪。

1.1 数据采集

系统中的Raspberry通过排线连接摄像头模块(Pi Cam)[1]传回实时视频。并使用GitHub上提供的MMAL库和Raspivid的源代码,使其可以通过OpenCV进行图像处理。

程序运行时会默认解析上次运行时录制的视频文件,我们可以检测该视频中的运动。如果不存在存储的视频,程序会转而调用摄像头数据。程序中定义了区域图像的最小像素尺寸,为了防止像素级别的光线变化和尘埃影响,处理图像数据之前进行降噪,过滤掉对于运动跟踪无用的数据。

1.2 数据处理

数据处理主要是利用Camshift算法对图像的每一帧进行处理。具体做法是遍历摄像头数据流的同时,程序中的camera.read()将返回一个二元组[2]。首值为grabbed,将用于判断读取frame的缓冲是否成功。末值则为frame的值。

程序通过调用OpenCV中的函数对摄像头中的图像进行处理,并将运动跟踪数据传回。数据在终端进一步转换为Arduino可以运行的源文件,进而控制舵机使摄像头进行X轴和Y轴双方向转向。

进行运动分析之前,为了提高精确度并降低数据量和方便计算机进行颜色之间的对比处理,故先进行反向投影图处理。随后程序将图像帧进一步转换为灰阶图像,并调整到合适的大小,去除无用的RGB格式有利于压缩数据提高运行速度。而使用高斯模糊平滑图像是对一个11×11的区域的像素强度进行平均能进一步过滤使检测算法失效的高频噪音。

1.2.1 获取反向投影图

单帧图像转换为HSV图像后,即可对其进行反向投影处理。反向投影的原理是对需要处理图像的H分量单独作直方图,其中,不同H分量值的概率和像素总数各不相同,查找H分量大小的概率,可以到颜色概率查找表查找。再将图像中像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图。所得到的输出的颜色概率分布图为一个灰度图像。

其具体步骤是:

(1)对测试图像中的每个像素( p(i, j) ),获取色调数据并找到该色调( H ij, S ij )在直方图中bin的位置。

(2)查询模型直方图中对应bin的数值。

(3)将此数值存储在新的反射投影图像中。也可以先归一化直方图数值0~255,这样可以直接显示反射投影图像。

对每个像素进行(1)~(3)步骤的循环即可完成对一整帧的反投影处理。而在OpenCV中,使用calcBackProject()函数便可进行上述处理。

反向处理后可得到目标图像的颜色直方图,以及反向投影,此输出与输入图像同等大小,其上的像素表征一种概率,即全图上该点是目标图像一部分的概率。像素点亮度大小直接与该点是否属于原图的概率相关[3]。

1.2.2 利用CamShift算法获得移动轨迹

CamShift算法的程序实现步骤如下:

(1)提取运动物体的轮廓,并从原图中获取运动图像的信息。对这个信息进行反向投影,获取反向投影图。根据反向投影图和输入的方框进行meanshift迭代,由于它是向重心移动,即向反向投影图中概率大的地方移动,所以始终会移动到目标上。

(2)运用运动检测算法将运动的物体与背景分割开来。程序通过两方相应的像素强度差的绝对值来计算两帧的不同。如果两帧的数据差少于运动跟踪的设定值,将其设置为黑色。若差值大于设定值,则将其设定为白色。

(3)下一帧图像用上一帧输出的方框来迭代即可。

2 基于移动跟踪的舵机驱动控制

完成图像处理后,视频中跟踪目标圈定的中心坐标轨迹将写入outpos文件,示例如图1所示。其中命令行中每一行“1”代表上一行坐标可以写入文件。为了避免静止不动的镜头,没有识别时的(0,0)坐标均不会写入outpos文件。

通过Raspberry上Python程序对坐标的处理,即可得到控制方向的4位二进制码用于控制舵机方向,处理方式如图2所示。高两位控制垂直方向,低两位控制水平方向。1为转动,0为静止。使得摄像头可以跟随追踪物体移动。

3 结语

通过上述过程即可实现在嵌入式等硬件平台上的实时目标跟踪与处理。嵌入式与识别算法的结合也是目前探索领域的大势所趋。采用OpenCV的开源算法也使设计的工作量减少,高效地实现识别跟踪。系统采用的嵌入式平台能够满足实时性和小型化的要求。可以运用于各种场合,如街口、商店等地。本系统的与日常使用的监控设备相比较为突出的优点是可以根据用户的需求更改跟踪目标。

图1 获得坐标文件outpos

图2 舵机转动控制

猜你喜欢
投影图舵机直方图
基于分裂状态的规范伪括号多项式计算方法
符合差分隐私的流数据统计直方图发布
含齿隙弹载舵机的全局反步模糊自适应控制
用直方图控制画面影调
基于dsPIC单片机的飞艇舵机控制实现
基于高速同步485总线通信的多通道舵机控制器设计
基于空间变换和直方图均衡的彩色图像增强方法
Wendt操作对纽结和链环影响的若干规律
图解荒料率测试投影图及制作方法
虚拟链环的Kauffman尖括号多项式的Maple计算