摘 要:嵌入式图像处理系统的完成将为图像处理开辟新的实现途径,并且为嵌入式系统的应用打开一片新的领域。基于嵌入式平台的图像处理系统是未来图像处理系统的发展趋势,研究如何将嵌入式平台和图像处理结合起来,对于进一步拓展图像处理应用领域具有非常深远的意义。本文分别介绍本系统软硬件整体设计及嵌入式图像处理系统开发环境的建立。
关键词:嵌入式;Linux;图像处理
引言
数字图像处理系统是执行处理图像、分析理解图像信息任务的计算机系统。尽管图像处理技术应用广泛,图像处理系统种类很多,但他们的基本组成是相近的。嵌入式数字图像处理系统主要包括:图像输入设备、执行处理分析与控制的微处理器、输出设备、存储系统中的图像数据库、图像处理程序库。
一、嵌入式系统图像处理技术研究现状
目前国内外嵌入式图像处理系统正在成为微型计算机开发的热门研究课题。结合嵌入式系统的高端图像处理性能,手机、数码、mp4等产品的嵌入式处理器已在上述市场中占有比较大的份额,而且嵌入式系统已成功应用于医疗设备、机器人控制中的图像领域,现代战争中利用图像进行的精确制导、无人飞机的电视导航等。
美国“索杰纳”火星车作为技术高密集的移动机器人,采用的是美国WindRiver公司的Vxworks嵌入式操作系统。火星车上负责采集、处理传输图像的控制器采用16位以上的处理器,各种MCU如ARM、MIPS、68K系列的处理器在控制器中占据核心地位。
近年来,结合嵌入式系统、DSP和实时图像处理等领域的最新发展,嵌入式实时图像处理系统采用基于DSP+FPGA+ARM的硬件系统架构设计,将高速的DSP与在通讯、网络和实时控制方面具有独特优势的StrongARM处理器以及接口逻辑丰富、并行运算能力强大的FPGA结合起来,为嵌入式实时环境下一些复杂算法的实现开辟了新的途径。但该系统在软件实现中的一些关键问题,特别是DSP代码的开发与优化等内容还不成熟和完善。
在软件方面,大多数嵌入式操作系统一般采用微内核结构,内核只提供基本的功能,例如任务调度、任务之间的通信与同步、内存管理、时钟管理等,其它的应用组件,比如网络功能、GUI系统等均工作在用户态,以系统进程或系统调用的方式工作。因而整个系统都是可裁减的,用户可以根据特定应用要求选用相应的组件。嵌入式操作系统主要有Vxworks、QNX、PalmOS、Windows CE、Linux等。
二、Linux开发环境的建立
嵌入式Linux开发环境有几个方案:
(1)基于PC机Windows操作系统下的CYGWIN。
(2)在Windows下安装虚拟机后,再在虚拟机中安装Linux操作系统。
(3)直接安装Linux操作系统。
我们实际的开发环境为第二种方法,即在虚拟机new Red Hat Linux VMware Workstation中安装Red Hat Linux 9.0,它支持中文,并且包含了绝大部分的开发工具。开发环境建立步骤如下:
操作系统使用Red Hat Linux 9.0,选择完全安装,需要磁盘空间大约5G。接着安装Linux的编译器和开发库以及ARM-Linux的所有源代码,需要空间大约为800M。然后安装相应的GCC交叉编译器arm-linux-gcc。配置开发主机,配置Minicom,该软件作为调试嵌入式开发板信息输出的监视器和键盘输入的工具,一般参数为波特率115200,数据位8位,停止位1,无奇偶校验,软硬件控制流设为无。
关闭防火墙,配置NFS网络文件系统。建立引导装载程序Bootloader,本文使用北京博创公司提供的vivi。然后下载ARM-Linux,添加自己的特定硬件的驱动程序,使用模块方式调试驱动。建立根文件系统,使用Busybox软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile等,自动挂装文件系统的配置文件/etc/fstab。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映象文件。建立应用程序的flash磁盘分区,本系统使用线性Nor-Flash,使用YAFFS文件系统,在内核中提供文件系统驱动。最后将开发的应用程序下载到根文件系统中。
三、图像采集和显示设备分析
在图像采集模块,遵循V4L(Video for Linux)的标准,使用网眼PC350摄像头采集图像。整体的USB图像采集部分可由CMOS图像传感器、USB Camera控制器OV511和256K RAM构成。OV511内置了USB收发控制器,能够将数字图像数据通过USB传给ARM处理器,保证了数据的快速实时。ARM处理器通过USB配置OV511,OV511则对CMOS图像传感器的控制字进行配置。图1为图像采集子系统框图。
图像显示模块采用8""TFT彩色液晶触摸屏,256色,分辨率为640×480,点距为0.2535×0.253,通过32针并口与开发板通讯。
四、软件的多线程整体设计
线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。多线程程序作为一种多任务、并发的工作方式,最突出的优点就是提高应用程序的响应速度。使用多线程技术,可以避免主程序等待的情况,从而提高程序运行效率。
通常嵌入式系统中图像采集速度较快,而图像处理速度较慢,为解决二者速度不匹配和资源共享问题,以提高系统工作效率,本文采用图像采集和处理多线程设计,通过互斥锁和条件变量来同步线程。设计建立带互斥锁的4帧图像缓存区作为图像采集线程和图像处理线程进行数据交换的共享缓冲区。图像采集线程顺序地从V4L接口程序获取图像存入共享缓存区,然后由图像处理线程不断地从共享缓冲区读取数据帧进行处理。主流程如图2所示。
图2 系统主流程图
程序首先进行视频设备初始化,获取摄像头基本信息和采集图像的各种属性,并分配4帧图像缓存区struct image_buf{int buffer[BUFFER_SIZE];pthread_mutex_t lock;int readpos,writepos;pthread_cond_t notempty;pthread_cond_t notfull;};再启动图像采集线程pthread_create(&th_cap,NULL,capture,0)进行图像采集,建立图像处理线程pthread_create(&th_pro,NULL,process,0)进行图像处理;其中,互斥锁lock用来实现两线程间图像数据的共享和通信,但只有锁定和非锁定两种状态,因此通过设置条件变量notempty、notfull来监听图像
缓存区状态,通过允许线程阻塞和等待另一个线程发送信号的方法弥补互斥锁的不足。Readpos和writepos用来确定缓冲区中图像的读写位置。
五、结束语
基于嵌入式系统的图像处理与界面开发技术将嵌入式技术的多功能、可配置、多种通信模式、方便的网络接口、人机用户界面、实时性带入了图像处理领域。伴随着图像处理技术应用的深入,再结合嵌入式操作系统的强大功能,图像处理技术的发展方向将越来越宽广。
参考文献:
[1] 张莹,李鹏,陈立峰等.嵌入式系统发展综述.电子技术,2008,24(6):74-78
[2] 郭剑锋.基于ARM微处理器的以太网工业智能控制器.制造业自动化,2004,26(3):76-78
[3] D.E.Simon,陈向群等译.嵌入式系统软件教程.北京:机械工业出版社,2005:23-65
[4] 张怀柱,尹传历,宋建中等.基于DSP的嵌入式显微图像处理系统的设计.电子技术应用,2008(1):30-34
[5] 李志能.基于ARM和DSP的嵌入式实时图像处理系统设计与研究.[浙江大学硕士毕业论文],2005:2-10