PC平台上所有使用MFC的代码一律删除,因为DSP不支持任何MFC的类和对象。
(2)变量的存取方式调整
在DM642中程序按段存储,主要包括.text、.cinit、.switch、.bss、.far、.stack、.system等。CCS的C编译器支持两种内存模式:大内存模式和小内存模式。不同的内存模式影响对.bss段变量的访问。程序中的全局和静态变量都分布在.bss段内,小内存模式下其总和不超过32KB。由于程序的全局变量和静态变量已经超过32KB,所以应采用大内存模式,即在编译选项中设置为-ml3。
(3)更改数据类型
PC机平台上long型是32位的,而DSP的long型是40位的。因为DM642通用寄存器为32位,访问40位数据时需要对两个寄存器进行读写操作,从节省程序运行时间的角度考虑,应把程序中所有的long型改成INT32或UINT32。
(4)存储空间的分配
在进行存储空间分配前必须了解芯片内外的存储空间的大小,编译后的C程序“跑飞”往往是超出存储区访问允许范围造成的;另外,还需注意堆栈的分配,在程序“跑飞”时注意检查是否发生堆栈溢出。
4.1 存储空间的分配
在本系统中,内存空间包括:DM642的256KB字节的二级缓存L2,可部分或全部作为SRAM存储空间,存取速度快;32MB字节的SDSRAM片外内存,存取速度慢。内存使用的一个原则是应尽量把数据和代码放入片内内存。但由于片内内存容量的限制,往往不可能将所有数据和代码都放入片内存,而将编程过程中频繁使用的一些关键数据(如滤波的模板、图像二值化的阈值、图像提取的阈值、门牌倾斜的角度等)放入片内保存。片外SDRAM中主要放置图像数据(如图像采集的数据等)。
在本系统程序存储器的分配中,capChaAYSpace存放采集的图像的亮度信号Y;capChaACbSpace存放采集的图像的色度信号Cb;capChaACrSpace存放采集的图像的色度信号Cr;WEIGHT存放小波神经网络训练好的权值;INPUT 存放小波神经网络输入值,即特征化后的图像数据;tempYbuffer、tempY1buffer和tempY2buffer主要存储各个算法模块处理前和处理后的数据。
4.2 系统程序的实现
程序的实现部分主要包括图像采集部分的实现和图像处理与识别算法的实现。
图像采集部分的程序是通过设置在视频端口控制寄存器(VPCTL)中的TSI(transport stream interface)位和在视频捕获通道控制寄存器(VCxCTL)中的CMODE位以选择视频捕获的模式。本文选择的是8-Bit ITU-R BT.656捕获模式,主要是因为选用的解码芯片TVP5150支持BT.656格式。本文只需要处理YCbCr中的亮度信号Y。图像采集部分主要过程是:PAL摄像头通过TVP5105解码器产生BT656格式的
数据流,然后通过EDMA传送给SDRAM。BT656格式为隔行扫描,每帧实际图像大小为720×576,每帧分为奇偶两场,奇场的行数范围为0-288,偶场为289-576。为了提高实时性;在本文中只取奇场的数据,即程序只处理0-288行。在识别算法实现部分中,本文列出了图像经过各个算法功能模块的结果。图像显示的设置在CCS中路径为view->graph->image。
下面以门牌号523为例说明基于DSP的图像处理的各个过程:通过摄像头采集原始门牌图像,其中视频流采用BT.656标准,隔行扫描。每一帧的大小为720×576。在这里只取奇场的数据,即图3(a)的大小为720×288,可以看出图像质量并没有明显的下降;图3(b)为二值化后的图像,主要是根据直方图信息选取阈值,具有较好的效果;图3(c)为倾斜度校正后的图像;图3(d)为归一化后的图像,此图像是被放大后的图像,原图像的大小为8X16;图3(e)为特征提取后的结果,本文主要是把数组中的数据提取出来,然后进行编排,从而便于理解。