引言
ADSPBF561处理器是ADI公司推出的针对多媒体和通信应用的一款高性能产品,拥有2个600 MHz的DSP内核,具有运算能力强大、功耗低的特点,现已广泛应用于图像处理、目标跟踪领域。本文以ADSPBF561为核心设计了目标跟踪系统,并根据该系统实时显示提示信息的需要开发了英文字符库,实时显示目标跟踪过程的位置、速度及加速度等信息,以便用户更好地了解目标的运动状态。
1基于ADSPBF561的目标跟踪系统
目标跟踪就是要实时地搜索、识别图像目标,确定其位置并跟踪。本设计以ADI公司ADSPBF561为核心,通过CCD摄像头采集标准的PAL制隔行扫描全电视信号,然后在Visual DSP开发平台上对目标跟踪算法进行验证,从而实现了对目标的实时跟踪。整个系统的结构框图如图1所示。
图1目标跟踪系统结构框图
CCD摄像头每40 ms采集一帧模拟视频数据(PAL制),通过同轴电缆接入到视频解码器ADV7181B内部, 经过A/D采样、视频解码,输出ITU656格式的视频信号, 图像数据通过PPI0口以DMA方式传输到外部SDRAM中。经过处理后的视频数据(ITU656格式)通过DMA PPI1口,经ADV7171编码后送给显示器输出视频数据及跟踪结果。在该系统中ADSPBF561主要实现以下功能:
◆ A核功能,实现目标跟踪;
◆ B核功能,进行视频数据的输入/输出、视频数据的搬移和目标运动状态的显示工作。
本文重点阐述基于ADSPBF561目标跟踪系统中的字符库开发工作,使系统能够实时显示目标的运动信息,提高系统的交互性。针对目标跟踪模块的需要,本系统中设计的字库具有以下特点:
① 为节省存储空间,只设计显示38个字符,分别是26个小写英文字母(a~z)、10个数字(0~9),以及空格和“:”,每个字符的大小为16×8(像素)。
② 可以指定所要显示的字符颜色及字符的背景颜色。
③ 可以在任意位置显示字符。
④ 可以在任意位置显示字符串。
⑤ 为提高目标跟踪系统工作的实时性,将字符库存放在ADSPBF561的L2存储器中。
2字符库的开发
图像输出时,要处理的图像必须转换为ITU656的格式,也就是YUV 4:2:2格式的进行存放。其中PAL制式的ITU656视频流的格式如图2所示。
图2ITU656一帧视频数据的格式(PAL)
一帧PAL格式的数据的大小为1728字节×625行。其中,1~312行为奇场数据(1~22行、311~312行为垂直消隐,23~310行为有效数据),313~625为偶场数据(313~335行、624~625行为垂直消隐,336~623行为有效数据)。在每行数据中共有1728像素,像素的排列如图3所示。
图3ITU656视频流的格式(PAL)
分析图2和图3,要使ADSPBF561能够正确地在输出的视频图像中叠加字符信息,必须做到以下几点:
◆ 在存储视频图像的相应奇场(图2中的FIELD1)和偶场(图2中的FIELD2)中分别存储上相应的字符信息;
◆ 字符信息必须符合YUV 的格式,具体如图3所示,即字符的每个像素应占2个字节的存储空间。
基于以上需求,本字符库的开发思路如下:
① 首先编写相应字符的字模。考虑到编写好的字符库要放到ADSPBF561的L2存储器中,故字符库不能太大。设计中每个字符的字模都是数据类型为布尔型、大小为16×8的二维数组,每个数组中存储的是数字0、1。例如字符“a”的字模:bool inta[16][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,0,0}, {0,1,0,0,0,0,1,0}, {0,0,0,1,1,1,1,0}, {0,0,1,0,0,0,1,0}, {0,1,0,0,0,0,1,0}, {0,1,0,0,0,0,1,0}, {0,0,1,1,1,1,1,1}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}};
字模数组中“1”代表要显示的字符,“0” 表示要显示字符的背景。
为提高系统的实时性,将字符库通常存放在L2存储器。L2存储器的空间只有128 KB,通常用于存储ADSPBF561双核的共有数据,资源有限,而本设计中采用布尔型字模来存储字符信息的思路,大大节省了存储空间。以所开发的38个字符为例,本设计中每个字符都使用大小为16×8的布尔型字模来存储,显示时根据调用函数传递的实际参数实时生成所要显示字符的颜色及背景信息,这样只需要大小为16×32=512字节存储空间。但如果用带有颜色及背景信息的字模来存储,根据PAL制式的ITU656格式,每一个像素点需要占用2个字节,这样每一个字模的数据类型就需要设定为字符型、大小为16×16。因此,32个字符就需要16×16×32=8 KB的存储空间,对于存储空间只有128 KB的L2存储器,这样的存储空间显然有些大了。
② 根据字模填写所要迭加字符的颜色及背景颜色。为增强字库的通用性,编写fillletter()函数。该函数的定义为:
void fillletter(int color,bool arrayletter[16][8],bool fangshi,int bkcolor)
其各形参的定义如表1所列。
表1fillletter()函数中各形参定义
填充时首先取出要显示字符的字模。字模数组中的元素为“1”表示要显示字符,其颜色根据形式参数 “color”填写。字模数组中的元素为“0”表示要显示字符的背景颜色,其颜色是否需要填充根据参数“fangshi”来确定,为“0”不填充任何颜色,为“1”时根据形参“bkcolor”值来填充。字符和背景的颜色有8种,为YUV 格式,其定义如表2所列。
表2字符和背景颜色的定义
根据ITU656格式,字模中的每一个元素的颜色信息占两个字节,因此一个大小为16×8的字模生成的带有颜色信息的字符数组大小为16×16,数组类型为字符型。fillletter()函数流程如图4所示。
图4fillletter()函数流程
在视频区域的相应位置迭加字符信息,为增强字符库的通用性,编写drawletter()函数。该函数的定义为:void drawletter(char quyu[1080000],int xp,int yp,char ch,int color,bool fangshi,int bkcolor)
各个形参的定义如表3所列。drawletter()函数首先调用函数fillletter(),根据形参“ch”、“color ”、“fangshi ”以及“bkcolor ”的值生成相应的带颜色信息的字符数组,然后再根据形式参数“quyu”、 “xp”、 “yp”的值,在相应的视频区域的位置处迭加字符。所要迭加的字符在视频区域奇场中位置的首地址计算方式为:
oddaddress=(22+yp)×1728+288+xp×16(1)
在偶场中首地址的计算公式为:
ouaddress=(335+yp)×1728+288+xp×16(2)
表3drawletterr()函数中各形参的定义
drawletter()的函数流程如图5所示。
图5drawletter()函数流程
③ 显示目标运动状态信息时,通常需要字符串,为此编写了字符串显示函数drawstring()。其定义为:void drawstring(char quyu[1080000],int xp,int yp,char ch[100],int color,bool fangshi,int bkcolor)
其中形参 “ch[100]”表示要显示的字符串,其他如表3所列。字符串显示的流程如图6所示。
图6字符串显示流程
3实验结果
将所开发的字符库用于目标自动跟踪系统中,效果如图7所示。图7(a) 为背景颜色为透明、字符颜色为黑色的显示效果,图7(b) 为背景颜色为绿色、字符颜色为黑色的显示效果。
图7生成的字符图
结语
本文针对目标跟踪系统的需要,设计开发了含有38个字符的字符库。该字符库使用存储在ADSPBF561的L2存储器上的布尔型、16×8的字模,大大节省了存储空间,提高了系统的实时性。经过实验验证,可以满足系统需要。