0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于S3C2410处理器和Linux操作系统实现数字图像处理系统的设计方案

基于S3C2410处理器和Linux操作系统实现数字图像处理系统的设计方案

来源: elecfans
2020-11-03
类别:工业控制
eye 43
文章创建人 拍明

原标题:基于S3C2410处理器和Linux操作系统实现数字图像处理系统的设计方案

  引言

  在研究远程数字图像处理与传输的过程中,需要在远端现场进行图像处理,本文提出一个集图像采集、处理与显示于一体的嵌入式数字图像处理系统,通过图像获取设备获取目标图像并进行相关的算法处理,通过模块化编程,将原始图像和图像处理结果独立显示出来,修改图像处理模块可以对不同的数字图像处理算法进行验证和分析。利用本文所建立的系统可以大大提高远端数字图像处理的效率,并可利用该系统的网络功能实现远程传输,本文仅就系统的图像获取与处理功能作简要分析。

  1系统组成

  硬件组成以S3C2410为核心,S3C2410内部集成了一个USB主控制器,所以无须外接USB控制芯片就可以做为USB主机.USBHost控制器与视频采集摄像头相连,通过在USB接口上外接的带USB口的摄像头,实现图像采集。处理后的图像可以显示在一个320X240分辨率的液晶屏幕上,Flash用作存储器保存系统软件和图像采集、处理的结果。图1给出了系统的硬件组成框图,图2给出了系统的软件层次结构图。

  1.jpg

  图1硬件组成构图

  

图片.png

  图2软件层次结构阁

  软件组成可以分为引导程序、操作系统和图像采集与处理三部分。

  引导程序的作用是初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用稃序准备好正确的环境。在本应用中采用的是ViVi作为引导程序来引导操作系统。

  本系统选择的是ARM-Linux作为操作系统,针对本系统的具体应用,需要配置操作系统内核支持VideoForLinux和USBOV511Camera,同时去掉一些不需要的模块以减小操作系统内核的体积。操作系统内核是通过引导程序ViVi来下载到Flash存储器上的,而引导程序ViVi则是通过Jtag下载到Flash存储器中的。

  图像的采集、处理、显示的程序是运行在ARM-Linux操作系统之上的,其中图像采集与图像显示模块与操作系统平台紧密相关,而图像处理算法部分与平台无关。

  2图像采集

  在本设计中通过USB摄像头来采集图像,在Linux内核中视频部分的接口是VideoForLinux(V4L),V4L标准定义了一套接口,内核、驱动、应用程序遵循这个接口标准就可以使视频设备正常工作。目前V4L涵盖了视、音频流捕捉与处理方面的内容,USB摄像头也属于V4L支持的范畴。

  在ARM-Linux中,摄像头设备映射为/dev/v41/vide00,所以只需对这个设备按照V4L标准规定的流程进行操作就可以了。以下是关键步骤的程序代码。

  第一步:打开采集设备

  Fd_video=open(”/dev/v41/video0”,0_RDWR);

  第二步:查询设备属性

  rc=ioctl(Fd_video,VIDIOCGCAP,&vC);通过设备驱动程序提供的ioctl接口来查询设备的相关属性,具体属性用structtvideo_capture类型的结构体变量vc来存储。video_capture是Linux下对视频设备描述的结构体变量类型之一。

  第三步:查询、设置将要采集的图像的格式,包括大小、颜色位数、图像数据表示格式等信息。在Linux中,这些信息保存在一个structvideo_picture类型的变量中。在本设计中用全局变量vp来保存查淘的信息。

  ret=iocfl(Fd_video,VIDIOCGPICT,&vp);//图像相关信息保存在vP变量中

  可以通过以VIDIOCSPICT为参数的ioctl调用来设置图像的类型,如在本系统中支持如下几种类型的图像:24位RGB888格式的彩色图像、16位RGB565格式的彩色图像、256级灰度的灰度图像。设置方法是先对vp的成员变量vp.palette进行赋值,如VIDEO_PALETTE_RGB24、VIDEO_PALETFE_RGB565或者VIDEO_PALETYE_GREY等之一,然后调用ioetl(video,VIDIOCSPICT,&vp)来设置。同样也可以设置分辨率等其它参数,方法与设置数据格式大同小异,不再赘述。

  第四步:建立内存映射,把视频设备的数据缓冲区地址映射到用户进程地址空间,这样做比直接调用read()函数读取数据的速度要快的多。在本设计中定义了一个unsignedchar*型的指针变量memoryMap来保存数据缓冲区的映射地址。

  memoryMap=(unsignedchar*)mmap(0,memoryBuffer.size,PROT_READ|PROT_WRITE,MAP_SHARED,Fd_video,0);//建立数据缓冲区的映射

  第五步:读取数据。到这一步就可以采集图像数据了,可以在采集到一幅图像的数据后触发下一个幅图像开始采集的信号,然后在这段时间里进行图像处理的运算,这样可以最大限度的利用图像采集设备,从而提高系统的效率。摄像头的驱动提供了这种双缓冲机制,通过向摄像头发送VIDIOCMCAPTURE控制命令,就会触发采集图像数据到指定的缓冲区中,这一步是不会阻塞当前进程的,程序会执行下一条指令而不是等到数据采集完毕。通过向摄像头发送VIDIOCSYNC控制命令,当前进程就会阻塞直到指定的缓冲区数据填满。处理的流程如下所示:

  VIDIOCMCA玎uREbuffer0//触发buffer0开始采集

  While(1)

  {

  VIDIOCMCAPTUREbuffer1//触发buffer1开始采集

  VIDIOCSYNCbuffer0//同步buffer0中的数据

  。..

  //processbuffer0//处理得到的buffer0中数据

  。..

  VIDIOCMCAPTUREbuffer0//触发buffer0开始采集

  VIDIOCSYNCbuffer1//同步buffer1中的数据

  。..

  //processbuffer1//处理得到的bufferl中数据

  。..

  }

  3图像处理

  图像处理是一门复杂的技术,它涉及到图像预处理、图像分析、图像理解等多个方面。它和其它多个学科有着密切的联系,尤其是近年来模式识别理论和技术、人工智能理论、分形理论以及小波分析技术等相关理论和技术的发展,为图像处理技术的研究提供了坚实的理论基础和新的分析手段。针对于不同应用背景采用的处理流程和算法各不相同,但是都必须首先获得图像的数据,然后在根据需要选择处理流程和相关算法。在这里本文并不详细介绍图像处理的流程和算法,只给出在本系统平台上实现的图像处理算法的效果图。图3是通过摄像头采集到的彩色图像,图4是经过灰度转化、二值化、边缘检测、细化和连通域榆测后的效果图。

  

图片.png

  图3摄像头采集到的图像

  

图片.png

  图4处理效果显示

  4图像显示

  本设计采用的是一个240X320分辨率的16位液晶屏幕,可以通过操作S3C2410内部的相关寄存器来直接控制显示,由于采用了ARM-Linux作为操作系统,可以直接操作Linux下的Framebuffer设备来完成图像的显示,帧缓冲(Framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的、统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。

  在应用程序中首先要打开Framebuffer设备,在Linux系统中Framebuffer设备一般映射为/dev/fb,可以有多个设备。然后调用ioctl提供的接口获取设备信息,主要是获得当前Framebuffer设备的分辨率、色深、每一行数据占的字节数。关键的一步是将屏幕缓冲区映射到用户空间,Framebuffer设备可以看成是显存的映像,但是Linux所有的设备驱动均在内核态工作,所以无法在当前进程空间中直接访问,通过映射机制可以直接把显存的起始地址映射到当前进程的地址空间,从而可以快速方便的实现显示,建立映射的方法如下:

  pfb=mmap(0,FBDraw_finfo.smem_len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);//以read、write和share方式映射

  屏幕上坐标为(x,y)的点在显存中的位置是:

  pro+x*(fb_vinfo.bits_per_pixel》》3)+Y*fb_finfo.line_length,对这个位置赋响应的颜色值就可以在屏幕上显示出来。需要注意的是当色深(fb_vinfo.bits_per_pixel)不同时,颜色值的格式也不一样。

  把经过图像处理后的图像数据或者采集到的原始图像数据转化成Framebuffer设备的颜色数据格式(RGB565、RGB888等)后,将数据复制到从地址pfb开始的内存中,就可以实现图像的显示。

  5结束语

  本文设计了以ARM核处理器S3C2410为计算与控制核心,以ARM-Linux为操作系统的图像采集、处理、显示的一个平台,用于图像处理中算法验证,调试与实际使用表明,该系统具有良好的使用效果和较高的丁作效率,现已用于战场侦察系统的演示。同时本系统具有功耗小、体积小、网络功能强等特点,可以方便的扩展到侦察、安防、视频采集等领域。

  本文创新点:利用ARM平台,结合嵌入式操作系统进行图像采集和处理,在较小的系统内实现了主要的图像系统功能,取得较好的效果,并具有良好的应用前景。


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案