嵌入式ARM系统中图像的识别方法研究

嵌入式ARM系统中图像的识别方法研究
郎璐红;余红英;董俊
【摘 要】A recognition method of video image acquisition system based on embedded ARM is proposed. With the S3C2440 microprocessor chip and Linux 2.6.32 system, using a CMOS camera OV9650, the best image of the RGB16 format is obtained by automatically adjust the camera position. Then the image shape, color, size and other information are recognized by rocessing and analyzing the image color information. The experimental results show that this method can obtain satisfactory effect.%提出一种基于嵌入式ARM系统中采集视频图像的识别方法。基于Linux2.6.32的S3C2440微处理器芯片上,使用CMOS摄像头OV9650,通过自动调整摄像头位置采集最佳效果的图像,获得RGB16格式的图像数据。对图像彩信息进行处理和分析,识别图像的形状、颜、大小等信息。实验结果表明该方法能获得较满意的效果。
【期刊名称】《齐齐哈尔大学学报(自然科学版)》
【年(卷),期】2014(000)005刺辊
【总页数】5页(P20-23,28)
【关键词】图像识别;S3C2440;CMOS摄像头
【作 者】郎璐红;余红英;董俊
【作者单位】芜湖职业技术学院 信息工程学院,安徽 芜湖 241006;芜湖职业技术学院 信息工程学院,安徽 芜湖 241006;中科院合肥物质科学研究院 智能机械研究所,合肥 230031
【正文语种】中 文
【中图分类】小文件存储TP751.1
图像是人类获取和交换信息的主要来源,应用于军事侦察、危险环境的自主机器人、智能机器人、车牌、指纹识别、工件定位、识别等人类生活和工作的方方面面。图像包含的信息量大,对处理速度的要求较高。通常对图像信息的处理都是把图片上传到上位机再进行识别,而嵌入式ARM系统以其功能强大、体积小、应用灵活、成本低、速度快等优点,在
远程图像采集和处理中可以实现在远端现场通过图像获取设备获取目标图像,并在远程嵌入式系统平台上直接进行相关的图像处理,这样得到的数据可以更方便地利用无线网络传送回本地计算机中。本文介绍的图像对于图像的形状、颜等信息的识别即是通过这种方法实现的。
基于ARM9的S3C2410芯片并没有集成摄像头接口,如果需要连接摄像头,必须通过USB接口,如连接ZC301 USB摄像头,USB摄像头通常输出的图像流为YUV或者MJPG格式,要进行转换需要占用CPU时间;而同样基于ARM9的S3C2440A芯片内部集成了COMS摄像头接口,除了可以输出YUV格式的图像信号外,还可以输出RGB格式的图像在屏幕上显示或者进行分析处理。
从S3C2440A数据手册[1]关于Camera interface,即CAMIF的描述可以知道,CAMIF支持ITU-R BT.601/656和 YCbCr 8-bit 两种数字视频接口标准,最大的输入像素是4096*4096(或压缩后的2048* 2048)。S3C2440A的CAMIF具备2级scaler调整:scaler图像调整预览,这是为了获得更小的图像,例如PIP (Picture In Picture);scaler图像调整编码,这是为了获得编码后的有效的图像信息,例如平面类型的图像YCbCr 4:2:0 和4:2:2。相应这2级
scaler,S3C2440A提供了两路DMA(直接存储器存取)通道,DMA通道如图1所示:一个预览输出DMA,即P通道,有四块DMA缓冲区,这个通道用于将采集到的 RGB视频图像数据直接显示到LCD上,最大支持640*480像素;另外一个是编码输出DMA,即C通道,也有四块DMA 缓冲区,存储的是用于后期处理视频的YCbCr 图像数据,这两个通道在AHB总线上是独立的。S3C2440摄像头接口CAMIF的结构图如图2所示。
鉴于嵌入式系统的资源有限,因此它不会象桌面系统一样包含多余的设备驱动程序,并且,因为各个嵌入式系统的硬件结构千差万别,设备通常也没有统一的驱动程序。在 Linux操作系统中,硬件的驱动程序都是由内核支持的,而Linux内核对硬件的支持可分为内置和外挂模块两种方式。目前比较新的内核版本都会支持V4L2,使用CMOS摄像头OV9650时只要正确配置内核,编写IIC驱动和摄像头的驱动,采用模块加载的方式作为外挂模块加入到内核或者直接编译进内核,就可以完成采集视频图像的功能。
S3C2440A提供了摄像头接口,要采集图像时还需要摄像头模块。OV9650是Omni Vision公司生产的CMOS摄像头[2],支持常用的图像格式,只要把双方设置成同样的格式就能正确处理数据。如果OV9650设置成输出YCbCr4:2:2格式,而SC2440A的存贮格式设置为R
GB16,则可以通过厂商设定的程序进行转换。连接OV9650摄像头模块时,只需通过它的SCCB数据接口与S3C2440A的IIC总线接口相连,OV9650提供了大量寄存器,对其工作参数进行设置就可以采集到视频原始数据,也可以定义一帧视频图像的大小等。
S3C2440A的摄像头接口CAMIF可以在预览DMA通道(P通道)输出RGB24或者RGB16格式的数据:摄像头接口的特殊功能寄存器PREVIEW主调整控制寄存器CIPRSCCTRL的第30位是视频输出的格式控制位,设置为1输出RGB24格式数据,0输出RGB16格式数据。
S3C2440A把RGB格式的图像数据存储到内存中,可以被用做图片预览。RGB图像有两种不同的数据格式:一种是RGB 24bit格式,这种格式的数据1个像素为一个字(word,32bit);另一种是RGB 16bit的数据格式,这种格式的数据1个像素为半字(half word,16bit),2个像素为一个字。
以RGB 16bit格式的图像数据存储方式为例,每个字32bit包含2个像素,一个像素的16bit由R5、G6、B5组成,即16位二进制数中,红占5位,绿占6位,蓝占5位,如图3所示,RGB2/1占用一个字空间,而其中的一个像素如像素RGB2由R5、G6、B5组成,占用一个半字的空间。
通过对像素所包含信息的分析处理,可以得到关于图像的形状、颜等,下面仍以RGB 16bit格式图像数据为例,研究图像像素彩处理的方法,如图3所示。
榄香烯乳状注射液
假设OV9650采集的一帧图像数据有320*256个像素,数据格式是RGB16,也就是RGB565,每个像素由十六位二进制数组成,即半字(half word)。每个像素的颜分量R、G和B分别占5、6和5位二进制位,对这些像素点进行处理,理论上可以使每种颜分量都使用0-255共256种不同的状态表示,如图4所示。
处理的方法,首先根据一个像素中RGB的存储格式,分别取出其中每个像素点中的R、G、B值,并放入8位字节的高位中。假设一个RGB16格式数据的存储地址是addr+1和addr,如图5所示,则取出一个像素中的红信息的方法是:
r = (*(addr+1) & 0xf8);            //取出半字中高位字节的高5位为Red
//得到的结果后面三位填0本地摄像头
这样像素中的红分量理论上至少可以有256(28)种不同的等级。同理,分别取出绿和蓝信息:
g=((*(addr+1)&0x07)<<5)+((*(addr)&0xe0)>>3);          //绿
b = ((*(addr) & 0x1f) << 3);          //蓝
根据上面取出的R、G、B值,可以对图像的颜、形状等各种信息进行判断。实验中要识别图像颜是否是红纯,通过对每个像素中红、绿、蓝三的统计判断红成分多少来确定,如图6所示的流程可以用来判定一个像素是否为红,其中V0,V1,V2,V3为事先规定的阀值参数,实验表明,阀值参数选择为V0=30,V1=120,V2=40,V3=8,能够正确识别出红。
    对于预知几何形状的图像,可以通过对像素进行统计的方法判断形状,实验中要对圆锥体、球体和圆柱体3种形状进行判别,首先取出包含图像的像素,再把这部分图像等分为3部分,统计这3部分像素的总和,如图7(1)所示,形状判别的流程图如图7(2)所示,其它几何图形形状的判别可依据此方法。
要对图像进行处理,首先需要获取当前时刻的一帧图像。在实际处理图像时为了得到所需图像的最佳效果、消除图像延迟,可以进行多次拍摄;另外嵌入式系统设备常常用于无人职守的地方,因此需要根据对图像大小和在屏幕中位置的分析自动调整摄像头位置。
为保证摄像头距离拍摄物体远近适中,首先设定在拍摄正常图像情况下包含颜信息的像素占整幅图像的比例,然后计算出摄像头所获取的图像在整幅图像中包含有颜信息的像素的总数。假设addr和addr+1为存储一个像素的半字,则统计像素总数tmpSum的方法是:
冰鞋座if(*(addr+1) != 0||*(addr) != 0)      //去除干扰条件可以放宽为>阀值
tmpSum ++;      //不为0的像素总数
计算出一帧图像中含有颜信息的像素值占总像素值的比例,假设通过图像识别得到的检测物体占整个屏幕的百分比为scale,如果不在设定的范围内,则据此调整摄像头的前后位置。
scale = (tmpSum*1.0)/一帧图像的总像素;
if(scale < 设定值){
//调整摄像头前后位置
}
也可以用类似的方法对图像的左右(X轴)或者上下(Y轴)位置调整,只要记录整个图像在X轴和Y轴上所在的列和行。因为一帧图像的所有像素在内存中是按地址线性排列的,第i个像素的X轴坐标为tmpX=i%图像宽度,Y轴坐标为tmpY=i/图像宽度,再据此调整摄像头的左右位置。
测试结果表明,在基于S3C2440A的嵌入式ARM平台上,移植Linux2.6.32操作系统,连接CMOS摄像头用作视频图像采集,只要背景颜和所需要识别的图像颜有差别,对采集到的RGB格式的图像像素进行处理,再对处理后的像素进行分析,都能够准确识别出颜、灰度、形状、大小等信息。如图8所示图片,是利用放在智能小车上的摄像头自动拍照、识别图像颜和形状,结果为红圆柱体,并且利用自动调整小车位置的方法,得到物体基本上在中间位置的图片。

本文发布于:2024-09-22 04:08:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/137783.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   摄像头   像素   进行   信息   格式   颜色   处理
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议