陈韬
(江苏科技大学计算机学院,江苏镇江212003)
在人们进入到信息大爆炸时代的背景下,各种信息也不断丰富,网络技术及数字信息技术也处于高度发展状态,只有通过计算,才能够对各种信息进行合理。并且目前计算机并不只是局限于传统PC,而是包括各种性能、形态的嵌入式系统,在后PC时代不断到来的过程中,人们也开始逐渐接触嵌入式产品的概念,嵌入式产品也被广泛应用与人们日常生活及工作过程中,包括手机、空调及冰箱等家电。将嵌入式技术和图像处理相互结合,开发设计基于嵌入式图像处理的系统,能够进一步的降低系统成本,提高系统的可靠性、可移动性及可控性。那么本文就从嵌入式图像处理系统的软件方面进行设计,包括图像采集模块、Linux系统、文件模块等。
基于嵌入式图像处理系统软件主要包括文件模块、图像编码模块、Linux系统等构成,能够实现嵌入式图像的优化处理,提高系统的性能,并且使系统具有可扩展性[1]。系统的设计流程为:
图1 嵌入式图像处理系统软件设计结构
图像采集模块是系统在工作过程中能够良好运行的条件,其不仅要有硬件设计,还要有相应的软件支持实现,软件的设计主要包括器件逻辑控制时序设计及通讯设计,其都是通过CPLD实现[2]。
通过CCD图像传感器实现图像信号采集过程中,首先就要对CCD驱动电路进行设计。CCD驱动信号较多且复杂,并且要通过不同的电压实现驱动,所以就要设计软件驱动电路。在面阵像素不断增多的过程中,帧频率也会不断的提高,对于CCD驱动时序的要求也会越来越严格[3]。
本系统的CCD驱动时序主要包括感光区、串行寄存器、存储区及信号放大模块组成。使用单项时钟驱动作为基础,CCD的正常驱动要通过信号实现,分别为复位信号、控制存储器像素移动信号、控制感光区像素移动信号、控制串行读出串行寄存器们信号等。要根据读出模式,选择双通道或者单通道的输出及不同的模式[4]。图2为系统的时序图,通过图2可以看出来,要想能够使CCD正常的工作,需要的驱动时序数量要较多,并且关系较为复杂[5]。
图2 系统的时序图
CCD驱动方法中,单片机驱动是系统软件设计中常用的方式,具有良好的灵活性,但是频率较低。在复杂可编程逻辑器件不断发展的过程中,CCD的驱动方式也在发生着变化[6],通过可编程逻辑器件CPLD实现电子电路设计能够缩短系统的开发周期,降低成本,提高系统的灵活性,并且其还具有擦除可编程的能力,在系统研发的过程中,在出现设计错误或者需要吸怪的时候,只要在原设计文件中实现重新变成就行,不需要对电路的布局进行修改,从而其被广泛应用到驱动电路维护、设计及升级过程中[7]。
图像的采集要通过图像清除、感光、并行传输及读出4个阶段,读出阶段的时间最长,在采集过程中,通过处理器发出信号并且告诉CPLD开始采集,在开始新采集之前,要先将所有的状态进行清除,从而能够提高ODB信号[8]。在清除之后进入到感光期,感光的时间相当于曝光的长度,短时间的曝光会导致CCD受到光子冲击,从而导致图像的曝光不足,但是长时间的曝光会导致图像感光过度。在曝光之后,就要使光电转换,将电荷进行转移。最后阶段就是将存储区中的像素通过串行寄存器发送输出端,读出期包括串行及传输两个过程,通过时钟脉冲实现[9]。图3为图像采集的实现过程。
图3 图像采集的实现过程
A表示空闲状态;B表示CCD清除状态;C表示光积分状态;D表示信号并行传输状态;E表示信号读出状态;F表示信号读出状态;G表示完成状态。
在嵌入式图像处理系统中文件模块的设计,使用LED接口直接和内置接口相互连接,在设计系统触摸屏的过程中,选择ADS作为系统界面触摸屏控制器,从而有效提高系统界面的控制能力。系统功能的实现包括图像文件的打开、包括、打印及退出等操作,系统文件的处理模块通过图像文件读取问题针对性的精心设计,从而能够实现图像的各种操作[10],以下为系统图像文件的打开及保存功能的设计:
在嵌入式图像处理系统中,菜单的打开主要是在系统设计过程中使用uigetfile()函数实现,实现图像标准的读取,从而能够在文件处理对话框中将图像打开[11],设计代码主要代码为:
嵌入式图像处理系统设计中的图像堡村菜单主要是通过uiputfile()标准实现的,设计代码为:
处理器要创建嵌入式Linux系统功能,从而使应用软件能够在系统上运行,以此实现图像的捕获、编码及传输等功能。首先,将板卡的拨码开关设置为SD卡启动,将u boot bin启动文件进行烧写到nandflash中,之后将拨码开关设置为nandflash方式启动,将nfs根文件系统进行挂截,之后实现上电启动,实现应用程序的开发。在SD卡方式启动下,嵌入式操作系统要通过Uboot及MLO作为引导[12],嵌入式Linux系统的引导过程详见图4。
图4 嵌入式Linux系统的引导过程
通过TI公司的底层驱动程序及软件开发包,通过虚拟机进入开发包目录,实现uboot源文件的编译,从而生成可执行ubootbin及MLO文件;实现linux源文件的编译,从而生成内核,将开发包中的rootfs文件系统打包压缩,将SD卡通过USB接口实现虚拟机的挂载,通过分区命令生成rootfs及boot分区,将其中的各文件宝贝到boot分区中,之后再rootfs分区中创建文件夹,将uimage及ibootbin拷贝到新建文件夹中。
将SD卡放入到卡板槽中,将板卡拨码的开关设置为启动,在通电之后,板卡系统的启动就会登录到新建文件夹中,实现loadsh脚本的运行。在等待命令运行完成之后,那么uimage及ubootbin就会到nadflash中烧写,断开板卡通电,将SD卡取出[13]。
启动nandflash,嵌入式操作系统的引导通过uboot实现,嵌入式liunx系统的引导实现详见图5。
图5 嵌入式liunx系统的引导实现
通过上图可以看出来,在系统启动之后,芯片内部的RBL会将Nandflash中的uboot程序引导到RAM运行中,uboot会根据不同的环境参数将文件到DDR存储器中加载并且运行,uimage启动之后会实现NFS根文件系统在虚拟机中的挂载,从而实现其他程序的开发。
根据上文对系统的设计,系统的基本功能就是文件采集、图像采集等,本节就将模块的具体实现进行详细讲述。
在嵌入式平台中,并没有自带的实际文件库函数能够实现,所以要将文件读取到内存中,是系统得以实现的基础。本文所设计的系统主要处理两大块的图像,分别为256色图像及真彩图,所以要通过两个文件读入函数的设计进行实现。文件入读是算法中必须的,所以要将两个函数放入到文件夹中,以备后用,以下为图像数据读取的公共函数:
为了具有良好的人机交互界面,系统通过层次化结构实现图像界面,系统中的接口通过图像方式表示,通过键盘消息及触摸屏实现各分支的相应,以下介绍主界面接口的实现。
主界面接口为系统的核心,其中包括引导界面的功能,并且向下发展了不同框架的算法。从整体进行分析,其主要作用就是承上启下,将嵌入式系统的处理实现分级映射。主界面接口和引导界面的不同之处是在消息处理方面,主界面接口能够向下连接7个二级界面及返回处理,在处理过程中要注意程序设计的问题,也就是如何返回上级及如何做好下级返回。在确定图形界面实现细节之后,就能够实现具体算法接口,本节对其中某个接口代码进行说明,调用接口连接程序要通过触发事件实现,所以以下代码为消息等待的循环[14]。
(1)message=WaitMessage(0);
(2)switch(message->Message){
(3)case OSM_TOUCH_SCREEN:
(4)position1.x=message->WParam&0xffff;
(5)position1.y=message->WParam>>16;
(6)if(IsInRect2(prect1,pposition1)){
(7)ClearScreen();
(8)Menu31(pdc);
(9)ClearScreen();
(10)ShowBmp(pdc,bmpname10,0,0);
(11)}
(12)else if
1为代码等待消息,之后实现消息等待,如果满足3的消息类型,就会将消息中的触摸点纵横坐标参数进行提取,在得到消息参数之后进入到接口程序分支判断中,根据判断的结果转入到分支实现函数调用。8为接口部分,其上下都为在连接接口之前的必要处理。
图像处理系统使用事件驱动编程,也就是程序流程并不是只有一个入口及若干个出口的线路,而是程序会在循环状态,其中的程序从外部输入设备得到某些事件,比如鼠标或者按键操作等,之后根据事件类别做出针对性的相应,从而做出针对性的相应及功能,直到程序接收某个消息。事件驱动属于底层设备,其中包括消息循环及消息队列。通过命令能够进入到图像处理系统中,之后出来引导界面,点击触摸屏中的任意位置进入系统主界面,图6为系统主界面的功能。
图6 系统主界面的功能
系统具有其中图像算法选择,能够点击对应的触摸屏实现自身需求[15]。
目前,基于嵌入式的图像处理系统正在不断的被各个领域深入研究及丰富,将其通过模块化的设计,不仅能够实现图像信息的在线自动处理[16],还能够实现图形的编辑处理,提高系统图像处理的准确率,并且实现图像几何变换、分割、增强及目标定位等功能,满足嵌入式图像处理的在线需求,有效提高系统的设计性能。