• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 文科资料 > 正文

    高速图像采集系统的设计与实现 图像采集

    时间:2020-03-11 07:30:16 来源:雅意学习网 本文已影响 雅意学习网手机站

       摘要:图像采集及传输技术在公共安全、工业控制、科学研究等领域得到了广泛的应用,这些应用对系统的采集、传输速度提出了越来越高的要求。针对这些应用,提出了一种基于ARM处理器和嵌入式Linux系统的高速视频图像采集系统的硬件结构及软件设计方案,并给出了关键问题的解决方法。实验结果表明,该设计方案能够以每秒10帧的速率采集并传输图像,且生成的图像质量较好,能够满足大多数应用的要求。
       关键词:CCD;FPGA;图像采集;嵌入式linux
       中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2011) 23-0000-02
       High-speed Image Acquisition System Design and Implementation
       He Yuchu
       (Sichuan University,Chengdu 610064,China)
       Abstract:Image acquisition and transmission technology in public safety,industrial control,scientific research and other fields have been widely used,these applications on the system"s collection,transmission speeds higher and higher requirements.For these applications,is proposed based on ARM processors and embedded Linux systems,high-speed video image acquisition system hardware architecture and software design solutions,and gives the key solution to the problem.Experimental results show that the design can capture 10 frames per second and transfer rate of the image,and the resulting image quality is better able to meet most application requirements.
       Keywords:CCD;FPGA;Image acquisition;Embedded linux
       一、硬件电路设计
       本设计的硬件系统由嵌入式ARM处理器、CCD图像传感器、A/D转换器、FPGA电路、JPEG编码器等组成,其中,CCD图像传感器将光信号转换为模拟电子信号,传送给A/D转换器,A/D转换器将模拟电子信号转换为Bayer数字信号,传送给FPGA,FPGA将Bayer数字信号转换为YUV信号,传送给JPEG编码器,再由ARM控制JPEG编码器生成JPEG图像,通过网络传送给PC机保存或显示。
       对各部分电路的详细介绍如下:
       (一)CCD控制电路。CCD控制电路采用索尼公司生产的ICX205,其主要作用是将像素的光信号转换为电信号
       ICX205是一款1/2英寸、有效像素为145万的CCD传感器,每秒可输出图像7.5帧。其关键参数如下:水平驱动频率14.318MHz,感光区尺寸0.5英寸,有效像素1392*1040,可满足大多数应用的需求。
       (二)A/D转换电路。A/D转换电路的主要功能是将CCD传感器输出的模拟信号转换为数字信号。本设计选用Analog Device公司生产的AD9923A作为A/D转换电路,它具有12位36MHz A/D转换器,内含6-42dB可变增益放大器,是针对数字图像采集设备的前端设备。ARM微处理器通过串行接口控制A/D转换电路将CCD电路输出的模拟信号转换为数字Bayer信号,并将其输送到FPGA电路。
       (三)FPGA控制电路。FPGA控制电路的主要功能是将Bayer信号转换为RGB信号,再将RGB信号转换生成YUV视频信号。
       (四)JPEG编码电路。JPEG编码电路的主要功能是对输入的YUV视频信号进行编码,生成常用的JPEG图像本设计选用的JPEG编码芯片是Toyko Electron Device Limited公司生产的TE3310RPF(以下简称TE3310)芯片。TE3310是基于ISO/IEC10918-1 DCT sequential方式的JPEG编码芯片,可对640x480(VGA/4:2:2)的图像进行最大135fps的高速压缩。
       (五)ARM控制电路。ARM是整个系统的中心控制部件,负责控制CCD电路的输出、A/D转换电路的输入输出,控制FPGA将YUV信号输送给JPEG编码芯片,并将JPEG编码芯片输出的JPEG图像数据通过网络传送给PC机达到显示和保存的目的。本设计选用Atmel公司生产的AT91RM9200微控制器。
       二、驱动程序设计与实现
       (一)驱动程序的各模块的功能。在Linux操作系统下,设备驱动程序是系统内核与机器硬件之间的接口,它为应用程序屏蔽了具体硬件的细节,使应用程序可以像操作普通磁盘文件一样操作硬件设备。
       系统中的驱动程序用于控制FPGA模块及JPEG编码器模块,主要完成以下六项工作:初始化TE3310控制寄存器;申请内存空间暂存JPEG数据;实现异步通知机制便于与应用层进行通信;响应应用层发出的控制TE3310启停及设置工作方式的命令;实现mmap函数把内核空间映射到用户空间便于大量数据在内核和应用层之间的传送;申请中断并实现中断处理程序,用于通知应用层保存图像数据。
       (二)file_operations结构的实现。其file_operations结构的成员如下:
       struct file_operations tecoder_ops=
       {
       .owner = THIS_MODULE,
       .open = encoder_open,
       .release = encoder_release,
       .ioctl = encoder_ioctl,
       .mmap = encoder_mmap,
       .fasync = encoder_fasync,
       };
       其中,open函数用于初始化设备并申请中断;release函数用于释放设备及关闭中断;ioctl函数实现设备的启动与停止、TE3310工作模式的设置、系统喂狗程序等控制命令。mmap函数用于应用层的内存映射。
       (三)中断处理程序的实现。驱动程序中最重要的部分是中断处理。JPEG编码器完成一帧数据的编码后,发出中断信号,使得驱动程序中的中断处理函数被调用。中断机制的实现包括中断的申请,中断处理函数的实现两个步骤。
       其中,中断处理程序上半部主要完成少量比较紧急的功能,而下半部则完成中断事件的绝大部分任务。中断上半部主要代码如下:
       static void encoder_interrupt(int irq,void*dev_id,struct pt_regs*regs)
       {
       …
       reg_write(IMASK,0x000f)
       tasklet_schedule(&encoder_tasklet);
       …
       }
       首先向中断屏蔽寄存器写入0x000f关闭中断,然后调用tasklet_schedule函数将中断下半部挂载到设备的下半部执行队列上,其参数encoder_tasket是与中断下半部函数相关联的一个数据结构。这样在上半部函数执行完成后,下半部函数立刻得以执行。
       下半部函数的主要工作是使用异步通知机制释放信号,通知应用层保存数据。为了启用异步通知机制,需定义一个fasync_struct类型的数据(在此是async_queue),并实现file_operations结构中的fasync函数。fasync函数的实现如下:
       static int encoder_fasync(int fd,struct file*filp,int mode)
       {
       MODULE_VAR*var=filp->private_data;
       return fasync_helper(fd,filp,mode,&var->async_queue);
       }
       (四)驱动程序的自动加载。将驱动程序编译为内核模块有助于调试。编译为encoder.ko模块文件后,在Linux系统的启动脚本rc.local中添加以下代码:
       insmod encoder.ko
       当系统启动运行时,即可自动加载驱动程序。
       三、应用层程序和客户端的设计
       (一)应用层程序设计。应用层程序运行于嵌入式Linux环境。首先使用open系统调用打开设备文件,通过mmap系统调用将设备的内存映射到用户进程空间。然后使用sigaction函数安装信号,并实现信号处理函数。在信号处理函数中读取设备文件映射的那块内存区域,以完成图像数据的保存工作。当设备加电启动后,即可由应用程序发出图像采集命令,然后等待硬件完成采集和压缩的操作。当图像压缩完成,TE3310通过中断通知设备驱动程序,驱动程序立刻释放信号,这样,应用层信号处理函数得以自动调用,完成图像数据的保存。当保存完一帧图像后,应用层程序通过ioctl系统调用通知驱动程序,以便驱动程序将相应的缓存区标记为可用。
       (二)客户端程序设计。客户端运行于windows环境,主要用来处理图像采集系统生成的图像,包括图像实时显示、保存,并可向开发板发出启动、停止等命令。客户端与开发板用网络接口进行通信,其中,图像传送采用7775端口,控制命令的发送与接收采用7776端口。
       四、实验及测试
       使用串口线及网线将开发板与计算机连接,并加电启动。在WindowsXP系统中自带的超级终端程序中打开开发板上运行的Linux系统,发现驱动程序工作正常,能有效地完成数据的压缩,其压缩速率可达11帧/秒。经过连续十几个小时的测试,证明其工作稳定、可靠。将生成的图像传送至计算机使用Imatest软件进行测试,表明压缩生成的图像质量较好。
       使用串口线及网线将开发板与计算机连接,并加电启动。在计算机上运行客户端软件,当Linux系统启动后,可以观察到实时的图像输出,其输出速率可达11帧/秒。
       将生成的图像保存至选定的目录中,使用Imatest软件对其进行锐度分析,结果分别如图1示。
      
       图1 锐度分析
       通过测试结果,表明由本设计采集生成的图像质量较好,且其速率可达11帧每秒,已可满足大多数应用的需要。某些应用场合对图像的质量具有更高的要求,要进一步提高图像质量,需仔细考虑图像的采样控制,加入图像校正算法,以及提高JPEG编码质量。另外,欲进一步提高帧率,可考虑选用更加快速的芯片,同时改善驱动程序的设计。
       参考文献:
       [1]科波特.Linux设备驱动程序[M].魏永明.北京:中国电力出版社,2006
       [2]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008
       [3]王岳环,路自谦.Linux下实时图像传输卡驱动程序的研究与实现[J].计算机工程,2006,32,15
       [作者简介]何宇矗(1985-),男,硕士研究生,主要研究领域为:嵌入式系统,实时软件工程。

    推荐访问:图像 采集系统 设计 高速图像采集系统的设计与实现 图像识别系统设计 图像识别系统是什么

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章