《基于嵌入式系统的图像处理系统设计,数字图像处理论文.docx》由会员分享,可在线阅读,更多相关《基于嵌入式系统的图像处理系统设计,数字图像处理论文.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于嵌入式系统的图像处理系统设计,数字图像处理论文随着信息科学技术发展速度的加快,对图像处理精到准确度越发精到准确,对图像处理速度的要求越发加快。传统的 PC 图像处理技术与嵌入式图像处理技术相比,其最为显著的优点是能够将图像简单地、快速地处理出来,但其缺点就是成本高、需要大量电子设备、构造复杂、设备的保养和运输不方便; 固然嵌入式系统微型化、小型化,但其不仅能知足图像处理系统的要求,还具有便于携带、使用方便、功耗小等优点。基于嵌入式系统的图像处理系统的实现,具体表现出出了其稳定性好、易于开发维护、通用性强、成本低等特点,具有传统 pc 图像处理系统不具备的特点。嵌入式系统的强大的兼容性,模块
2、化设计,使其开发的时间短,易于维护; 嵌入式系统图像处理系统的小巧性,使其配置拆装灵敏,其实时性比桌面操作系统的图像处理系统好,具有非常好的应用前景。 1 嵌入式硬件设备 嵌入式系统的硬件设备选择: SDRAM 内存: 时钟频率 100 MHz 以上 、32 bit 的数据总线。 FLASH 存储: 已经安装 BIOS 的 125 M Nand Flash. LCD 显示: 带触摸功能的 3. 5 寸 LCD,分别率 240 320. 接口: USB Host、JTAG 接口和串口等。 S3C6410 处理器支持 NAND FLASH 的启动方式,通过配置引脚的不同通电状态来确定 NAND F
3、LASH 的启动方式。 Flash 闪存能够为各种移动设备用作存储设备,在嵌入式系统中作为存储设备。 S3C6410 处理器摄像头支持 ITU - BT 601 /656 8 位形式,支持 4 096 4 096 像素点。 开发上引出了摄像头接口,可直接使用配套的摄像头模块,采用 10 20 插针接口方式。摄像头接口有 CAMERA 信号、C 信号,这两个信号用来配置 CMOS 摄像头相关参数; 还有一个 GPIO 信号,主要应用于 CAMERA 的上电控制,协助系统实现电源管理。 图像输出模块利用 LCD 触摸屏实现,S3C6410 开发板的LCD 接口,属于 40 pin 下接 FPC 座
4、 0. 5 mm 间距 ,包含了常见的控制信号,如行场扫描信号、时钟信号和使能信号等、背光控制信号 LCD_PWR、RGB 数据信号、为 PWM 输出信号和复位信号 NRESET ,华而不实 LCD_PWR 是背光控制信号。 2 软件编写 嵌入式 Linux 操作系统的开发环境主要是由目的板和宿主机构成。在宿主机上完成应用程序的开发和操作系统内核的编译,在目的板上运行系统程序和软件系统。嵌入式平台的开发,一般都是在宿主机上完成穿插编译环境的调试,然后通过串口和目的板连接起来。把一台 PC 机作为嵌入式开发的宿主机,并建立穿插编译环境,在其环境中实现程序设计,并生产执行代码,最后移植到开发板上,
5、实现程序的开发。Boot-loader 导程序主要是嵌入式系统启动,目的板打开,首先 Boot-loader 引导程序启动嵌入式系统,Bootloader 引导程序在目的板板上先执行首段代码的启动。在 PC 机中,先制作 Bootloader引导程序,然后将其将引导 liunx 系统启动,运行 liunx 内核和根文件系统,进而整个程序运行起来。BIOS 会将控制转移给引导程序; 只要引导程序启动,将执行系统的初始化工作。使Linux 构造建立起来,在图形界面运行,如此图 1 所示。 嵌入式系统可以以看作是一个特殊的计算机系统,在计算机开机时需要 BIOS 作为引导程序启动操作系统。嵌入式系统
6、的 Bootloader 引导程序就同计算机的 BIOS 作用一样,引导嵌入式操作系统的启动,然后将控制全转移选操作系统。 Bootloader 有 2 种形式,包括有启动加载和下载形式。 Bootloader 的正常工作下运行的形式是启动加载形式。Boot-loader 引导程序宿主机下载到目的板的存储模块中,然后引导程序启动嵌入式操作系统。下载形式就是目的板上的 Boot-loader 通过串口连接下载方式在开发板上运行宿主机上编译好的应用程序。Bootloader 引导程序的启动经过两个阶段。代码和 CPU 体系构造一样,第一个阶段放置设备的初始化程序,使用 ARM 汇编语言来完成。第二
7、个阶段是用 C 语言来完成,进而实现程序的功能。将压缩包 uboot1. 1. 6_FORLINX_6410. tgz 放到 Ubuntu / forlinx 目录下,解压缩并编译,Ubuntu 下的操作经过如下所示: #tar zxf uboot1. 1. 6_FORLINX_6410. tgz#cd uboot1. 1. 6#make smdk6410_config#make claen#make嵌入式系统 Linux 内核的配置和移植,在宿主机上下载linux - 2. 6. 28,在配置之前对 Makefile 文件穿插编译环境进行修改。将压缩包 Linux2. 6. 28_FOLIN
8、X_6410. tgz 放到工作目录下,解压缩: #tar zxf Linux2. 6. 28_FOLINX_6410. tgz配置内核: 1 需要安装 Libncurses5,方便使用 make menuconfig 命令,能够采用下面命令安装:#sudo apt - get instell Libncurses5 - dev2 恢复内核的默认配置:#cd linux2. 6. 28#cp FORLINUX6410_CFG . config3 液晶屏类型的选择:#make menuconfig选择液晶屏类型,在linux - 2. 6. 28 demo 文件目录下已包含了 3. 5 寸、4.
9、 3 寸、5. 6 寸、7 寸、8 寸、vga 输出的内核映像。4 编译内核:#make zImagezImage 就是编译完成后产生的内核映像文件编。最后配置完文件系统就可继续接下来的编程。 3 图像采集与显示 驱动程序使用的构造和符号,都在 include/linux/videodev. h文件中。Video4Linux 设备驱动模块在内核中的 drivers/media/video / videodev. c 文件中,开发人员能够在模块的基础上通过对内核接口的开发作出自个需要的设备驱动程序。 在 Linux2. 6. 28 内核中,主要是对 fb_fix_screen_for 和 fb_
10、var_screeninfor 进行 FrameBuffer 构造变量的控制。显示程序: struct fd_fix_screeninfor finfo;struct fd_var_screeninfor vinfo;ioctl fb,FBIOGET_FSCREENINFO, finfor ;int fb = open / dev / fbo ,O_RDWR ;ioctl fb,FBIOGET_VSCREENINFO, vinfor ;以上程序声明了设备的固定和可变构造体,并获得了显存的地址、分辨率、颜色等。 creansize = vinfor. xres * vinfor. yres *
11、vinfor. bits_per_pix-el /8;* fb = map 0,screansize,PROT_READ | PROT_WRITE,MAP_SHARED,fb,0 ;设置了 screensize 的大小和起始地址,其内存起始位置为fb,然后图像将会在 LCD 上显示出来。 memset fbp,0,screensize ; 此条程序为清屏操作。主要的主程序为:打开设备 nb. fb =open /dav/video4linux/video ,O_RDWR 0 qerror video4linux_open ; exit l ; 获得图像的信息Printf capability.
12、 name: s n . vb. capability. nama ;Ioctl vb. fb,VIDIOCGPICT, vb. picture ; 采集显示图像Ioctl nb. nb,VIDIEOCMCAPTURER, nb. mmap ;Ioctl nb. nb,VIDIEOCSYNCY, vb. frame_current ;Imageshow vb. mmap + vb. buf. offsets0 ;保存图像关闭设备Fwrite mg,IMGSIZE,l,pf ;Close vb. fb ;4 基于 Qt 图像平台设计。 实现后的用户图形界面通过 Qt 开发环境的 Qt Desig
13、ner设计实现。Qt Designer 能够直观地对用户图形界面进行布局,其文件格式为。 ui,并生成。 h 文件,为功能的详细实现提供方便。Qt 中采用 signals/slots 信号响应机制,使得各个元件之间的协同工作变得特别简单,图形显示程序代码: void ImageProcessing : : onScanBtn QFileDialog: : getOpenFileName this,tr Open Image File , C: ,tr Setings Files * .jpg ; 信号和槽的关联:QObject: : connect Button _11,SIGNAL clic
14、ked ,this,SLOT onScanBtn ;图像流程程序部分代码:图像数据读取char * pImageBytes = uchar * srcImage.bits ;int depth = srcImage. depth ;int lineBytes = srcImage. bytesPerLine ;int w = srcImage. width ;int h = srcImage. height ;uchar * pByte;if 8 = = depth pByte = pImageBytes + i* lineByte + j;datai* w + j= std: : compl
15、ex double * pByte,0 ; else if 32 = = depth; pByte = pImageBytes + i* lineBytes + j* 4;Uchar pixelValue = uchar 0. 299 * float pByte0 +0. 587* float pByte + 0. 114* float pByte2 ;datai* w + j= std: : complex double pixelValue,0 ;图像数据的回写for int i = 0; i i + + for int j =0; j j + double spectral =abs d
16、atai* w +j * coef; / /灰度值调整spectral = spectral 255? 255: spectral;/ / 根据图像格式写数据if 8 = = depth pByte = pImageBytes + i* lineBytes + j;* pByte = spectral; else if 32 = = depth pByte = pImageBytes + i* lineBytes + j* 4;pByte0= pByte1= pByte2 =spectral; 处理进度函数QProgressDialog progress tr 处 理 进 度 , tr 取消
17、,0,10 000,this ;progress. setWindowModality Qt: : WindowModal ;progress. setWindowTitle tr 图像处理中 ;progress. setMaximumSize 150,60 ;progress. setMinimumSize 150,60 ;progress. show ; / / readImage data,sourceImage ;for int i = 0; i 10 000; i + + progress. setValue i ;qApp - processEvents ;if progress.
18、 wasCanceled break; / / 复制文件处理。qDebug progress. setValue 10 000 ;最终实现图形化界面。 5 结束语 1 在虚拟机上安装 Linux 系统并完成穿插编译环境的建立; kernel 的编译和移植; 制作文件系统。进而为后续的项目开发开创建立出了软件环境。 2 对 Video4Linux 的驱动程序的开发和设计,完成了 Vide-o4Linux 开发图像采集驱动程序,采集的图像既能够直接用作图像的处理,可以以保存在内存映像中,用 FrameBuffer 进行图像的显示。 3 利用 QT 开发图像处理系统的图形界面。优化和改良图像处理系统
19、的算法,最终完成了图像的平滑、图像的锐化、图像的边缘检测和浮雕显示等图像处理功能程序编写。 4 将宿主机上的成果移植到 ARM11 的硬件平台上,实现图像的采集和图像的处理,在图像处理方面,其处理速度更快、图像愈加精到准确。 以下为参考文献: 1 孙琼。 嵌入式 Linux 应用程序开发详解M. 北京: 人民邮电出版社,2006. 2 周立功,陈明计,陈渝。 ARM 嵌入式 Linux 系统构建与驱动开发范例M. 北京: 北京航空航天大学出版社,2006. 3 RafaelC. Gonzalez,RichardE. Woods,StevenL. Eddins. 数字图像处理M. 北京: 电子工业出版社,2005. 4 田泽。 嵌入式系统开发与应用M. 北京: 北京航空航天大学出版社,2005.