1基于摄像头的图像采集与处理应用1、摄像头工作原理图像传感器,是组成数字摄像头的重要组成部分。根据元件的材料不同,可分为CCD(ChargeCoupledDevice,电荷耦合元件)和CMOS(ComplementaryMetal-OxideSemiconductor,金属氧化物半导体元件)两大类。电荷藕合器件图像传感器CCD(ChargeCoupledDevice),它使用一种高感光度的半导体材料制成,能把光线转变成电荷,通过模数转换器芯片转换成数字信号,数字信号经过压缩以后由相机内部的闪速存储器或内置硬盘卡保存,因而可以轻而易举地把数据传输给计算机,并借助于计算机的处理手段,根据需要和想像来修改图像。CCD由许多感光单位组成,通常以百万像素为单位。当CCD表面受到光线照射时,每个感光单位会将电荷反映在组件上,所有的感光单位所产生的信号加在一起,就构成了一幅完整的画面。互补性氧化金属半导体CMOS(ComplementaryMetal-OxideSemiconductor)和CCD一样同为在图像传感器中可记录光线变化的半导体。CMOS主要是利用硅和锗这两种元素所做成的半导体,使其在CMOS上共存着带N(带–电)和P(带+电)级的半导体,这两个互补效应所产生的电流即可被处理芯片纪录和解读成影像。然而,CMOS的缺点就是太容易出现杂点,这主要是因为早期的设计使CMOS在处理快速变化的影像时,由于电流变化过于频繁而会产生过热的现象。CCD和CMOS在制造上的主要区别是CCD是集成在半导体单晶材料上,而CMOS是集成在被称做金属氧化物的半导体材料上,工作原理没有本质的区别。CCD制造工艺较复杂,采用CCD的摄像头价格都会相对比较贵。事实上经过技术改造,目前CCD和CMOS的实际效果的差距已经减小了不少。而且CMOS的制造成本和功耗都要低于CCD不少,所以很多摄像头生产厂商采用的CMOS感光元件。成像方面:在相同像素下CCD的成像通透性、明锐度都很好,色彩还原、曝光可以保证基本准确。而CMOS的产品往往通透性一般,对实物的色彩还原能力偏弱,曝光也都不太好,由于自身物理特性的原因,CMOS的成像质量和CCD还是有一定距离的。但由于低廉的价格以及高度的整合性,因此在摄像头领域还是得到了广泛的应用工作原理:为了方便大家理解,我们拿人的眼睛来打个比方。当光线照射景物,景物上的光线反射通过人的晶状体聚焦,在视网膜上就可以形成图像,然后视网膜的神经感知到图像将信息传到大脑,我们就能看见东西了。摄像头成像的原理和这个过程非常相似,光线照射景物,景物上的光线反射通过镜头聚焦,图像传感器就会感知到图像。具体部分是这样的,摄像头按一定的分辨率,以隔行扫描的方式采集图像上的点,当扫描到某点时,就通过图像传感芯片将该点处图像的灰度转换成与灰度一一对应的电压值,然后将此电压值通过视频信号端输出。如图1所示,摄像头连续地扫描图像上的一行,则输出2就是一段连续的电压信号,该电压信号的高低起伏反映了该行图像的灰度变化。当扫描完一行,视频信号端就输出一个低于最低视频信号电压的电平(如0.3V),并保持一段时间。这样相当于,紧接着每行图像信号之后会有一个电压“凹槽”,此“凹槽”叫做行同步脉冲,它是扫描换行的标志。然后,跳过一行后(因为摄像头是隔行扫描的),开始扫描新的一行,如此下去,直到扫描完该场的视频信号,接着会出现一段场消隐区。该区中有若干个复合消隐脉冲,其中有个持续时间远长于其它的消隐脉冲,称为场同步脉冲,它是扫描换场的标志。场同步脉冲标志着新的一场的到来,不过,场消隐区恰好跨在上一场的结尾和下一场的开始部分,得等场消隐区过去,下一场的视频信号才真正到来。摄像头每秒扫描25幅图像,每幅又分奇、偶两场,先奇场后偶场,故每秒扫描50场图像。奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行。摄像头有两个重要的指标:分辨率和有效像素。分辨率实际上就是每场行同步脉冲数,这是因为行同步脉冲数越多,则对每场图像扫描的行数也越多。事实上,分辨率反映的是摄像头的纵向分辨能力。有效像素常写成两数相乘的形式,如“320x240”,其中前一个数值表示单行视频信号的精细程度,即行分辨能力;后一个数值为分辨率,因而有效像素=行分辨能力×分辨率。图1摄像头视频信号2、图像采集CCD摄像要能有效地对视频信号进行采样,首先要处理好的问题是如何提取出摄像头信号中的行同步脉冲、消隐脉冲和场同步脉冲,否则,单片机将无法识别所接收到的视频信号处在哪一场,也无法识别是在该场中的场消隐区还是视频信号区,更无法识别是在视频信号区的第几行。这里有两种可行的方法。第一,直接采用A/D转换进行提取。当摄像头信号为行同步脉冲、消隐脉冲或场同步脉冲时,摄像头信号电平就会低于这些脉冲模式之外时的摄像头信号电平。据此,可设一个信号电平阈值来判断A/D转换采样到的摄像头信号是否为行同步脉冲、消隐脉冲或场同步脉冲。第二,就是给单片机配以合适的外围芯片,此芯片要能够提取出摄像头信号的行同步脉冲、消隐脉冲和场同步脉冲以供单片机作控制之用。由于单片机的处理速度有限,而一些脉冲的间隔时间又较短,我们就采用了第二种方法进行信号提取。LM1881视频同步信号分离芯片可从摄像头信号中提取信号的时序信息,3如行同步脉冲、场同步脉冲和奇、偶场信息等,并将它们转换成TTL电平直接输给单片机的I/O口作控制信号之用。LM1881的端口接线方式如图2所示。图2LM1881其中,引脚2为视频信号输入端,引脚1为行同步信号输出端(如图3中的b)。引脚3为场同步信号输出端,当摄像头信号的场同步脉冲到来时,该端将变为低电平,一般维持230us,然后重新变回高电平(如图3中的c)。引脚7为奇-偶场同步信号输出端,当摄像头信号处于奇场时,该端为高电平,当处于偶场时,为低电平。事实上,不仅可以用场同步信号作为换场的标志,也可以用奇-偶场间的交替作为换场的标志。图3LM1881信号时序图CMOS摄像头的灰度值、以及场、行中断直接给出数字量,无需A/D转换以及帧、场分离。4图像采集的关键是时序的把握。此外,中断的优先级一定要保证,要不然无法采集到完整的图像。摄像头每秒扫描25幅图像(即25帧数据),每幅又分奇、偶两场,先奇场后偶场,故每秒扫描50场图像。奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行。我们使了ECT的通道1捕捉场中断,通道0捕捉行中断。如下面摄像头信号采集时序图所示:(1)在采集时乎略TCLK,首先是因为它太快了,捕捉不到,另外也没有必要捕捉到它。图4摄像头信号采集时序图采集图像时尽快地一个点一个点的取就行了,和模拟摄像头一样。(2)VYNSC是判断是否一幅图像开始,周期是20mS,其中高电平持续时间很短,忽略;HREF是判断是否一行图像的开始,周期是63us左右,其中高电平持续时间为40us,低电平持续时间23us,那么可以算一下一场有多少行:20ms/63us=317,当然实际上没有这么多,消隐和无效信号去掉之后只有292行。(3)必须明确:场中断要通过下降沿捕捉,行中断要通过上升沿捕捉。若用IRQ捕捉行中断必须加反相器。(4)有效的灰度数据是在行中断之后的上升沿内,所以不要在行中断后的23US后采集,那是废数据。计算一下一行OV6620有多少个点:40us/110ns=363消隐和无效信号去掉之后只有356个点。3、图像处理本设计针对的是基于摄像头简单黑白道路采集。摄像头采集到赛道图像后,必须对图像数据进行正确的处理,才能提取出赛道位置,保证后续工作的顺利进行。图像处理简单的来说就是根据摄像头传回来的视频信号中提取出黑线的位置。常用的黑线提取算法划分为二值化算法、直接边缘检测算法和跟踪边缘检测算法。二值化算法的思路是:设定一个阈值valve,对于视频信号矩阵中的每一行,从左至右比较各像素值和阈值的大小,若像素值大于或等于阈值,则判定该像素对应的是白色赛道;反之,则判定对应的是黑色的目标引导线。记下第一次和最后一次出现像素值小于阈值时的像素点的列号,算出两者的平均值,以此作为该行上目标引导线的位置。直接边缘检测算法:采用逐行搜索的算法,5首先找到从白色像素到黑色像素的下降沿和从黑色像素到白色像素的上升沿,然后计算上升沿和下降沿的位置差,如果大于一定的标准值,即认为找到了黑线,并可求平均值算出黑线的中心点。至于上升沿、下降沿的检测,可以通过上上次采样数与这次采样数的差值的绝对值是否大于一个阈值来判断,如果“是”且差值为负,则为上升沿;如果“是”且差值为正,则为下降沿。跟踪边缘检测算法:由于黑色的目标引导线是连续曲线,所以相邻两行的左边缘点比较靠近。跟踪边缘检测正是利用了这一特性,对直接边缘检测进行了简化。其思路是若已寻找到某行的左边缘,则下一次就在上一个左边缘附近进行搜寻。这种方法的特点是始终跟踪每行左边缘的附近,去寻找下一列的左边缘,所以称为“跟踪”边缘检测算法。4、图像应用我们采用的是直接边缘检测算法,因为该方法抗环境光强变化干扰的能力更强,同时还能消除垂直交叉黑色引导线的干扰。由于智能车上安装的摄像头相对于赛道存在一定的倾斜角度,因此会造成采集到的赛道图像具有一定的梯形失真,即图像中的赛道远端窄、近端宽,远端图像不清晰而近端图像清晰可靠,如图5所示图5图像采集的还原图所以就将一场图像分为两部分,近端部分和远端部分。为了给单片机处理节约时间我们采用了全场动态范围来提取黑线即首先取得第一幅图像得到近处基准行黑线位置,在此基础上确定下一幅图像搜索范围由于黑先是连续变化的,远端部分黑线就根据前两行黑线位置的偏差量再加上一个固定范围来寻找。在图像滤波算法中,还应考虑以下几个方面:首先,根据图像模型去噪,例如,由于赛道的黑色引导线是绝对连续的,故两个中间有黑线的行之6间不能有全白行(注意中间二字:如果黑线在边缘,则可能是由于摄像头的视野太窄或智能车身不正导致在过弯道时只能看到部分黑色引导线),这主要是解决光线对摄像头的反光问题;其次,在理想的情况下,根据赛道的黑色引导线的连续性,如果某一行求取的中心线位置与相邻的两行都相差很大,则可以认为该行数值错误,抛弃该行的数据或使用其前后两行数据的平均值来替代该错误数值用以校正。这样一来提取出的黑线就比较可靠了,不过在实际调试中远处图像畸变比较大而且行距也大,偶尔还是可能会出现错误提取黑线,但是这对车体的控制影响不是很大。摄像头车相对于电磁车与光电车最大的优势在于有较远的前瞻,所以图像精度就非常重要了即行分辨率和分辨率越高图取出来的黑线位置就越稳定可靠,这也是所有控制算法的基础。由于单片机内存只有8K,存储图像数据的数组就不能开的太大,否则再加上一些全局变量,静态变量,临时变量,明显内存就不够用了。我们想到的第一个解决办法是买到更大内存的单片机可是这个没实现,经过尝试与多方设想我们采用动态内存刷新来提高图像精度然后再加上锁相环超频到64M提高了图像的纵向与横向精度,从而使前瞻达到了原来的两倍多。为了使智能车适应能力更强抗啊绕能力越好,我们将原来静态阈值改为动态阈值,使得每一行之间的阈值过度更加自然。因为不同的场合光线强度不一样从而阈值也就不一样,相邻两行之间的灰度值不会相差很大。注,动态阈值取法和内存刷新说明:1)动态阈值取法:将前一行的边沿检测范围内的所有大于阈值的点做和的平均,所有小于阈值的点同样做和得平均,再将两个平均值相加除2作为下一行的阈值2)内存刷新:将采得的图像数据循环放入一维数组里,当数据存满时,在确保所采的第一行摄像头中的数据已经被处理的前提下,将该行数据覆盖,以此类推。已达到内存实时刷新的目的。