引言
数字视频系统在智能交通、图像识别以及安防监控等领域,都得到了广泛的应用,运动目标检测作为数字视频系统的一个重要环节,是后续目标识别、目标跟踪等应用的基础。本文提出了一个基于DM642的实时运动目标检测系统方案,依靠DM642芯片强大的运算能力,使目标检测的数据吞吐量及实时性得到保证。本方案设计合理、可扩展性强,具有实际应用价值。
1 运动目标检测算法
实现运动目标检测的算法很多,一般有光流法、背景差分法、相邻帧间差分法等。光流法通过求解光流方程来实现运动检测,其算法复杂、计算量大,且较难满足实时要求;而相邻帧间差分法虽然算法简单、运算量小,但抗干扰能力很差,检测效果不太理想;而背景差分法算法简单、运算量小、且抗干扰能力强,因此本文采用该方法实现运动目标检测。具体步骤如下:首先获取数字图像进行预处理,之后采用背景差分法实现运动检测,再对所得的图像用大津法进行自适应阀值分割,最后通过滤波得到检测出的运动目标。图1是本文运动目标检测的流程图。
在CCS中配置系统的视频输入以及视频输出FVID驱动,从TMS320DM642的VPORT口获取到摄像头采集的视频流所对应的数字YUV视频流,将其存放到缓存IMG_CURRENT、IMG_PREVIOUS、IMG_BACKGROUND里面,其中IMG CURRENT存放的是当前的图像,IMG_PREVIOUS存放的是上一次存放的图像,IMG BACKGROUND存放的图像作为背景图像。图像的分辨率为720×576,每个分量为8比特。由于获取的视频图像不可避免地含有噪声,必须对这些噪声加以抑制,本文采用高斯滤波对所得到的YUV视频信息进行高斯滤波处理。滤波后的图像保存到IMG_CURRENT缓存中。
1.2 背景差分法处理
视频图像经过预处理后,采用背景差分法检测出运动图像,步骤如下:
(1)获取一帧图像作为初始的背景Bg(x,y,tk);
(2)间隔4帧再次获取下一幅图像,作为当前图像Curr(x,y,tk);
(3)按照背景差分法得到差分图像Sub(x,y,tk)=|Curr(x,y,tk,)-Bg(x,y,tk);
(4)统计所有和值,与设定的阀值FF相比较,如果小于阀值FF,按下式进行背景更新Bg(x,y,tk)=α*Curr(x,y,tk)+(1-α)*Bg(x,y,tk-1);
(5)重复前面(2)到(3)的步骤。
f(x,y,tk)=0 当TR<10
即当没有物体运动时,获取的二值化图像应为全黑,这样后续的形态学处理只需对有物体运动时的二值化图像进行处理即可。图2分别为无物体运动时直接二值化和采用改进方法二值化后的结果。其中a)为直接采用大津法获取的阀值分割没有物体运动时的差分图像的结果,可以看出图中布满噪声;b)为对大津法获取的阀值进行判断后,没有物体运动时的差分图像分割的结果,可以看出此时图像为全黑,也即没有运动物体,这与实际情况相符,简化了后续的形态学处理。
2.1 硬件平台
硬件平台采用TMS320DM642作为CPU,该芯片主频600MHz。视频编解码芯片采用SAA7115H和SAA7105H。另外采用了两片SDRAM(共4M×64bi-t)芯片作为存储介质,用于图像的暂时存储,同时还采用一片FLASH用于实现自启动,硬件平台框图见图3。
此硬件平台从摄像机获取模拟图像,经过SAA7115解码得到标准的。BT.656格式的YUV4:2:2数字图像码流,然后通过DM642的EDMA功能将码流暂存到SDRAM,再用算法进行处理后,然后通过DM642的EDMA功能送入到SAA7105进行解码,经过CVBS引脚输出,这样系统的处理结果就可以在显示器上实时地显示。
系统的软件在TI提供的集成开发环境CCS完成,编程用C语言和汇编语言实现,软件采用TI推荐的RF-5架构,采用了三个线程tsk_inpu-t、tsk_process、tsk_output。
软件的执行流程如下:
(1)TMS320DM642的初始化。包括初始化BIOS、CSL、设置CACKE;
(2)初始化RF-5模块。用CHAN_init,ICC_init,SCOM_init分别初始化CHAN模块、ICC模块、SCOM模块;
(3)DSP/BIOS根据操作系统的调度规则环调度执行tsk_input、tsk_process、tsk_output三个线程。其中tsk_inpufi通过按照顺序调用FVID_create、FVID_control、FVID_aUoc函数实现对FVID驱动的调用,打开输入通道,实现得到SAA7ll5获取的BT.656格式的YUV422数字视频码流。tsk_process负责对tsk_input线程获取的数字图像进行运动图像检测算法的处理,其中要调用到上一节所述的算法函数,经过处理,运动目标被分割出来。tsk-output负责调用FVID_create、FVID_control、FVID_alloc函数,打开输出通道实现对已经分割处理的数字视频流通过SAA7105输出,在显示器上予以显示。这三个线程在DSP/BIOS的调度下循环并行运行,三个线程之间的数据交换通过SCOM模块实现。
上述程序中,核心程序为tsk_process线程,其主要代码如下:
While(1)
{……
Background()://获取背景并根据条件更新
Diff_picture()://背景与当前图像差分
Otsu_binary(): //由改进的大津法进行阀值分割并二值化
Filter_obitct()://对二值化图像进行滤波得到运动的物体,即为检测的结果。
……
}
2.3 软件优化
应用TMS320DM6425开发运动目标检测系统时,为保证检测结果的高效、实时,软件代码的优化显得尤为重要。基于TMS320DM642编程时,我们参照该芯片的特点在编写算法时进行了如下的优化:
(1)使用流水线技术。采用编译选项-o2、-o3,充分利用软件流水线方式提高运行效率。
(2)对寄存器进行优化,通过CCS自带的性能分析工具Profiler对调用频率高的C语言代码采用汇编语言改写,并采用汇编优化器进行优化,使代码的执行效率得到最大限度提升。
2.4 实验结果
基于DM642的运动目标检测系统实验结果如图4所示。
一周热门 更多>