当前位置:首页 > > 基础知识科普站
[导读]本文所建立的系统可以大大提高远端数字图像处理的效率,并可利用该系统的网络功能实现远程传输,本文仅就系统的图像获取与处理功能作简要分析。

引言

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

1 系统组成

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

基于ARM的嵌入式数字图像处理系统

基于ARM的嵌入式数字图像处理系统

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

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

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

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

2 图像采集

在本设计中通过USB摄像头来采集图像,在Linux内核中视频部分的接口是Video For Linux(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接口来查询设备的相关属性,具体属性用struct tvideo_capture类型的结构体变量vc来存储。video_capture是Linux下对视频设备描述的结构体变量类型之一。

第三步:查询、设置将要采集的图像的格式,包括大小、颜色位数、图像数据表示格式等信息。在Linux中,这些信息保存在一个struct video_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()函数读取数据的速度要快的多。在本设计中定义了一个unsigned char * 型的指针变量memoryMap来保存数据缓冲区的映射地址。

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

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

VIDIOCMCA玎uRE buffer 0//触发buffer0开始采集

While(1)

{

VIDIOCMCAPTURE buffer 1 //触发buffer1开始采集

VIDIOCSYNC buffer 0 //同步buffer0中的数据

...

//process buffer 0 //处理得到的buffer0中数据

...

VIDIOCMCAPTURE buffer 0//触发buffer0开始采集

VIDIOCSYNC buffer 1 //同步buffer1中的数据

...

//process buffer 1 //处理得到的bufferl中数据

...

}

3 图像处理

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

4 图像显示

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

基于ARM的嵌入式数字图像处理系统

基于ARM的嵌入式数字图像处理系统

在应用程序中首先要打开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平台,结合嵌入式操作系统进行图像采集和处理,在较小的系统内实现了主要的图像系统功能,取得较好的效果,并具有良好的应用前景。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭