嵌入式图像处理系统的设计与实现.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

43682009,30(19 计算机工程与设计Computer Engineering and Design
0引言
传统的图像处理技术主要依赖于大批量的电子计算机设备,大批量的电子设备在使用和保养时产生巨大的经费开支,增加行业成本。

而嵌入式设备成本低、能耗小、可靠性高、体积小、重量轻以及维护使用方便等诸多优势。

将嵌入式技术与图像处理结合可以开发出成本更低,可控性、可移动性及可靠性更佳的嵌入式图像处理系统。

1硬件平台设计
本系统的硬件平台是标准的通用嵌入式平台,其基本构
成有嵌入式中央处理器(三星44B0X 、输入输出系统(9键的小键盘和4.3寸液晶显示触摸屏和存储体系(同普通的PC 一样也具有三层存储体系:缓存(位于处理器中、内存(SDARM 以及外存(NandFlash 以及各种通信和调试接口。

具体如图1所示的硬件平台体系结构。

嵌入式系统不同与一般的PC ,一般不能直接接受来自键盘的命令,本系统中使用ucos 系统软件平台,所以也没有Shell 。

本系统在上电或者复位时,将自动执行ROM 中的Boot-Loader (存于NorFlash 的固定地址:0x0 ,BootLoader 将对系统进行标准自检,若自检通过,则将自动引导位于NandFlash 中的二进制文件,其文件名固定为System.bin 。

该文件即为嵌入式图像处理软件系统的镜像文件,自此图像处理系统启动运行。

2
嵌入式图像处理软件系统设计
2.1
总体设计思想
本系统主要解决的问题就是图像处理如何在嵌入式环境
收稿日期:2008-10-12;修订日期:2009-08-05。

嵌入式系统工程
宋凯,严丽平,甘岚:嵌入式图像处理系统的设计与实现
2009,30(19 4369
下的实现,由于嵌入式环境的特性(比如可供选择的编程语言较少,可供使用的API 较少等,所以笔者需要着力解决的问题是通用接口(比如BMP 文件的读入以及常用算法的移植。

为了提高工组效率以及本软件系统的可移植性,笔者决定将常用的接口及图像处理算法均以API 的形式封装起来。

这样在以后的开发工作中,只要调用封装后的API 即可,可以提高系统的通用性。

2.2功能模块设计
基于前面的阐述,本系统采用模块化设计,每个模块包含
了一类图像处理的算法,而单个模块中的每个算法在执行时只需调用封装好的API 即可。

具体的功能模块设计是将算法分为7大模块:图像几何变换、边缘检测及轮廓跟踪、直方图修正、半影调和去抖动、图像彩色变换、图像平滑锐化和腐蚀膨胀细化算法。

在这7大系统模块下面,再进行到每一级算法的映射。

7个模块构成了系统的主体。

主层次结构如图2所示。

另外在每个模块中有包含了多个图像处理算法,比如图像几何变换模块就含有8种算法,其结构如图3所示。

另外的6个模块其设计与之相似,不再赘述。

2.3系统的实现与运行
基于上文的阐述,本软件系统的具体实现工作主要包括:
文件的读入、算法移植封装以及通用接口的实现等。

下文将具体介绍实现工作。

2.3.1BMP 文件的读入
在嵌入式平台上,并没有现成的BMP 文件的库函数可以
使用。

因此,如何把一个BMP 文件读入到内存中是进行图像处理算法移植的根本前提。

本系统中,主要处理的图像有两大块:真彩图和256色的图像(包括256级灰度图,因此对应设计了两个BMP 文件的读入函数。

文件的读入是每个算法都需要的,因此将这两个函数放在Graphic.h 和Graphic.c 中,以备后续的开发使用。

下面是本文设计的两个图像数据读取公共函数:
GetTruePixel (char bmpname [],U32color [240][320],int *ma-
pwidth,int *mapheight ;
Get256Pixel (char bmpname [],U8colorbuf [240][320],U32pale [256],int
*mapwidth,int*mapheight
函数1用于将一个名称为bmpname []的真彩图像数据读入color [][]矩阵,同时获得图像的宽和高;函数2用于将一个
名称为bmpname []的256色图像数据读入colorbuf [][]矩阵,同时,对应的调色板数据读入pale []矩阵中并获得图像的宽和高。

2.3.2算法移植
本文中所涉及的图像处理算法都是原有的成熟算法,其
数学变换的过程都是固定的,笔者的工作就是将这些算法用C 语言实现并封
装成API 的形式以供调用,这个过程相对简单,在此不作赘述。

2.3.3层次图形界面的实现
为了提供良好的人机界面,本系统设计实现了层次化接
口,各级接口以图形方式显示,通过触摸屏或键盘消息进行分支响应,下面以主界面接口为例介绍层次化图形界面的实现。

对于整个系统来说,这一部分是核心,它承接了引导界面,并向下发展了各个不同的框架算法。

从整体看来,它的作用就是承上启下,将嵌入式系统一次有限的处理进行分级映射。

本接口与引导界面的最大不同是在它的消息处理上面,它向下连接了7个二级界面,再加上一个返回的处理,就需要对产生消息的参数做出8种不同的决断。

在本级的处理中,还要注意程序设计中的问题,即如何返回上一级以及如何做好下一级向本级的返回。

在确定完一些实现细节以后,即可以进行具体算法接口的实现了。

出于篇幅的考虑,本文只对其中的一个接口代码进行说明,需要指出的是,接口连接程序的调用需要等待事件的触发,因此,下面的代码都是在一个等待消息的无限循环之中的。

(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行可以看作是接口部分,它的上下都是接口连接之前的一些必要处理。

下面是键盘的处理:(1

(2 case OSM_KEY:
图2主体选择界面
算法选择主体界面
图像几何变换
边缘检测轮廓跟踪
直方图修正
半影调和去抖动
图像彩色变换图像平滑锐化
腐蚀膨胀及细化
图3图像几何变换界面
图像旋转垂直镜像水平镜像图像平移
真彩图缩放真彩图转

43702009,30(19 计算机工程与设计Computer Engineering and Design
(3 keyvalue=onkey(message->WParam ; (4 switch (keyvalue {(5 case
'1':ClearScreen(; (6 Menu31(pdc ; (7 ClearScreen (;
(8 ShowBmp (pdc,bmpname10,0,0 ; (9
break;
这一部分第2行是承接触摸屏那段代码的switch 语句的,如果是键盘消息(OSM_KEY ,则转入执行键盘的判断处理,在提取参数方面,键盘的键值要经过我们事先定义好的一个函数的处理。

这个函数的功能就是对键盘的键值进行转换,即由读入的参数向ASCII 码的转化,这个转化不是固定哪一部分的字符的,可以根据自己的习惯进行定义。

经过键盘参数的处理以后,可以对这个参数进行判断;当条件满足时,就可以执行相关的接口函数了。

这部分跟触摸屏差不多,调用函数是在第6行。

2.3.4文件的选择
基于ucos 的嵌入式系统的一个缺点就是在独立运行的
时,用户难以干预到系统的后台,这给某些嵌入式软件的实现带来了很大的不便。

对于本系统而言,需要处理的图像文件如果不能够由用户选择,那么该系统将在很大程度上失去应用价值,因为在那种情况下,文件的名称只能由系统在定义的时候给出,导致系统的每一个算法在执行的时候局限于系统指定的某一个图像,如果用户想要更改加工对象,只有一个办法:改变系统的代码。

这显然是软件设计中很大的忌讳。

从这一角度出发,引入文件读入是非常有必要的。

从随后的实现来说,这一部分实际上也是一个层级,它向上承接了算法选取,向下引出了图像算法的具体执行,它完成的功能就是预览文件和选取文件。

仿照用户的操作习惯,首先应该列出flash 中的所有bmp 文件:
(1 while (ListNextFileName (&filepos,FileExName,filename{
(2 strChar2Unicode (Ufilename,filename ;//将文件名转换为Unicode
(3 AddStringListCtrl (pMainListCtrl, Ufilename ;//向列表框中添加表项
(4 strcpy (BmpFile [i ],filename ;//将文件名存入文件名数组(5 strncat (BmpFile [i++],FileExName,3 ;
这一段代码主要涉及到几个存放文件名称的数组,由于是bmp 文件,扩展文件名是一样的,定义为FileExName []={'B',' M','P', 0}即可,其它部分需要独立记录在文件名数组BmpFile 中。

程序中的关键是第一行中循环的控制,它用到了系统的一个API 。

在列出文件名称以后,接下来就是消息处理,消息判断处理前面已经论述很详细了,不再具体给出,我们下面着重讨论消息的处理判断:
(1 if (pMsg->WParam==14
(2 {
(3 ClearScreen (;
(4
ShowBmp (pdc, BmpFile [pMainListCtrl->CurrentSel],
0, 0 ;//显示图片
(5 ReDrawOSCtrl (;//重画控件(6 break;
(7 }
(8 if (pMsg->WParam==7 (9 {
(10 for (j=0;j<12;j++
(11 bmpname [j ]=BmpFile[pMainListCtrl->CurrentSel][j ]; (12 return; (13
}
这里只需要对两个按键进行判断:Enter 键和0键。

其中,很明显,从第4、5两行可以看出来,Enter 键(14 是图像的预览,
而0键(7 是用户确定了选取图像后的返回,在返回的时候一定要把当前选择的文件名称传递回去。

2.3.5系统的运行
本图像处理系统采用了典型的“事件驱动编程”方式,即程
序的流程不再是只有一个入口和若干个出口的串行执行线路; 相反,程序会一直处于循环状态,在循环当中,程序从外部输入设备获取某些事件,比如用户的按键或者鼠标的移动,然后根据事件类型做出某种响应,并完成一定的功能,这个循环直到程序接受到某个消息为止。

“事件驱动”的底层设施,就是常说的“消息队列”和“消息循环”。

通过命令(键盘消息或者是触摸屏消息进入图像处理系统,会有一个引导界面,点击触摸屏上任意位置即进入了系统主界面。

系统的主界面如图4所示。

如主界面所示,这一级提供了7种图像算法类别的选择。

可以点击各个类别对应位置的触摸屏,也可以直接使用键盘操作(键盘快捷键已经在各个图标下方标注。

当然,也可以点击返回按钮返回到引导界面。

下面以图像几何变换来说明系统的运行过程。

在主界面中点击图像几何变换对应的触摸屏位置或者点击键盘“1”键,可进入图像几何变换的功能处理模块。

图像几何变换的界面如图5所示。

在这一界面中,已经提供了各个具体图像算法的接口,可以根据需要来选择相应的图像算法。

选择的方法跟主界面是一致的。

在选择一个具体的图像算法之后,系统便进入到算法执行部分。

在执行部分的开始,系统会先出现一个文件选择界面供用户来选择需要加工的文件,用户选择了文件以后即可以针对该文件进行操作,此时有两个选择:确定和返回。

如果选择了确定,则执行下一步;否则跳回上一级功能选择界面。

赵漫菲,王光辉:菜单中间件在嵌入式系统中的设计与实现
2009,30(19 4377
NULL, &pMenuButton->foregroundColor,1 ;
uglColorAlloc (displayId, &backgroundColor,UGL_
NULL, &pMenuButton->backgroundColor,1 ;
pMenuButton->fontId=WIN_FONT_SMALL;}
break;
case MSG_UNMANAGE:
{…//释放分配的资源}break;
case MSG_CLASS_DEINIT:
if (classId ==m_winMenuButtonClassId {winClassDestroy (classId ;
m_winMenuButtonClassId=UGL_NULL;}
…break;
case MSG_PTR_BTN1_DOWN:
…//完成对鼠标按下具体动作的设定break; …
3结束语
目前各个领域基于嵌入式系统的界面开发正在不断的深
入和丰富,菜单中间件作为程序员界面开发中的一个重要元素,它的合理开发将会为界面开发者提供稳定的接口及便利的使用,本文所论述的实现过程是以Tornado2.2、WindML3.0及
VxWorks5.5作为开发环境,随着编程工具的不断升级,作为中间件的开发工作也必将会有一个新的拓展和丰富。

参考文献:
[1]何剑. 嵌入式中间件技术研究综述[J ]. 大众科技,2008(11 :20-22.[2]许贵平, 段爱群. 分布式实时嵌入式中间件的调度体系[J ]. 微计算机应用,2008(2 :84-86.
[3]岳春生, 胡松. 基于中间件的嵌入式GIS 设计[J ]. 信息工程大学学
报,2004(6 :150-153.
[4]
杨海东, 周洺. 基于RFID 中间件的食品安全监控系统[J ]. 微计算机信息,2008(1-2 :227-229.
[5]WindRiver Systems Inc. WindML 3.0API guide [M ].USA:2002.[6]
WindRiver Systems Inc. VxWorks programmer's guide 5.5[M ]. USA:2002.
[7]赵振, 严隽薇, 刘敏, 等. 一种基于双线性链表结构编码的遗传算法[J ]. 计算机应用,2009,29(2 :555-557.
[8]何煦岚, 何晓岚. 基于多链表结构的嵌入式系统内存管理[J ]. 计算机应用与软件,2008,25(4 :58-59.
在选择确定继续以后,系统便会根据图像处理是否需要输入数据而执行不同的处理。

如果处理图像需要输入相关参数,则会出现参数读入界面,在参数读入界面用户可以输入图像处理需要的参数,然后选择确定来执行算法,执行算法以后便可以在左边的系统界面区域内看到处理以后的结果了;如果不需要输入数据,系统就会直接执行图像算法,并在系统界面区域显示处理结果。

处理结果产生以后,用户可以随时选择返回以进入下一次图像处理的运行中去。

3结束语
本文首次将嵌入式技术和图像处理技术融合开发出嵌入
式图像处理系统,较好的解决了传统产品的缺陷。

通过本系统的实际运行表明,该系统达到了设计初期的各项要求,能够在相对有限的嵌入式系统资源中实现常见的多种图像处理变
换。

相信在未来对于嵌入式图像处理设备的产品化将起到积极的推动作用。

但由于硬件平台本身的局限性,该系统在响应速度、显示效果等方面有待进一步优化。

参考文献:
[1]李超. 一种基于嵌入式图像处理的工程车辆导向装置[J ]. 北京航空航天大学学报,2007,33(10 :1212-1217.
[2]耿彦莉. 基于StrongARM 的嵌入式Linux 的GUI 实现[J ]. 计算机工
程,2006,32(9 :214-218.
[3]
杨天怡. 一种嵌入式Linux 环境下图像压缩及传输的实现[J ]. 计算机科
学,2006,33(4 :228-231.
[4]
李外云. 嵌入式Linux 图像数据无线网络传输应用研究[J ]. 计算机工程与应用,2007,41(31 :90-91.[5]宋凯. ARM Linux 在S3C2410上的移植[J ]. 计算机工程与设计,2008,29(16 :4138-4140.
[6]
Mehaffey J. MontaVista Linux open source real time project whitepaper [Z ]. MontaVista Software. www.mvista. Com/dswp,2005. [7]
Bhattacharjee B,Kommareddy C.The high-pressure and powerful transducer control system based on PoketLinux operating system [J ].ACM Transactions on Computer Systems,2006,10(2 :85-110.[8]
Yun CAO,Hiroto YASUURA.Power analysis and estimation for SOC
design:techniques and tools [J ]. IEICE Transactions on Fundamentals of Electronics, Communications and Computer Science,2007,87(2 :410-416.。

相关文档
最新文档