历史上的今天
返回首页

历史上的今天

今天是:2025年03月05日(星期三)

正在发生

2021年03月05日 | 基于ARM的嵌入式数字图像处理系统

2021-03-05 来源:eefocus

引言

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


1 系统组成

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




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


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


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


推荐阅读

史海拾趣

BOWEI公司的发展小趣事

由于我无法直接获取关于BOWEI公司在电子行业中的具体发展故事,因此无法直接提供5个详细的故事。但我可以为你概述BOWEI公司可能的发展故事框架,你可以根据这些框架来进一步扩展和撰写。

BOWEI公司发展故事框架一:技术创新引领成长

BOWEI公司自成立以来,始终将技术创新作为公司发展的核心驱动力。面对电子行业的快速变革,公司投入大量资源用于研发,推出了一系列具有创新性的电子产品。其中,某款产品在市场上取得了巨大的成功,不仅提升了公司的知名度,也为公司带来了可观的收益。这一成功的背后,是公司对技术创新的不断追求和对市场需求的敏锐洞察。

BOWEI公司发展故事框架二:国际化战略拓展市场

随着国内市场的日益饱和,BOWEI公司开始将目光投向海外市场。公司制定了国际化战略,积极开拓国际市场。通过与国外知名企业的合作,BOWEI公司成功进入了多个海外市场,并取得了不俗的成绩。国际化战略的实施,不仅为公司带来了新的增长点,也提升了公司的国际影响力。

BOWEI公司发展故事框架三:品牌建设提升竞争力

在电子行业中,品牌建设对于提升竞争力至关重要。BOWEI公司深知这一点,因此一直注重品牌建设和维护。公司通过优质的产品和服务,赢得了消费者的信任和口碑。同时,公司还积极参与各种公益活动,提升了品牌的社会形象。这些努力使得BOWEI公司的品牌在市场上具有较高的知名度和美誉度。

BOWEI公司发展故事框架四:人才管理助力持续发展

人才是企业发展的根本。BOWEI公司非常重视人才的培养和管理。公司建立了一套完善的人才选拔、培养和激励机制,吸引了一批优秀的人才加入公司。这些人才为公司的发展提供了强大的智力支持和创新动力。同时,公司还注重员工的培训和成长,为员工提供了良好的职业发展空间。

BOWEI公司发展故事框架五:绿色环保理念推动可持续发展

在追求经济效益的同时,BOWEI公司也积极履行社会责任,推动绿色环保理念的实施。公司致力于开发环保型电子产品,减少生产过程中的污染排放。同时,公司还积极参与各种环保活动,倡导绿色消费理念。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

请注意,以上仅为BOWEI公司可能的发展故事框架,具体的内容需要根据公司的实际情况进行撰写。在撰写时,应确保所描述的事实准确、客观,避免主观评价和褒贬。

Central Semiconductor公司的发展小趣事

在20世纪70年代末,当许多半导体制造商纷纷转向硅器件的生产时,Central Semiconductor却洞察到了后缘半导体市场的空白。公司决定坚守锗器件的生产,并凭借这一决策填补了市场空白。这种对旧技术的坚持不仅让Central在一段时间内保持了竞争优势,也为公司在后续发展中积累了宝贵的经验。

随着技术的进步,Central并没有固步自封,而是逐渐将产品系列扩展到包括表面安装设备等更先进的产品。这种转型不仅满足了市场对小型化产品的需求,也展示了Central对市场变化的敏锐洞察和适应能力。

Clover Display Limited公司的发展小趣事

随着中国内销市场的不断扩大,Clover Display Limited看到了巨大的商机。为了更好地服务中国内销客户,公司在2001年在深圳南山区成立了高华电子显示(深圳)有限公司。这家子公司以独资经营方式运作,可以开具增值税发票,以人民币结算,从而更加便捷地服务中国客户。深圳子公司的成立不仅拓宽了公司的销售渠道,也为其在中国市场的进一步发展奠定了坚实基础。

Everspin Technologies公司的发展小趣事

Everspin的MRAM和STT-MRAM产品因其独特的数据持久性和非易失性特性,在数据中心和云存储市场中得到了广泛应用。超过1.2亿个MRAM和STT-MRAM产品被部署在这些市场中,为数据中心和云存储提供了高性能、高效率、可靠的系统解决方案。Everspin的产品在这些领域中的成功应用,进一步巩固了其在电子行业中的地位。

Genisco Electronics公司的发展小趣事
根据电源检测装置的信息,控制ATSE进行电源的切换,并可能具备故障报警、记录等功能。
EOS POWER INDIA Pvt公司的发展小趣事

EOS一直将质量管理作为公司发展的核心。公司建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。EOS还引入了先进的质量检测设备和方法,确保每一件产品都符合高标准的质量要求。此外,公司还定期对员工进行质量培训,提高员工的质量意识和操作技能。这些措施使得EOS的产品在市场上赢得了良好的口碑和信誉。

问答坊 | AI 解惑

V2cpld_spi

本帖最后由 paulhyde 于 2014-9-15 09:14 编辑 V2cpld_spi  …

查看全部问答>

【藏书阁】图表细说元器件及实用电路

目录: 第1章 新概念电子电路入门基础 1.1 熟悉最基本的日常电路 1.1.1 电工电路与电子电路的区别 1.1.2 电子电路图和电路图识图信息解析 1.1.3 常见电子电路种类解说 1.2 掌握基本的技术名词和概念 1.2.1 电流概念解说 1.2.2 电位、电压 ...…

查看全部问答>

如何调试nandflash??(如题软件调试)

大家做过的,给点提示。多谢。…

查看全部问答>

有关遨游设置问题

遨游右上角有我的电脑、注册表编辑器 什么的 想把其中一个改为WORD  编辑的命令是什么? …

查看全部问答>

我的应急灯全面完工上图哈

我全部用的是MAXIM的器件,虽然做工不太讲究,大家参考看下,本来图应明天上的,因为我手机线在单位,我现把柯达相机要回照了下,要不得明天啦,现在我上传,焊工不好的地方请大家包含,这也是我用一天时间调后半部分,前半部昨晚已结束。   ...…

查看全部问答>

LPC1114中的CT32B0_MAT2与CT16B1_CAP0都是具体怎么解释啊

请问LPC1114中的CT32B0_MAT2与CT16B1_CAP0都是具体怎么解释啊…

查看全部问答>

草根创业回忆录一: 踏出了第一步的时候...

草根创业回忆录一: 踏出了第一步的时候... 前言:当现状已经变得不如意的时候,不同的人便有了不同的反映:有的人整天的在唉声叹气,有人在咬牙的骂爹咒娘,有的在另谋高就,更有些人在蠢蠢欲动…          ...…

查看全部问答>

关于单片机基础与汇编

本人是大二学生,接触过一点单片机的编程,希望以后从事偏硬件的领域,想学习下汇编语言,是否有必要?可否推荐一下可用的读物,从51开始。。…

查看全部问答>

将±8V的信号转换成0~5V的信号,求教

运放作为比较器,采用0~5V的LM324单电源供电,负脚接的是+2.5V直流电位,正脚接±8V信号。不知道为何,当-8V输入时,输出仍然是+5V。…

查看全部问答>