系统上电后,由DSP先从FLASH中加载程序,完成系统初始化及相关寄存器和外围器件的配置。由CCD摄像头采集的视频图像传送到TVP5150解码器,将视频模拟信号经过A/D转换成BT.656视频数据流,接着送入DM642视频口;然后视频口解码该视频数据流,得到YUV(4:2:2)格式的图像,并通过EDMA传输到SDRAM中存储。CPU通过访问SDRAM中的图像数据,根据图像处理算法对图像数据进行实时处理和计算。一方面将计算结果通过串口发送出去,另一方面将视频数据送到SAA7121编码器,实现D/A转换并实时显示。
3 图像处理算法的应用
3.1 经典Prewitt边缘检测算法
经典的Prewitt算子是利用像素点上下、左右邻点灰度差在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。其原理是在图像空间利用2个方向模板与图像进行邻域卷积完成。这2个方向模板中一个是垂直梯度方向,检测水平边缘;另一个是水平梯度方向,检测垂直边缘,如图5所示。
Prewitt算法步骤:(1)分别将2个方向模板沿图像从一个像素移到另一个像素,并将像素的中心与图像中的某个像素位置重合;(2)将模板内的系数与其图像上相对应的像素值相乘,并将所有相乘的值相加;(3)将两个卷积的最大值赋给图像中对应模板中心位置的像素,作为该像素新的灰度值;(4)选取合适的阈值,若新像素灰度值大于等于所设阈值,则判断该像素点为图像边缘点。
3.2 改进的Prewitt边缘检测算法
经典的Prewitt边缘检测算法只检测水平和垂直2个方向的边缘,通常图像的边缘还有其他的方向。为了能够在不影响实时性的前提下将边缘提取得更精确,本文将Prewitt算子扩张到8个方向的边缘样板算子。这些样板算子由理想的边缘子图像构成,依次用边缘样板去检测图像,与被检测区域最为相似的样板给出最大值,用这个最大值作为输出值,并将此输出值与所设的阈值进行比较,大于阈值即为边缘点,这样就可以更精确地检测出边缘。8个方向的Prewitt边缘检测算子模板如图6所示。8算子样板对应的边缘方向如图7所示。
3.3 软件实现步骤
本文使用CCS2.2开发环境进行软件开发,采用C语言编程。CCS具有实时、多任务、可视化的软件开发特点。使用CCS提供的工具,可以方便地对DSP软件进行设计、编码、编译、调试、跟踪和实时性分析。系统程序的具体实现步骤为:
(1)初始化并配置资源库,包括片内外设的选取,DSP的片上支持库提供了一系列的C语言程序接口,可以设置或者控制外设;
(2)实现对EMIFA的初始化,CE0子空间被配置为64 bit的SDRAM空间,具体定位:0x80000000H-0x81FFF-
FFFH。CE1子空间被配置为8 bit Flash空间,具体定位:0x90000000H-0x9007FFFFH。
(3)对I2C总线进行初始化;
(4)TVP5150和SAA7121的初始化,选择I2C总线,并设置为相应的数据通路;
(5)初始化视频口Video Port1,设为视频输入;
(6)利用bt656_capture_start()函数采集一帧图像,并将其存入显示缓冲区;
(7)完成一帧图像的采集,使用DAT_copy()函数将图像数据送SDRAM暂存;
(8)对存储区数据进行算法处理;
(9)对处理的数据使用DAT_copy()函数,送显存进行显示。
3.4 实验结果
采用系统在线编程技术,对系统的性能进行测试。为了减少运算量,算法只对图像的中心部分进行2种算法处理。CCD采集的PAL制式的图像,对图像中心的80×100的区域进行计算。其结果表明:改进的算法比传统的算法能提取更多的边缘细节,对目标识别更有利。在实时性上,传统算法处理时间为0.02 s,而改进算法的处理时间为0.1 s。因此,该算法具有准实时性,基本能够达到仿生眼球对图像识别的要求。
系统CPU的开销主要耗费在算法处理上,因此,未来的工作可以针对算法进行不断改进,以提高系统的实时性。
本文成功设计了一个以TMS320DM642为核心的嵌入式视觉图像处理系统,并创新地将其作为仿生眼球的视觉部分嵌入到眼球结构中。系统具有处理速度快、接口简单、集成度高、电路稳定、体积小等优点。在此系统上实现了对经典的2模板Prewitt算法与改进的8模板算法的边缘检测。结果表明,改进的算法具有精确度高、检测效果好等优点,为视觉识别提供了算法基础。