搜档网
当前位置:搜档网 › 基于FPGA实现的自动白平衡算法

基于FPGA实现的自动白平衡算法

基于FPGA实现的自动白平衡算法
基于FPGA实现的自动白平衡算法

基于FPGA实现的自动白平衡算法

Realization of Auto White Balance Algorithm Based on FPGA

摘要

自动白平衡技术广泛应用于图像采集和图像处理领域,满足了人们对图像信息的需求。现有的自动白平衡算法很多,它们在计算复杂度、白平衡处理效果以及硬件适应性等方面存在着很大的差异。尽管这些算法都能得到较好的色彩还原效果,但是他们大多数是基于特定的假设条件,实际应用起来限制条件太多,因此实用性较差,尤其是对大块单一颜色的图像白平衡的处理是一个难点。本文通过对现有自动白平衡算法的研究,结合FPGA高性能、低功耗、速度快、设计灵活、可扩充、可升级的特点,在不影响画面质量的前提下,改进了基于色温估计的自动白平衡算法,并在DE2开发板上验证算法的有效性。

首先,本文介绍了色彩图像学的相关基础知识,包括:颜色基础知识、色温、颜色空间、颜色恒常及图像的一般处理流程。接下来对FPGA技术的相关基础知识和编程语言进行了详细的介绍。

其次,研究现有灰度世界白平衡算法并对基于色温估计的自动白平衡算法进行了改进。灰度世界白平衡算法是基于特定的假设前提,当假设条件不成立(特别是当图像中有大面积色块),算法几乎失效。为了解决这个问题,本文通过对灰度世界算法计算过程的研究,改进了基于色温估计的自动白平衡算法。

最后,基于色温估计的自动白平衡算法的FPGA设计与效果验证。利用Quartus II10.1软件将该算法设计成Verilog HDL硬件描述语言,并经过时序分析、仿真、综合,最后下载到DE2开发板上的FPGA芯片。

经过实验对比,表明在较低计算复杂度和不影响图像质量的前提下,在处理色彩单一的图像时,改进后的色温估计白平衡算法较灰度世界算法具有更好的色彩还原效果。

关键词:自动白平衡,灰度世界算法,色温估计算法,FPGA,Verilog HDL

ABSTRACT

Automatic white balance technology is widely used in the field of image acquisition and image processing to meet the people's demand for information.There are many existing auto white balance algorithms,and they are different in computational complexity,the white balance

processing effect and hardware adaptation and so on.Although these algorithms can get satisfactory color restoration,most of them are based on certain assumptions.In practice,because of so many restrictions,its practicality is very poor.Especially processing the image with large blocks of a single color is difficult.After studying the existing automatic white balance algorithm,the author makes full use of the FPGA’s advantages,such as:high performance,low power consumption,high speed,a flexible and extensible design features,and puts not damaging the picture quality as a precondition,has improved auto white balance algorithms based on color temperature estimation,and verified the validity of the algorithm on a DE2 development boards.

First,the paper introduces the basic knowledge of color images,including:color temperature,color space,color constancy,and image processing.Then describe the basics of FPGA technology and programming language in detail.

Second,both researching the existing gray world white balance algorithms and improving the algorithm that based on color temperature estimation.Since the gray world white balance algorithm is based on certain assumptions,when the assumption is not true(especially when there are large blocks of color in the image),the algorithm almost failure.In order to solve the problem,through the research of the calculation process of the algorithm,the author improved auto white balance algorithms based on color temperature estimation.

Finally,use the FPGA to design the auto white balance algorithm based on color temperature estimation.Use the Quartus II10.1software and Verilog hardware description language to design the algorithm.After the process of time analysis,simulation and comprehensive,the design will be downloading to the FPGA chips on DE2development boards at last.

Through comparation experiments,it has been proved that,in the same computational complexity and not destroying the picture quality,the improved white balance algorithm which bases on color temperature estimation has gained a better performance over the gray world algorithm in dealing with colorful images,with better color balance as a result.

Key words:Automatic white balance,Gray world algorithm,Color temperature estimation algorithm,FPGA,Verilog HDL

目录

第1章绪论2

1.1课题研究的背景2

1.2课题研究的现状及意义3

1.3论文所做的研究5

1.4论文章节安排5

第2章色彩学与FPGA相关技术研究6

2.1色彩学基础知识6

2.2图像处理流程10

2.2.1色彩插值11

2.2.2自动聚焦12

2.2.3自动曝光13

2.2.4伽马校正13

2.2.5图像增强14

2.2.6白平衡15

2.3FPGA技术介绍15

2.4Verilog HDL编程语言介绍16

2.5本章小结20

第3章灰度世界白平衡算法研究与色温估计白平衡算法改进21

3.1灰度世界白平衡算法研究21

3.1.1算法简介21

3.1.2算法评价23

3.2基于色温估计自动白平衡改进算法24

3.2.1提出背景24

3.2.2算法过程25

3.3本章小结30

第4章基于色温估计自动白平衡算法FPGA设计与实现31

4.1设计流程31

4.2模块功能描述32

4.3模块接口设计33

4.4实验结果分析46

4.5本章小结47

第5章总结与展望48

5.1全文总结48

5.2展望48

参考文献50

致谢53

第1章绪论

1.1课题研究的背景

2014年2月28日晚上21:20分昆明火车站发生暴力恐怖事件,2014年3月8日凌晨02:30分从马来西亚飞往北京的MH370航班突然失踪。这两起事件牵动着全世界人民的心,事件发生后人们通过新闻记者的镜头了解最新的动态。记者的相机直接决定着我们对事件场景的真实还原,这里面存在着一个“彩色还原”的问题,即白平衡问题。

什么是白平衡?在解释白平衡原理之前,我们先了解物体的颜色特征。从物理学的意义上说,我们看到的物体颜色是因为光线照射物体时,物体反射的光在人眼视觉系统中表现出这种颜色。也就是说,人们看到的物体的颜色不仅取决于物体的反射特性,也与射向该物体的光线颜色有关。因此,同一个物体在不同的光照下会显现出完全不同的颜色。这是由于不同的光源的色温不相同,从而导致被照射物体的反射光偏离“真实”的颜色。色温越高,光源就越偏蓝色;色温越低,光源越偏红色。例如,在蔚蓝色天空下的白色物体会偏蓝,因为这样的环境色温比较高;而在室内钨丝灯光下会略显橘黄色,因为环境色温低。由于人的视觉系统对物体颜色的感知具有自主适应性——在外界光照条件发生变化的时候,能消除光照对物体颜色的影响,得到物体表面的真实颜色(一般是指白光下物体表面的颜色)。但是像照相机、摄像机等其他成像设备在获取图像时就不行,这是由于感光元件本身没有这种适应功能。为了避免光照条件对图像颜色的影响,数码相机就必须和人类大脑一样能根据光线的变化作出调整,得到与光照无关的物体表面颜色特性,从而使拍摄的图像更加贴近人的视觉标准。通过自动或手动调整白平衡让拍摄出来的相片达到令人满意的色彩,这就是数码相机中的白平

衡功能[1]。

目前所有的白平衡算法都是从不同的角度实现对白色物体的还原,即去除光源因素对物体颜色的影响。实际上,我们无法离开光源单独获得物体的反射特性。通常,我们把图像拍摄时的光源称为未知光源,把想要获得物体颜色的某一特殊光源称为经典光源。换句话说,图像白平衡算法就是将在未知光源下拍摄的物体颜色,转换成在经典光源下的物体颜色,从而实现图像白平衡。

图像白平衡处理对于相机及其他各种成像设备具有非常重要的理论和实际意义。它是一个多学科交叉性很强的研究方向,结合了计算机视觉、信号处理、人工智能和认知科学等学科的相关知识。图像白平衡处理多用于现代摄像、照相、监控系统中,这个功能尤其给现代摄影技术带来了极大的便利,通过它可以解决色彩复

原和色调处理等一系列问题。我们可以在低色温条件下设置白平衡,而在高色温环境下拍摄,能产生特别的艺术效果。同样,也可在较高色温条件下设定白平衡,在较低色温环境下拍摄,可以使画面带上暖色调[2]。这样,即使在白炽灯下仍然可以拍出真实的色彩,而不必为日光灯带来的青色烦恼。在分档设定白平衡时,可故意将光源档与现场光设为不一致,能产生特殊的艺术效果。

1.2课题研究的现状及意义

白平衡算法的研究历史已经有了30多年,目前业内图像白平衡的计算研究主要有两类问题:单光照环境图像白平衡的计算;多光照环境图像白平衡的计算。图像白平衡计算研究的结构框图如图1.1所示。

图1.1图像白平衡计算研究的体系结构

由于多光照条件下的图像白平衡计算比单一光照条件更加困难、复杂,所以目前对于单一光照下的图像白平衡计算问题的研究最多。单光照下的白平衡计算前提条件是:当图像成像时,假设场景中只有一种光源,即便存在多个光源也将其平均地等效为一种光源。本文中图像白平衡计算研究部分都是以场景中只存在单一光照为假设前提,对于多光照下的图像白平衡计算本文不予过多的讨论。

单一光照下图像白平衡的计算又分为两个主要的研究方向:无监督的图像白平衡计算和有监督的图像白平衡计算。

1)无监督的图像白平衡计算:

无监督的图像白平衡计算算法是指利用图像底层的颜色特征进行图像光源估计,而不依赖于其他的先验知识。目前,白平衡调整领域的一个难点是对环境的光源估计,而现有的图像白平衡算法都是基于各种各样的假设和前提,最经典的就是White Patch假设和Gray World(灰度世界)假设[3]。为了将Gray World假设更为一般化,J.v.weijer通过观察对立颜色空间上(Opponent Color Space)图像颜色导数的分布规律,提出了一种新的Gray Edge(灰度边沿)假设,并在Gray Edge假设理论的基础上提出了一个统一的图像白平衡计算的框架(该框架包含了maxRGB、Grey world以及Shade of Gray算法),并且将图像白平衡推广到图像的高阶导数空间来计算。除了上述的这些算法外,无监督的图像白平衡算法还有:基于区域的白平衡计算、基于边缘分类的白平衡计算、基于局部均值的白平衡计算、基于有效区域的白平衡计算等等。

2)有监督的图像白平衡计算:

有监督的图像白平衡计算利用统计学习的方法,统计各种光照下出现的颜色,从而推测未知光源的图像颜色。Forsyth提出的色域映射(Gamut Mapping)算法,是一种典型的有监督的白平衡算法,之后Finlayson对该算法进行了扩展,Gijsenij又在Finlayson的基础之上将该算法提升到图像的高阶导数空间。基于贝叶斯推理(Bayesian Color Constancy)的图像白平衡计算也属于有监督的白平衡算法,为了减小基于贝叶斯推理的图像白平衡算法的计算复杂度,

Finlayson提出了一种基于相关性(Color by Correlation)的更为实用化的白平衡算法。但是,基于相关性的图像白平衡算法的最大问题是需要大量的先验知识,且输出结果不连续[4]。Cardei引入了基于BP神经网络的白平衡算法,它能给出任意输入光源连续的输出结果。W.Xiong提出的基于向量回归SVR(Support Vector Regression)的白平衡算法,也是一种有监督的算法,并且是一种基于全局最优的回归算法。

方法1和方法2在理论上都能得到较准确的白平衡效果,但是其限制条件过多,要基于特定的假设条件。这些假设在现实生活中不易满足,而且计算复杂,对于硬件资源的消耗非常大,不具有实用性。

因此本文的研究工作是找出一种原理简单,易于实现,通用性好,对硬件适应性好的算法,来解决白平衡算法的普适性问题和算法效率问题。

1.3论文所做的研究

本论文研究了图像色彩学的基本原理和灰度世界白平衡算法的计算方法,并在此基础上改进了基于色温估计的自动白平衡算法,利用FPGA实现了该算法的硬件模块设计。在DE2开发板上进行了大量与灰度世界算法对比的实验,实验结果表明在保证图像质量和较低计算复杂度的前提下,改进后的算法比灰度世界算法在处理色彩单一的图像时具有更好的白平衡效果。

1.4论文章节安排

本章首先介绍了课题研究的背景,主要从白平衡的概念,白平衡算法的发展现状等方面来进行介绍,并指出了课题研究的目的。

本论文后续的章节安排如下:

第二章,介绍图像色彩学的基础知识,主要包括颜色基础知识、色温、颜色空间、颜色恒常及图像的一般处理流程。接下来对FPGA技术的相关基础知识和编程语言进行了详细的介绍。第三章,在分析灰度世界算法优缺点的基础上,改进了基于色温估计的自动白平衡算法。

第四章,详细介绍了算法的硬件设计,包括功能模块的划分,每个功能模块的端口介绍等,并进行了RTL代码的仿真,并对其时序和功能进行了仿真。

第五章,总结与展望。总结本文的工作并展望未来的发展方向。

第2章色彩学与FPGA相关技术研究

2.1色彩学基础知识

不同的物体之所以呈现出不同的颜色,不仅与物体本身的物理特性有关,还与物体所处的环境光照有关,也与观察者有关。对于相同条件下的同一物体,不同的人会得到大致相同的结果,但是仍然会存在微小的差异。如果观察者为不同的光学设备,假如观察者是不同的品牌照相机,由于它们对图像白平衡的处理方法不同,得到的结果很不相同。假如每种光学装置都能正确地进行白平衡调整,在理论上得到结果应该是相同的。

世界上的物体五彩缤纷,颜色种类不可胜数,从物理学的角度解释,这些不同的颜色是不同频率的光波作用在人眼睛的结果。在色彩科学中,可以用三种最基本的颜色得到几乎所有不同的颜色,我们称这三种颜色为三原色。经过实验研究发现,自然界中的绝大部分颜色都可以通过三原色按不同比例混合来获得,而白色光又可以分解为三原色。三原色可以任意选定,但是三原色中的任意一种原色不能由其余两种原色混合得到。常用的三原色是红(R)、绿(G)、蓝(B),红绿蓝三原色对应的波长分别为700nm、546.1nm、435.8nm。当红绿蓝三原色的亮度比例是:1.0000:4.5907:0.0601时,它们合成的光就是白色光,也就是与白光的颜色相匹配。颜色匹配是指把两种颜色调节到视觉感受上相同,就称这两种颜色相互匹配[5]。

在颜色匹配实验中,选取的三原色(它们相加混合能产生任意一种颜色),称为参照色。在实验中,与待测色达到颜色匹配时R、G、B的值,称为三刺激值。任意一种颜色都可以找

到一组R、G、B数值相对应,这样抽象的颜色感觉就可以通过三刺激值定量的表示。任意两种颜色只要其R、G、B数值对应相等,就认为它们的颜色感觉相同。

计算某待测光的三刺激值的方法[6]如公式(2-1)所示:

(2-1)

为光谱分布函数,、、表示对应波长单色光的三刺激值。

颜色方程就是描述颜色匹配的代数表达式。如果用(c)代表被匹配颜色的单位,(r)、(g)、(b)分别代表混合色中的红、绿、蓝三原色的单位,R、G、B、C分别表示红、绿、蓝三原色和被匹配颜色的数目,颜色匹配方程如公式(2-2)所示:

(2-2)

公式(2-2)中的等号只表示视觉上相等,即颜色匹配;方程中R、G、B为代数值,可为负值。

数码相照机就是根据三原色的基本原理和颜色匹配知识来形成彩色图像的,首先数码相机的光电传感器接收到被摄物体的反射光,并且将光信号转换为电信号,再经过模数转换器将模拟图像数据转换为数字图像数据供后续设备处理。其中,光电传感器有三种,分别对三种色光(红、绿、蓝)信号进行采样。每种颜色传感器组成一个颜色通道,在该颜色通道内只对该种色光进行采样,根据该种色光的强度产生相应大小的电信号。物体的每一个采样点都与数码相机中的一个像素点对应,每一个像素点又包含三个数值,分别代表红色、绿色、蓝色三种颜色成分的强度。

色彩还原是指在成像设备中画面的色彩与原景物的色彩一致,这种真实、自然的效果会给人一种舒适感。色彩有三种属性:色相、亮度和饱和度。色相是色彩的首要特征,是区别各种不同色彩的最准确的标准。事实上任何黑白灰以外的颜色都有色相的属性,而色相也就是由原色、间色和复色来构成的。色相,是色彩可呈现出来的质的面貌,是各类色彩的相貌称谓[7]。饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度反映了一种颜色中有色成分与消色成分(灰色)的比例。有色成分越大,饱和度越大;消色成分越大,饱和度越小。亮度是颜色的一种性质,反应了画面的明亮程度,是色彩空间的一个维度。在Lab色彩空间中,亮度被定义来反映人类的主观明亮感觉[8]。格拉斯曼定律认为,人类的视觉只能分辨出颜色的明度、色度和饱和度三种变化。

(1)色温的概念

色温是利用绝对黑体辐射光的颜色与温度的对应关系来表述光源光色的一种尺度,是表示光源光谱质量最通用的指标,单位为K(开尔文)。开尔文认为,假设存在某一纯黑物体,能够将落在其表面的热量全部吸收,同时又能将热量全部以“光”的形式释放出去,并且在这一过程没有能量损失,那么它辐射出的光的颜色就会随它的温度变化而变化[9]。例如,碳块在一个完全封闭的黑暗空间,没有任何外在光源的作用,给它持续加热,使碳块温度不断上升。观察发现随着温度的升高,碳块辐射出光的颜色也相应发生变化,就像一个铁块在不断的加热过程中慢慢地由暗红变亮红、变黄、变白、变青一样。当现实生活中的日光灯、白炽灯等光源发出的光的颜色和黑体发出的光的颜色一致时,用黑体在发出这种颜色光时的温度表示该种颜色光的色温,用绝对温度K表示,也称为开氏温标。不同颜色的光其色温不同,从光谱学的角度来解释,是因为不同颜色的光含有不同频率的电磁波成分,而不同频率电磁波的光子能量不同。如果光线的光子能量大,光线就呈冷色调(偏蓝),其色温就高;如果光子的能量小,光线就呈现暖色调(偏红),其色温低。

(2)颜色空间

为了让每种颜色都能按照一定的次序排列在同一个空间内,可将颜色的三个独立参数与空间三维坐标轴对应起来,使每一种颜色在该空间都有一个对应的位置,相反,在空间中的任何一点也代表了一种特定的颜色,这个空间被称作颜色空间。颜色空间是三维的,作为该空间

三维坐标轴的三个独立参数既可以是色彩的三属性:色相、亮度和饱和度,也可以是色彩其它相互独立的三个参数(例如三原色RGB,YCbCr,Lab等等)。不同坐标参数的颜色空间是可以相互转换的。

通常,我们采用RGB颜色空间对从光电传感器获得的像素值进行研究,一个像素点投影到RGB三个坐标轴的值分别为(R,G,B),RGB值的大小反映该像素在某一通道的光强度,即某一种光谱对应的强度[10]。例如,一幅8位图像的数据,白点的像素值(R,G,B)=(255,255,255),这是8位传感器在三个通道能感应到的最大光强度。在对图像白平衡处理中,一般应用较多的是RGB、YCbCr颜色空间。如果图像处理所用空间与传感器采集的数据所用空间不一致,就必需将传感器采集的图像数据转换到对应的颜色空间,假如我们要在YCbCr 颜色空间对图像进行处理,要先将RGB颜色空间的图像转换到YCbCr颜色空间。在对图像处理的结果进行评估时,我们通常选用的颜色空间是CIE1976Lab均匀颜色空间,CIE1976 Lab均匀颜色空间是由CIE1931标准色度学系统非线性变换得来,它将颜色空间的XYZ直角坐标转换为柱面极坐标,将XYZ三刺激值转换为与人类视觉相一致的明度L和色度a、b,其中L、a、b与色彩学中的亮度、色调、饱和度等效。CIE l976Lab均匀颜色空间是一种表示颜色的方式,用来模拟人眼对颜色的感觉特征。用纵坐标轴L表示颜色的明度感觉,黑色最暗,位于坐标轴的最下端,对应明度L=0,白色最亮,位于坐标轴最上端,对应明度L=100。a轴与b轴共同表示图像的彩色特性,a轴正方向表示红色的变化,a轴负方向表示绿色的变化,b轴正方向表示黄色的变化,b轴负方向表示蓝色的变化,这4个变化方向共同组成了一个互补对抗的颜色模型[11]。

根据这个互补对抗的颜色模型,可以得到以下结论:

1)红色与绿色是互补的,黄色与蓝色是互补的。

2)任何一种颜色都可以用这4种原色中的1个或2个按一定的明度值混合得到,其中,混合色的色调取决于原色的混合比例。

3)如果一个颜色中含有红色成分,就一定不会有绿色,因为这两种原色互补。同理,如果颜色中含有蓝色成分,就不会再有黄色。这就是所谓的对抗色原理。a与b的值代表颜色中彩色成分的含量,当a与b的值都为0时,像素点的颜色饱和度就为0,即像素点为非彩色,其坐标投影在纵坐标轴上。因此,所有非彩色的坐标点都位于纵坐标轴上,从上到下依次为白色、浅灰色、灰色、深灰色和黑色。颜色的坐标点与纵坐标轴的距离越远,颜色就越鲜艳。根据颜色的这个性质,可以利用a和b的值进一步计算图像的色调和饱和度,使其跟真实的颜色感觉更加接近。

(3)颜色恒常

物体的颜色是物体表面的本质属性,我们观察到的物体的颜色受很多因素的影响,如:物体自身的光谱反射率、环境的光照条件及观察视角方向。人类的视觉认知系统能够在变化的环境光照和成像条件下获取物体表面颜色的不变性质,这就是所谓的颜色恒常。它是指外界环境变化时人对客观物体颜色知觉保持不变的心理倾向,颜色恒常是人类颜色视觉的重要特征之一。神经生理学研究发现,视网膜上存在着红、绿、蓝三种光感受细胞,它们有选择地接受不同波长的光谱刺激。视觉感受器的输入与随后的神经传导过程中的颉颃机制共同决定了特定的颜色知觉[12]。

建立非标准光照到标准光照的颜色映射方式,以此校准整幅图像,实现颜色校正,自动白平衡选择参考白点的算法都是基于这一思想。现有的颜色恒常理论(或模型)大致可以分为映射类与非映射类两大类。映射类理论主要包括:Von Kries三基色系数定律、色域映射理论和谱锐化理论;非映射理论则以Land的视网膜皮层理论、D’zmura的双线性模型和神经网络模型为代表。

①三基色系数定律

Von Kries通过对颜色适应现象的研究提出了三基色系数理论,该理论认为视网膜上的三种视锥细胞的光感受性随着光刺激强度的不同发生线性变化,即光刺激强度增大,感受性下降,光刺激强度下降,感受性提高。三类视锥细胞因具有不同的光谱选择性,对应的感受性变化系数也各不相同,但是这种感受性的变化并没有改变其光谱选择性函数的形式[13]。假设X、Y、Z为一种照明下的颜色刺激,X’、Y’、Z’为照明变化产生的适应色刺激,则两者之间的关系如公式2-3所示:

(2-3)

式中Xl、Yl、Zl为常数,A为适应系数矩阵。利用适应系数矩阵A可以推导出视觉感受器灵敏度的改变程度。计算A的特征根、、,引入常数R0、G0、B0,则公式(2-4)成立。公式(2-4)中,R、G、B为原来的三刺激值,R’、G’、B’为适应环境变化后产生的三刺激值,、、表示经过归一化以后灵敏度的改变程度,称为Von Kries系数。公式(2-4)称为Von Kries三基色系数定律:

(2-4)

②视网膜皮层理论

Land和McCann提出了视网膜皮层理论(retinex theory)。这个理论认为人们感觉到的物体颜色与物体表面的反射因数有着密切的关系。照明引起的颜色变化一般是平缓的,通常表现为平滑的照明梯度,而表面变化引发的颜色变化效应往往表现为突变形式。通过分辨这两种变化形式,人们就能区分图像的光源变化和表面变化,从而感知由光源变化引发的表色变化并做出调整,使人们对表色的知觉保持恒常。该理论认为颜色恒常程度不受照明环境变化的影响,只与视觉系统对物体表面反射性质的知觉有关。在视网膜皮层系统中,存在一个对比机制,可以知觉Mondrian色块边界。在边界知觉过程中,视网膜皮层系统借助相邻颜色表面反射系数的关系,部分抵消了由照明条件不同所引起的变化。视网膜皮层理论能应用于三基色系统和对立颜色系统,这两个系统输出结果的差别只是坐标系发生了旋转[14]。

2.2图像处理流程

由于从A/D转换器读出的数据,只是简单的一些R、G、B的量,并不符合人眼观察的要求。因此必须要经过一定的处理才能得到符合要求的图像。CMOS图像传感器结构如图2.1所示:

图2.1CMOS图像传感器结构图

2.2.1色彩插值

在CMOS图像传感器的设计中,厂家出于对成本和体积的考虑,采用单片CMOS彩色传感器。在单片传感器表面覆盖一层彩色滤波阵列(CFA),这样所采集的图像就是每个像素只有红绿蓝其中一种颜色分量的马赛克图。为了获得全彩色图,必须用插值算法复原丢失的色彩信息。表2-1为常用的Bayer RGGB格式图像阵列。

表2.1Bayer图像阵列

R11G12R13G14R15G16

G21B22G23B24G25B26

R31G32R33G34R35G36

G41B42G43B44G45B46

R51G52R53G54R55G56

G61B62G63B64G65B66

在表2.1中所示的图像阵列中,每个像素点只有一个颜色值,另外两个颜色值的确定可利用相邻像素之间的相关性计算得到。基于Bayer图像阵列,常用的插值算法有相邻像素插值、

双线性插值、双三次多项式插值等。本文采用的是双线性差值算法,如公式(2-5),(2-6),(2-7)所示。

红色像素点R33处处理:(2-5)

绿色像素点G52处处理:(2-6)

蓝色像素点B44处处理:(2-7)

2.2.2自动聚焦

自动聚焦是为了获得清晰度更高的图像。常用的聚焦方法有两类:一类是传统的聚焦方法,一类是基于数字图像处理的自动聚焦。传统的自动聚焦通过红外线或者超声波测距的方式实现,这种方式需要安装发射机和接收机,增加了摄像机的成本,而且超声波对玻璃后面的被摄物体不能很好的自动聚焦,因此这一类聚焦方式在某些场合受到了限制。在CMOS图像传感器日趋集成化、微型化、低成本的应用中,基于数字图像处理的自动聚焦方法更具有优势。根据镜头成像分析,镜头的光学传递函数可以近似为高斯函数,它的作用等效为一个低通滤波器。离焦量越大,光学传递函数的截止频率越低[15]。从频域上看,离焦量增大,对图像高频能量造成损失,使得图像的细节逐渐模糊。从空域上看,离焦量增大,点光源成像的光强分布函数越分散,可分辨的成像间距越大,图像相邻像素互相重叠,图像细节损失严重。因此图像清晰度评价函数是建立在图像边缘高频能量上的。数字处理方法中,自动聚焦的关键在于构造图像的清晰度评价函数。已经提出的图像清晰度评价函数包括:灰度方差、梯度能量、熵函数和一些频域函数法。图像清晰度评价函数必须具有良好的单峰性和尖锐性,而且要计算量适度,从而可以快速的实现精准对焦。

CMOS图像传感器采集到的是模糊的图像,自动对焦处理模块根据图像信息计算评价函数值,然后根据爬山算法确定移动方向和距离,控制镜头的移动,然后重新计算新位置的评价函数,依据爬山算法确定进一步的移动方向和距离,反复调整直到精准对焦。

2.2.3自动曝光

曝光是用来计算从景物到达相机光通量大小的物理量。CMOS图像传感器只有获得正确的曝光,才能得到高质量的照片。曝光过度,图像看起来太亮;曝光不足,图像看起来太暗。到达传感器的光通量的大小主要由两方面因素决定:曝光时间的长短以及光圈的大小。

利用光圈进行自动曝光,主要根据所拍摄的场景来控制光圈大小,使得进光量维持在一定范围内。通过光圈进行曝光控制的成本比较高,现在市场上所见的中低端摄像头采用的主流技术都是通过调整曝光时间来实现自动曝光[16]。

目前自动曝光控制算法有两种,一种是使用参照亮度值,将图像均匀分成许多的子图像,每一块子图像的亮度被用来设置参照亮度值,这个亮度值可以通过设置快门的速度来获得。另外一种方法是,通过研究不同光照条件下的亮度与曝光值之间的关系来进行曝光控制。这两种方法都是通过研究大量的图像例子和许多不同的光照条件,而且需要在不同的光照条件下采集的图像数据库。

在实际应用中,自动曝光研究需要解决好以下几个问题:首先是判定图像是否需要自动曝光,其次是自动曝光时,如何调整光电转换后的数字信号找出自动曝光补偿函数,最后就是调整到什么程度最为合适。

2.2.4伽马校正

在视频采集显示系统中,光电转换(CMOS,CCD)和电光转换(CRT,LCD)器件的转换特性都是非线性的。这些非线性器件都存在一个能反映各自特性的幂函数,它的一般形式是:

(2-8a)

式(2-8a)中,(Gamma)是幂函数的指数,用它来衡量非线性器件的转换特性(这种特性我们称为伽马特性),V∈[0,l],表示图像的像素亮度信息。在视频中由于伽马特性的存在,会导致图像信号的亮度失真,降低通信质量,影响用户体验。因此要对这个失真进行补偿,

即伽马校正[17]。

光电转换特性的非线性会引起图像非线性失真,图像的非线性失真主要表现在灰度的失真,即图像亮度层的压缩与扩张,图像看起来被漂白或者太暗。摄像机摄像头的伽马值一般为0.4-0.7,显示器的伽马值一般在1.3-2.5之间。伽马校正的具体实现方法多种多样,较简单的实现方式是查表法。伽马校正分两步:首先建立适合所用器件的伽马校正表,然后根据输入的像素值查表获得伽马校正后的数据。

伽马(Gamma)矫正实质上就是亮度矫正,在灰度图中就是灰度矫正。这个过程非常简单,不需要实时处理,因此可以通过查表来实现。

伽马矫正时的计算单位用(通常为大于1的值)表示。矫正前后的灰度值与的关系可由式(2-8b)表示:

(2-8b)

公式中Iin为输入图像的原始灰度值,Iout为矫正后的灰度值,maxgray为输入最大灰度值。这样在0-255的灰度范围内,共有256个灰度级经过伽马矫正后得到对应的灰度值,这些值可事先用Matlab或其他软件计算出来,供程序直接查找。

2.2.5图像增强

图像传感器输出的图像数据经过上述处理并不是完美的,图像质量获得的改进也是有限的。影响系统图像清晰程度的因素很多,例如室外光照不够均匀就会造成图像灰度过于集中,CMOS光电转换、线路传送都会产生噪声污染等等。因此图像质量不可避免的降低了,轻则表现为图像不干净,难于看清细节;重则表现为图像模糊不清,连概貌也看不出来。因此,在对图像进行分析之前,必须要对图像质量进行改善,一般情况下改善的方法有两类:图像增强和图像复原。

图像增强不考虑图像质量下降的原因,只将图像中感兴趣的特征有选择的突出,而衰减不需要的特征,它的目的主要是提高图像的可读性。图像增强的方法分为空域法和频域法两类。空域法主要是对图像中的各个像素点进行操作,而频域法是在图像的某个变换域内对图像进行操作,修改变换后的系数,如付立叶变换、DCT变换,然后再进行反变换得到处理后的图像。图像复原技术与增强技术不同,它需要了解图像质量下降的原因,首先要建立“降质模型”,再利用该模型恢复原始图像[18]。

2.2.6白平衡

白平衡,字面上的理解是白色的平衡。用色彩学的知识解释,白色是指反射到人眼中的光线由于红、绿、蓝三种色光比例相同且具有一定的亮度所形成的视觉反应。我们都知道白色光是由赤、橙、黄、绿、青、蓝、紫七种色光组成的,而这七种色光又是由红、绿、蓝三原色按不同比例混合形成。当一种光线中的三原色成分比例相同的时候,习惯上人们称之为消色,黑、白、灰、金和银所反射的光都是消色的。通俗的理解,白色是不含有色彩成份的亮度。人眼所见到的白色或其他颜色跟物体本身的固有色,光源的色温,物体的反射或透射特性,人眼的视觉感应等诸多因素有关。举个简单的例子,当有色光照射到消色物体时,物体反射光颜色与入射光颜色相同,即红光照射下的白色物体呈红色。两种以上有色光同时照射到消色物体上时,物体颜色呈加色法效应,如红光和绿光同时照射白色物体,该物体就呈黄色。当有色光照射到有色物体上时,物体的颜色呈减色法效应,如黄色物体在品红光照射下呈现红色,在青色光照射下呈现绿色,在蓝色光照射下呈现灰色或黑色[19]。

由于人眼具有独特的适应性,使我们有的时候不能发现色温的变化。比如在钨丝灯下呆久了,并不会觉得钨丝灯下的白纸偏红,如果突然把日光灯改为钨丝灯照明,就会觉察到白纸的颜色偏红了,但这种感觉也只能持续一会儿。CMOS摄像头并不能像人眼那样具有适应性,如果摄像机的色彩调整同景物照明的色温不一致就会发生偏色。白平衡就是针对不同色温条件调整摄像头内部的色彩电路使拍摄出来的影像抵消偏色,更接近人眼的视觉习惯。白平衡也

可以简单地理解为在任意色温条件下,摄像头所拍摄的标准白色经过电路的调整,使之成像后仍然为白色。

调整白平衡的过程叫做白平衡调整,白平衡调整在前期设备上一般有三种方式:预置白平衡、手动白平衡调整和自动白平衡调整。通常按照白平衡调整的程序,推动白平衡的调整开关,白平衡调整电路开始工作,自动完成调校工作,并记录调校结果。本文采用自动白平衡的工作方式,针对不同的环境色温,对摄像头采集到的画面自动选择合适的调整参数,实现对图像白平衡的调整。

2.3FPGA技术介绍

FPGA是一种高性能的可编程逻辑器件,集成度高,其器件密度最高可达数百万门级,可以完成极其复杂的时序与组合逻辑电路功能。它的出现不仅克服了定制电路的缺点,还克服了原有可编程器件门电路数量有限的缺点,同时提高了系统的灵活性和适应性[20]。

(1)FPGA的特点

FPGA内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。随着FPGA的不断发展,目前FPGA主要由以下几个部分组成:与外界电路接口进行通信的可编程输入输出逻辑单元、基本可编程逻辑单元、提供数字时钟管理模块、嵌入RAM、丰富的布线资源、DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等软处理核内嵌的专用硬件IP核和底层功能单元。

由于FPGA内部有丰富的触发器和I/O引脚、电路设计周期短、开发费用低、功耗低、可与CMOS/TTL电平兼容等优点,FPGA已经逐步侵占ASIC和ASSP的传统市场,并处于快速增长阶段。目前FPGA正朝着高密度、高集成度、高频带、IP软/硬核复用、动态可重构等多元化方向发展。

(2)FPGA的工作原理

FPGA内部的组合逻辑是通过小型查找表(LUT)实现的,每个查找表通过连线连接到一个D触发器的输入端,其他逻辑电路和I/O口通过查找表连接的触发器进行驱动,由此构成的基本逻辑单元模块不仅可实现组合逻辑功能,而且可以实现时序逻辑功能,各个模块之间及各个模块与I/O口之间通过模块金属线互相连接。

FPGA允许进行多次编程,且编程次数是无限的,FPGA的最终功能由最后一次编程确定。通过对FPGA内部静态存储单元加载数据实现FPGA内部逻辑,且各模块之间的连接、各模块内部的连接、各模块与I/O口之间的连接方式都是由存储在存储器单元中的数值决定[21]。FPGA的工作状态是由存放在片内RAM中的程序来设置的,因此工作时需要对片内的RAM 进行编程。用户可以根据不同的配置模式,采用不同的编程方式。Altera公司FPGA主要有主动和被动两种配置模式,本设计采用主动配置模式即由FPGA器件引导配置操作过程。加电时,FPGA芯片的配置是通过将EPROM中数据读入片内编程RAM中完成;配置结束后,FPGA进入工作状态;一旦掉电,FPGA的内部逻辑关系全部消失,变为空白状态可再次使用。FPGA通过利用EPROM、PROM编程器即可进行编程,不需要专用的FPGA编程器。当需要修改FPGA功能或者FPGA由于编程器件损坏等原因需要替换时,不需要更换整个FPGA,只需换一片EPROM即可,不仅节约成本,而且对同一片FPGA进行不同的编程就可以产生不同的电路功能,使FPGA的使用更加灵活、方便。

2.4Verilog HDL编程语言介绍

Verilog是Verilog HDL的简称。Verilog语言最初于1983年由Gateway Design Automation公司开发,于1995年被认证为IEEE标准。Verilog语言不仅定义了语法,而且还对每个语法结构都清晰定义了仿真语义,从而便于仿真调试。Verilog语言继承了C语言的很多操作符和语法结构,对初学者而言易学易用。另外Verilog语言具有很强的扩展性,最新的Verilog 2001标准大大扩展了Verilog的应用灵活性。

HDL和原理图是两种最常用的数字硬件电路描述方法。原理图设计输入法在早期应用的比较广泛,它会根据设计要求,选用器件,绘制原理图,完成输入过程。这种方法的优点是直观,便于理解,元件库资源丰富;但是在大型设计中,这种方法的可维护性较差,不利于模块建设与重用,更主要的缺点是当所选用的芯片升级换代后,所有的原理图都要作相应的改动[22]。

目前进行大型工程设计时,最常用的设计方法是HDL设计输入法,其中影响最为广泛的HDL 语言是Verilog HDL和VHDL。它们的共同特点是利于自顶向下的层次化设计,利于模块的划分与重用,可移植性好,通用性好,设计不会因芯片工艺和结构的变化而变化,更利于向ASIC移植。

Verilog作为硬件描述语言,它的本质作用在于描述硬件。Verilog虽然采用了C语言的形式,但是它的最终描述结果是芯片内部的实际电路。HDL的基本功能就是有效地描述并仿真硬件系统。典型的HDL设计与验证流程如图2.2所示,其中虚线箭头的步骤可以依据项目的复杂程度省略,实线箭头的步骤为必须执行的步骤。

图2.2HDL的设计与仿真流程

1)系统与功能模块定义(系统级描述)

在大型系统的设计与实现中,首先要进行详细的系统规划和描述。此时HDL描述侧重于对整体系统的规划和实现。系统级仿真的主要目标是对系统的整体功能和性能指标进行衡量。系统级设计与仿真多采用高级描述语言,如C/C++、System C和System Verilog等。系统级描述完成后,应该进一步将系统功能划分为可实现的具体功能模块,大致确定模块间的接口,如时钟、读写信号、数据流和控制信号等,并根据系统要求描述出每个模块或进程的时序约束,这个细化的过程被称为功能模块级设计。功能模块级仿真主要是考察每个子模块或进程的功能与基本时序。在系统级与功能模块级设计层次,必须整体权衡多种实现方案之间的优劣,根据系统性能指标要求,从整体上优化实现方案,从而更有效地满足设计需求[23]。2)行为级描述测试激励(Behavior Level)

行为级模块描述的最大特点是必须明确每个模块间的所有接口和边界。此时模块内部的功能已经明确,模块间的所有接口、顶层的输入和输出信号等在行为级已经被清晰地描述出来。在PLD和ASIC设计流程中,常用行为级描述方式编写测试激励。延时描述、监视描述等命令都是在编写测试激励的过程中常用的行为级语法。行为级描述常使用HDL语言,如Verilog 和VHDL等。

3)寄存器传输级(RTL,Register Transfer Level)

寄存器传输级指不关注寄存器和组合逻辑的细节(如使用了多少逻辑门,逻辑门之间的连接拓扑结构等),通过描述寄存器到寄存器之间的逻辑功能描述电路的HDL层次。RTL级是比门级更高的抽象层次,使用RTL级语言描述硬件电路一般比门级要简单、高效得多。寄存器传输级描述的最大特点是可以直接用综合工具将其综合为门级网表。RTL设计直接决定着设计的功能和效率。好的RTL设计能在满足逻辑功能的前提下,使设计的速度和面积达到一种平衡。RTL级描述最常用的HDL语言是Verilog和VHDL语言。

4)对RTL级描述进行功能仿真

一般来说需要对RTL级设计进行功能仿真,仿真的目的是验证RTL级描述是否与设计意图一致。为了提高效率,功能仿真的测试激励一般使用行为级的HDL语言描述。

5)逻辑综合(使用RTL级EDA工具)

RTL级综合指将RTL级HDL语言翻译成由与、或、非门等基本逻辑单元组成的门级连接(网表),并根据设计目标与要求(约束条件)优化所生成的逻辑连接,输出门级网表文件。随着综合工具的不断智能化,使用RTL级语言描述硬件电路越来越方便,特别是在可编程逻辑器件(PLD,主要指FPGA和CPLD)设计领域,最重要的代码设计层次就是RTL级[24]。

6)门级(Gate Level)

目前大多数的FPGA设计都依靠专业综合工具完成从RTL级代码向门级代码的转换,设计者直接用HDL语言描述门级模型的情况越来越少,高效的综合工具将设计者从复杂烦琐的门级描述中彻底解放出来。目前要直接使用门级描述的情况一般是ASIC和FPGA设计中有面积或时序要求较高的模块。门级描述的特点是整个设计用逻辑门实现,通过逻辑门的组合显化描述设计的引脚、功能和时钟周期等信息。

7)综合后门级仿真

综合完成后如果需要检查综合结果是否与原设计一致,就需要进行综合后仿真。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时所带来的影响。综合后仿真虽然比功能仿真精确一些,但是只能估算门延时,不能估算线延时,仿真结果与布线后的实际情况还有一定的差距,并不十分准确。这种仿真的主要目的在于检查综合结果是否与原设计一致。目前主流综合工具日益成熟,对于一般性设计而言,如果设计者确信自己的表述准确,不会产生歧义,则可以省略综合后仿真这一步骤。一般情况下,综合后仿真与功能仿真的仿真激励相同。

8)布局规划与布局布线

综合的门级结果最终要映射到目标库(如ASIC设计)或目标器件(如PLD设计)中。由于本文的重点为HDL设计,因此这里不再深究ASIC与PLD设计的相关流程。

9)布局布线后的时序仿真与验证

将最终布局规划或布局布线的延时信息反标注到设计网表中所进行的仿真就叫时序仿真或布局规划与布局布线后仿真,简称后仿真。布局规划与布局布线之后生成的仿真延时文件包含的延时信息最全,不仅包含门延时,而且还包含实际的布线延时,所以时序仿真最准确。它能较好地反映芯片的实际工作情况,建议进行时序仿真,通过时序仿真可以检查设计时序与芯片的实际运行情况是否一致,确保设计的可靠性和稳定性。时序仿真的主要目的在于发现时序违规(Timing Violation),即不满足时序约束条件或者器件固有时序规则(建立时间、保持时间等)的情况[25]。

2.5本章小结

本章首先介绍了色彩学的基础知识,对色温、色空间、颜色恒常等概念做了详细的介绍。接下来对图像处理的基本原理以及处理流程做了阐述。然后,对FPGA技术做了简要介绍。最后,介绍了FPGA的编程语言Verilog HDL的特点和用法。在接下来的几个章节里,将对白平衡算法进行研究和改进,并做出相应的实验对比和分析。

第3章灰度世界与色温估计白平衡算法研究

3.1灰度世界白平衡算法研究

3.1.1算法简介

目前绝大多数的白平衡算法都是在Von Kries假设的基础上改进得到的。根据Von Kries假设,图像的色彩调整是一个独立的增益调整过程,这种增益调整对三种颜色信号分别采用三个不同的增益系数,并且每一个图像传感器通道都是独立传输的。增益调整模型如式(3-1)所示:

(3-1)

其中L、M、S代表三元色的原始初值,Kl、Km、Ks表示将原始信号增大到三元色调整值La、Ma、Sa的增益系数。调整模型因部分系数获得的方法而不同。在这些模型中RGB通道通常

被认为是L、M、S视网膜波段(RetinaI Wave Band)的一种近似,所以公式(3-1)变为:

(3-2)

灰度世界算法的基本思想是:在已知标准光源下的一幅色彩变化很大的图像的R、G、B通道的平均值合成是一种普通的灰色,即R、G、B通道的平均值应该等于一个灰色的常数Gray,如式(3-3)所示。

(3-3)

这样我们就可以应用灰度世界假设来去掉在特殊光源下数码相机拍摄的图片中因光源而带来的模糊层面。一旦选择了一种普通灰度值,每一种色彩元素都可以应用Von Kries系数进行调整,如式(3-4)所示。

(3-4)

式(3-4)中Raver、Gaver、Baver表示RGB三通道的平均值,GrayR、GrayG、GrayB表示选择的灰度值。

现在有很多种白平衡算法,他们的基本思想都是让白点或者白色区域表现得如同真实场景中的一样,这样其他颜色也被认为同真实场景一致,由此达到图像的白平衡调整。这些白平衡算法的技巧在于从获得的图像中识别这些白点或者白色区域。目前主要有两种方法[26]:全局白平衡法和局部白平衡法。

全局白平衡算法

该算法认为,图像中R、G、B三色分量的统计平均值应该相等,对拍摄整个图像进行统计平均,以R、B分量的均值作为白平衡校准的依据。

局部白平衡算法

该算法搜寻所拍摄图像中最亮的区域作为白色区域,认为该区域的R、G、B三色分量的统计平均值应该相等,以该区域R、B分量的统计平均值作为白平衡校准的依据。

灰度世界全局白平衡算法具体的算法步骤如下:

l)根据即将拍摄的图像选择白平衡的统计搜集区域。白平衡模块在获得的图像统计数据的基础上进行整个图像的白平衡。但是依据摄入图像的类型和摄取时的环境,搜集统计数据的图像区域可以改变:

全图像区—在整个图像获取统计数据。这对于室内图片或者在整个图片光线大约相等的地方是非常理想的。

南水平线区—统计数据在图片的下半部获取。这种选择适用于那些需要消除地面-天空边界问题的室外图片。

中心区—统计数据在图像的中间l/4范围内获取。对于那些主要关心中间部分曝光的肖像图片来说是很理想的。

2)在此区域内获取图像的统计数据,然后根据式(3-5)计算所有像素各颜色的平均值。

(3-5)

M表示一帧图像的行数,N表示一帧图像的列数,Rij、Gij、Bij分别表示一帧图像中第i行、j列的像素点的三原色通道的颜色值。M×N表示一帧图像中的像素总数。

3)计算灰度常数。

(3-6)

4)计算出每种颜色通道的增益系数。

(3-7)

5)将得到的乘法系数应用到相应的颜色像素中,得到修正的颜色,完成白平衡调整。

(3-8)

Rin、Gin、Bin分别表示下一帧图像的原始三原色通道输入值,Rout、Gout、Bout分别表示

下一帧图像的经过白平衡调整过后的三原色输出值。

3.1.2算法评价

灰度世界全局白平衡算法原理比较简单,实现起来比较方便,能够适应一般场景的应用。但是由于该算法是建立在灰度世界假设的基础之上,因此有一定的局限性。当灰度世界假设不成立,比如图像中存在大面积色块等明显的偏色时,该算法的处理结果就会出现明显的偏差,不能达到白平衡调整的效果。目前用于专用集成电路(ASIC)实现的白平衡算法主要是基于传统算法的改进算法[27]。本文为了解决灰度世界算法在图像颜色信息不够丰富时算法失效的问题,采用了基于色温估计的自动白平衡算法。

3.2基于色温估计自动白平衡改进算法

3.2.1提出背景

完美反射算法是基于影像中最亮的像素,假设在一物体的光滑面或镜面下,以影像中最亮的像素作为参考白点,其缺点在于整个影像中的亮度常会改变,因此参考白点不易决定。Nakano提出了一种基于YCbCr色彩空间的约束条件,在YCbCr空间定义了一个三维结构,认为落在这个区域内的像素是白色的,而外面的像素认为是非白色的。进行色温估计时,只需计算白色像素的平均色差,以代表整个图像的色差。如果这个区域选择合适,能提高色温估计的准确度[28]。

Nakano提出的色温估计算法的约束条件如式(3-9)所示:

(3-9)

式(3-9)的物理含义是:在Y足够大,Cr和Cb足够小的空间里定义了一个区域,并将该区域中的所有像素看作是白色的,可以参与色差的计算。

上述的白色区域类似于一个立方体,在每个Y平面上,白色像素都位于一个CbCr矩形当中,并且所有Y平面上的CbCr矩形大小是一致的。

公式(3-9)未考虑Cb、Cr之间的相关性,Lee在式(3-9)的基础上加入了Cb、Cr之和的控制阈值,如公式(3-10)所示,进一步提高了色温估计的精确度。该算法还通过限制R,B的变化范围来适应镜头缩放时图像的剧烈变化。

(3-10)

Y和Cb,Cr之间也具有一定的相关性。Y较小时,Cb、Cr较小的像素表现为接近白色的灰度值;而在Y较大时,Cb、Cr较大时的像素可以认为是白色物体受到光源污染得到的。对上面两个式子的约束条件改进后得到公式(3-11),如下所示。

(3-11)

图3.1算法约束条件改进后的控制区域

图3.1所示为该改进后约束条件的控制区域,这个区域是上粗下细的柱状体,每个CbCr平面是个菱形,当Y较小的时候,CbCr控制的紧,从而只有少量的像素参与计算,而Y增大的时候,CbCr范围相应放大,有更多的像素参与计算。

Nakano提出的色温估计算法在白平衡调整的过程中没有对图像中参考白点的色温信息是否有效进行评估,当图像出现浅色区域较多或者较少等现象时,则选取的参考白点的数目可能会出现过多或者过少等情况,此时根据参考白点计算的色温是不准确的。另外在选取参考白点的过程中没有对噪声点进行过滤和防范,从而影响白平衡调整的效率和准确度。

3.2.2算法过程

本算法属于局部白平衡算法,采用白点检测的方式来估计场景的色温并进行色温校正。首先通过色彩空间转换,将RGB格式的图像转换为YCbCr格式的图像数据。接着在YCbCr色彩空间对图像中的参考白点的色温信息进行评估,判断参考白点色温信息的有效性,输出有效的色温信息。根据有效的色温信息计算R、G、B通道的增益,并利用该增益调整图像中的R、

G、B值。流程图如图3.2所示。

图3.2白点检测算法实现流程图

1)色彩空间转换单元

由于白点检测需要利用亮度和色度信息,故需要在YCbCr空间进行。RGB色彩空间转换到YCbCr空间的公式如式(3-12)所示:

(3-12)

2)色温评估单元

色温评估单元用于检测图像中的参考白点并统计参考白点的色温信息,判断参考白点的色温信息的有效性,输出有效的色温信息。有效的色温信息包括参考白点的R、G、B三个通道的累加值SUM(R)、SUM(G)、SUM(B),以及参考白点的数量counter。该部分的框图单元结构如图3.3所示。

图3.3色温估计单元结构图

参考白点的选取根据式(3-13)判断:

(3-13)

式(3-13)中Y、Cb、Cr分别为像素的亮度分量、蓝色色度分量和红色色度分量,thr_dyn 为参考白点的判断阈值。

在实验中我们发现,图像中经常会出现过曝的像素点,将这些点纳入色温统计是不准确的。因此我们增加了对图像中的噪声点的过滤,避免曝光过度造成的不良影响,过滤条件如式(3-14)。

(3-14)

R通道阈值、G通道阈值、B通道阈值取值范围可以为210至255,亮度阈值的取值范围为200至240。

接下来是判断参考白点的色温信息是否有效。

实际场景中图像的亮度不一致,有时图像亮度较高,有时图像又比较暗。利用公式(3-13)进行白点检测时,容易出现各种极端情形,或将本来其他颜色的点误检测为白点,或检测出的白点数量极少甚至没有。这两者都对白平衡处理不利,所以在进行后续的增益计算前,有必要判断之前的色温信息是否有效。我们利用检测出的白点数量与图像中总的像素数量进行色温信息的有效判断。将参考白点数量counter与第一阈值N_max以及第二阈值N_min进行比较,当满足N_min=N_max 或者counter<=N_min时,判定参考白点的色温信息无效[29];

如果满足条件,则进行后续的处理。当判断参考白点的色温信息无效时,则需要进行相应的阈值调整。阈值的取值范围比较广,为了能比较快的调整阈值,我们设了3个档次用于调整阈值,分别是5、20、40。具体的调节方式如图3.4所示。调节后的阈值在下一帧中起作用。图3.4调整参考白点判断阈值的流程图

3)增益调整单元

根据有效的色温信息计算R、G、B通道的增益,并利用增益调整图像中的R、G、B值。该部分的框图单元结构图如图3.5所示。

图3.5增益调整单元结构图

首先进行白点的RGB平均值的计算。如式(3-15)所示。

(3-15)

接着根据式(3-16)计算所有参考白点的亮度平均值Y_avg。

(3-16)

有了上面两个计算结果之后,就可以通过式(3-17)计算R、G、B通道的增益R_gain、G_gain、

B_gain了。

(3-17)

求得R、G、B通道的增益后,根据式(3-18)调整图像中像素的R、G、B值R_new、G_new、B_new。

(3-18)

3.3本章小结

本章首先分析了灰度世界算法的计算过程,并对其优缺点进行了评价。最后详细介绍了基于色温估计自动白平衡算法的基本原理和实现过程。

第4章基于色温估计自动白平衡算法FPGA设计与实现

4.1设计流程

图4.1设计流程图

本文的算法模块按照图4.1所示的流程进行设计,每一个阶段完成后,经过验证达到设计目标后才继续向下进行。自顶向下的设计方法是从系统级开始,把系统按功能分为若干个独立的基本单元,再将每个基本单元划分为下一层的基本单元,并依次细分下去。这样做的好处是如果在一个团队开发的话,可以并行设计每个模块,所设计的模块也可以被重复的利用,提高了设计的效率,在对模块算法改进时也很方便做局部的功能验证。总体功能定义后,将算法按计算顺序分解为下层的子算法模块,每个模块独立完成算法中的某项特殊的运算机能。在设计的同时为各个模块编写了测试代码,当算法改进的时候可以用相同的测试文件进行验证和仿真。EDA工具提供了有效的手段来管理错综复杂的层次,可以方便的查看某一层次某模块的源代码或电路,以改正仿真时出现的错误[30]。

4.2模块功能描述

本设计采用基于色温估计的自动白平衡算法,顶层模块描述的功能可以简单描述为:按照选择的白平衡工作模式对输入的RGB信号进行处理,输出为处理后的RGB信号,以及行有效和帧有效信号。顶层模块中包含了四个子模块分别为:工作模式选择模块、图像统计模块、增益计算模块、数据处理模块。每个模块的功能定义如下:工作模式选择模块:根据输入的工作模式选择信号确定白平衡处理的工作方式为自动白平衡还是用内部的对己知环境色温查询表的调整模式。在自动白平衡方式中,需要启动图像统计模块和增益计算模块,并加入隔帧统计计算增益功能。其他的模式中直接向数据处理模块传递已有的增益值便可[31]。

图像统计模块:在一帧图像的时间内,统计出这一帧图像RGB三个色彩分量的均值和最值。增益计算模块:利用统计模块统计结果,按照算法进行求增益计算,输出增益值到工作模式选择模块。

数据处理模块:从工作模式选择模块得到调整增益值,对数据进行增益处理输出处理后的数据。处理过程需要几个时钟周期的时延,所以最后需要调整行同步和场同步有效信号使其保证和输出的数据同步。

图4.2模块间数据传递

图4.2表示了模块间主要的控制信号和数据的传递情况。工作模式选择模块可以启动图像统计模块。在设计自动白平衡模式时,由于一般的应用场合短时间内可以假设色温的变化不明显,我们如果对每一帧图像都进行统计增益计算,会大大增加功耗的开销,所以在自动白平衡时我们采用隔帧统计的方法来计算白平衡增益。这样在人眼不能察觉的帧数范围内我们可以设定一个帧计数值,这样既不会影响视频的观赏又能定时的去检测色温环境的变化。工作模式模块负责增益数据的收集和发送工作。在自动白平衡模式下它能自动的从增益计算模块获得白平衡增益计算值,并将其传递给数据计算模块。数据计算模块主要是用增益值对输入的像素数据进行乘法处理,要求是处理后的像素仍然要一个时钟周期输出一个,这就限定了我们的处理时间,即在一个时钟周期内处理完一个像素。

4.3模块接口设计

本设计中所有的模块都是用Verilog HDL语言在Quartus II10.1软件上设计开发的,Quartus II 10.1设计软件是ALTERA公司提供给用户的一个最成熟可靠且高效能的自动化电子设计工具

(EDA),从编辑(Edit)、仿真(Simulator)、综合(Synthesis)、布局与布线(Place and Route)、烧录至FPGA,可以完成设计流程的所有阶段,是个全面且广为设计者所使用的工具。图4.3为Quartus II10.1软件的操作界面。

图4.3Quartus II10.1软件的操作界面

1)工程设计文件列表

本设计建立了一个名为DE2_D5M.qpf的工程,工程下面包含一系列工程设计文件,每一个设计文件都完成特定的功能。DE2_D5M.v为工程顶层实体文件,它主要定义了整个工程所有的输入输出端口信息,及各模块端口互连的情况。CCD_Capture.v为CMOS摄像头图像采集模块设计文件,它主要完成原始图像的获取,实现光信号向电信号的转换。I2C_CCD_Config.v 为串行总线CCD接口控制设计文件,它主要是完成对CCD采集模块的控制,如曝光时间调整,采集模式选择以及镜头聚焦。I2C_Controller.v为串行总线控制器设计文件,主要对串行通信的时序和数据传输进行定义。Line_buffer.v为数据缓冲器,主要是为了适应不同模块间时钟频率数据位宽不一致的情况,本设计中实现了CCD采集的串行图像数据向并行RGB数据的转换。RAW2RGB.v为原始图像数据向显示器支持的RGB格式转换模块。SEG7_LUT.v和SEG7_LUT_8.v为数码管驱动控制模块和显示查找表,它在本设计中主要是用来显示曝光的时间参数。Reset_Delay.v为复位时序控制单元,它控制着整个工程的复位信号。Sdram_Control_4port为SDRAM动态随机存储器的设计文件,包括SDRAM的芯片参数,控制指令,接口信息,数据传输,堆栈队列等功能模块。本设计中使用SDRAM存储器主要是用作帧缓存,方便对图像数据进行处理,自动白平衡模块就是使用缓存后的图像数据进行处理的。VGA_Controller.v是VGA图像控制器,它主要是用来显示处理过后的图像数据。AWB.v 是自动白平衡处理模块,它包含了基于色温估计的自动白平衡算法。工程中的所有文件列表如图4.4所示。

图4.4工程中的设计文件列表

2)CCD图像采集模块

该模块处理从TRDB_D5M摄像头采集的图像数据,主要功能是产生横向、纵向和框架计数器并将摄像头的数据传到FPGA的GPIO1接口。该模块同时对图像数据进行了简单的预处理,包括曝光控制、颜色插补、伽马校正、自动白平衡等,使传给后面模块的图像数据基本符合要求。但是这种预处理功能很有限,尤其是在白平衡这一块有很大的局限性,偏色现象十分严重。为了防止这个预置白平衡功能对后面所设计的基于色温估计的自动白平衡处理模块所带来的干扰,我们先将此预置白平衡功能屏蔽。CCD图像采集模块如图4.5所示。

图4.5CCD图像采集模块

3)RAW数据向RGB格式转换模块

CMOS传感器采集的图像数据为Bayer RGGB格式,而显示器支持的一般格式为RGB,所以我们要将图像数据转换为RGB格式。此模块调用了一次Line_Buffer数据缓冲器模块,方便I2C串行数据向并行数据的转换。RAW数据向RGB格式转换模块如图4.6所示。

图4.6RAW数据向RGB格式转换模块

4)自动白平衡功能模块

基于色温估计的自动白平衡算法Verilog HDL部分代码:

assign AWB_oR=(r_R>255)?255:r_R;

assign AWB_oG=(r_G>255)?255:r_G;

assign AWB_oB=(r_B>255)?255:r_B;

always@(posedge iCLK or negedge iRST)

begin

if(!iRST)

begin

Rsum_3000K<=0;

Gsum_3000K<=0;

Bsum_3000K<=0;

Cnt_3000K<=0;

end

else

begin

if(

((AWB_iR/AWB_iG)*10)>=r2g_low_3000K&&((AWB_iR/AWB_iG)*10)=b2g_low_3000K&&((AWB_iB/AWB_iG)*10)

begin

Rsum_3000K<=Rsum_3000K+AWB_iR;

Gsum_3000K<=Gsum_3000K+AWB_iG;

Bsum_3000K<=Bsum_3000K+AWB_iB;

Cnt_3000K<=Cnt_3000K+1;

end

else

begin

Raver<=Rsum_3000K/Cnt_3000K;

Gaver<=Gsum_3000K/Cnt_3000K;

Baver<=Bsum_3000K/Cnt_3000K;

Rgain<=Gaver/Raver;

Bgain<=Gaver/Baver;

Ggain<=Gaver/Gaver;

r_R<=AWB_iR[9:0]*Rgain;

r_G<=AWB_iG[9:0]*Ggain;

r_B<=AWB_iB[9:0]*Bgain;

Cnt_3000K<=0;

end

end

end

always@(posedge iCLK or negedge iRST)

begin

if(!iRST)

相关主题