当前位置: 首页 > 传感测量产品 > 工业传感器 > 图像传感器

类型分类:
科普知识
数据分类:
图像传感器

传感器白平衡:CMOS图像传感器白平衡数字处理电路设计

发布日期:2022-10-09 点击率:94


传感器白平衡:CMOS图像传感器白平衡数字处理电路设计  第1张

传感器白平衡:CMOS图像传感器白平衡数字处理电路设计

摘要:

CMOS图像传感器与CCD相比,由于能将时序处理电路和图像信号的前端放大与数字化部分以及图像集成于一个芯片内,因此其的发展一直受到业界的高度重视。并且它以其低廉的价格、较好的图像质量、高集成度和相对较少的功耗,在视频监控、多媒体领域得到更加广泛的应用。 本文阐述了针对单片CMOS图像传感器中数字预处理电路自动白平衡算法模块(AWB)的设计与实现。因为是单片系统设计,要求电路设计具备规模小,消耗资源少,功耗小,以及方便移植等特点。通过对前人提出的自动白平衡算法的MATLAB仿真比较,兼顾实现复杂度和处理效果两方面因素,本文提出了一种灰色世界和理想反射镜相结合的方法进行颜色校正。两种算法的结合互补,使得本算法的适用范围得到扩展,一定程度上弥补了两种算法各自的不足。使用这种算法不需要存储图像便能完成白平衡增益的计算。为了节约资源和满足实时性,本设计中规划了算法中统计区域和运算区域,并通过状态机控制一个除法器做连续除法运算。为了提高电路的适用频率范围,增强设计的可移植性,在数据处理部分采用了流水线乘法器。为了进一步降低功耗,设计中还采用了隔帧启动白平衡机制。设计采用Verilog硬件描述语言进行各子模块的设计,并用MATLAB和Verilog结合的方法生成测试激励源,对设计进行验证。通过在不同色温环境下的测试,本设计对图像偏色有较好的校正效果。

展开
传感器白平衡:CMOS图像传感器白平衡数字处理电路设计  第2张

传感器白平衡:自动驾驶传感器之摄像头(八)车载摄像头色彩白平衡

展开全文
作者 / 阿宝
编辑 / 阿宝
出品 / 阿宝1990
色温定义
色温的定义:将黑体从绝对零度开始加温,温度每升高一度称为1开氏度(用字母K来表示),当温度升高到一定程度时候,黑体便辐射出可见光,其光谱成份以及给人的感觉也会着温度的不断升高发生相应的变化。于是,就把黑体辐射一定色光的温度定为发射相同色光光源的色温。
常见光源色温:
  光源                           色温(K)
钨丝灯(白炽灯)                   2500-3200k
碳棒灯                                  4000-5500k
荧光灯(日光灯,节能灯)      4500-6500k
氙灯                                      5600 k
炭精灯                                   5500~6500k
日光平均                                5400k
有云天气下的日光                    6500-7000k
阴天日光                                -k
随着色温的升高,光源的颜色由暖色向冷色过渡,光源中的能量分布也由红光端向蓝光端偏移。
值得注意的是,实际光源的光谱分布各不相同,而色温只是代表了能量的偏重程度,并不反映具体的光谱分布,所以即使相同色温的光源,也可能引起不同的色彩反应。
人眼及大脑对色温有一定的生理和心理的自适应性,所以看到的颜色受色温偏移的影响较小,而camera的sersor没有这种能力,所以拍出来的照片不经过白平衡处理的话,和人眼看到的颜色会有较大的偏差(虽然人眼看到的和白光下真实的色彩也有偏差)。
太阳光色温随天气和时间变化的原因,与不同频率光的折射率有关:
波长长的光线,折射率小,透射能力强,波长短的光线,折射率大,容易被散射,折射率低,这也就是为什么交通灯用红色,防雾灯通常是黄色,天空为什么是蓝色的等等现象的原因。
知道了这一点,太阳光色温变化的规律和原因也就可以理解和分析了。
色温变化时的色彩校正
所以从理论上可以看出,随着色温的升高,要对色温进行较正,否则,物体在这样的光线条件下所表现出来的颜色就会偏离其正常的颜色,因此需要降低sensor对红色的增益,增加sersor对蓝光的增益。
同时在调整参数时一定程度上要考虑到整体亮度的要保持大致的不变,即以YUV来衡量时,Y值要基本保持不变,理论上认为可以参考RGB->YUV变换公式中,RGB三分量对Y值的贡献,从而确定RGAIN和BGAIN的变化的比例关系。但实际情况比这还要复杂一些,要考虑到不同sensor对R,B的感光的交叉影响和非线性,所以最佳值可能和理论值会有一些偏差。
自动白平衡处理
自动白平衡是基于假设场景的色彩的平均值落在一个特定的范围内,如果测量得到结果偏离该范围,则调整对应参数,校正直到其均值落入指定范围。该处理过程可能基于YUV空间,也可能基于RGB空间来进行。对于Sensor来说,通常的处理方式是通过校正R/B增益,使得UV值落在一个指定的范围内。从而实现自动白平衡。
特殊情况的处理
在自动白平衡中,容易遇到的问题是,如果拍摄的场景,排除光线色温的影响,其本身颜色就是偏离平均颜色值的,比如大面积的偏向某种颜色的图案如:草地,红旗,蓝天等等,这时候,强制白平衡将其平均颜色调整到灰色附近,图像颜色就会严重失真。
因此,通常的做法是:在处理自动白平衡时,除了做为目标结果的预期颜色范围外,另外再设置一对源图像的颜色范围阙值,如果未经处理的图像其颜色均值超出了该阙值的话,根本就不对其做自动白平衡处理。由此保证了上述特殊情况的正确处理。
可见,这两对阙值的确定对于自动白平衡的效果起着关键性的作用。
某平台的例子
可以看到随着色温的升高,其变化规律基本符合上节中的理论分析。不过这里多数参数与理论值都有一些偏差,其中日光灯的色温参数设置与理论值有较大的偏差,实际效果也证明该日光灯的参数设置使得在家用日光灯环境下拍摄得到的照片颜色偏蓝。修改其参数后实拍效果明显改善。(再查一些资料可以看到通常会有两种荧光灯色温 4000 和 5000K,目前所接触到的应该是5000K居多)
具体参数的调整,应该在灯箱环境下,使用各种已知色温的标准光源对标准色卡拍摄,在Pc机上由取色工具测量得到其与标准色板的RGB分量上的色彩偏差,相应的调整各分量增益的比例关系。为了更精确的得到结果,曝光量增益的设置在此之前应该相对准确的校正过。
亮度及曝光控制篇
感光宽容度
从最明亮到最黑暗,假设人眼能够看到一定的范围,那么胶片(或CCD等电子感光器件)所能表现的远比人眼看到的范围小的多,而这个有限的范围就是感光宽容度。
人眼的感光宽容度比胶片要高很多,而胶片的感光宽容度要比数码相机的ccd高出很多!了解这个概念之后,我们就不难了解,为什么在逆光的条件下,人眼能看清背光的建筑物以及耀眼的天空云彩。而一旦拍摄出来,要么就是云彩颜色绚烂而建筑物变成了黑糊糊的剪影,要么就是建筑物色彩细节清楚而原本美丽的云彩却成了白色的一片。
再看人眼的结构,有瞳孔可以控制通光量,有杆状感光细胞和椎状感光细胞以适应不同的光强,可见即使人眼有着很高的感光宽容度,依然有亮度调节系统,以适应光强变化。
那么对于camera sensor来说,正确的曝光就更为重要了!
自动曝光和18%灰
对于sensor来说,又是如何来判断曝光是否正确呢?很标准的做法就是在YUV空间计算当前图像的Y值的均值。调节各种曝光参数设定(自动或手动),使得该均值落在一个目标值附近的时候,就认为得到了正确的曝光。
那么如何确定这个Y的均值,以及如何调整参数使得sensor能够将当前图像的亮度调整到这个范围呢?
这就涉及到一个概念 18%灰,一般认为室内室外的景物,在通常的情况下,其平均的反光系数大约为18%,而色彩均值,如前所述,可以认为是一种中灰的色调。这样,可以通过对反光率为18%的灰板拍摄,调整曝光参数,使其颜色接近为中等亮度的灰色(Y值为128)。然后,对于通常的景物,就能自动的得到正确的曝光了。
当然这种自动判断曝光参数的AE功能不是万能的,对于反光率偏离通常均值的场景,比如雪景,夜景等,用这种方法就无法得到正确的曝光量了。所以在sensor的软件处理模块中,通常还会提供曝光级别的设定功能,强制改变自动曝光的判断标准。比如改变预期的亮度均值等。
曝光参数的调整
曝光强度的调整,可以通过改变曝光时间,也可以通过改变亮度增益AG来实现。
曝光时间受到桢频的限制,比如摄像时要求15帧每秒的话,这时候曝光时间最长就不能超过1/15s,可能还有别的条件限制,实际的曝光时间还要短,在光线弱的情况下,单独调整曝光时间就无法满足帧频的需要了。
这时候还可以调整增益AG,来控制曝光的增益,降低曝光时间。但是,这样做的缺点是以牺牲图像质量为代价的,AG的增强,伴随的必然是信噪比的降低,图像噪声的增强。
所以,以图像质量为优先考虑的时候,曝光参数的调节通常是优先考虑调节曝光时间,其次在考虑曝光增益。当然曝光时间也不能过长以免由于抖动造成图像的模糊,而在拍摄运动场景时,对曝光时间的要求就更高了。
参考资料:

传感器白平衡:颜色传感器白平衡调试问题

程序功能:AVR外部信号采集处理,使用PB0引脚口。选通不同颜色,用T2来计算PB0口256个上升沿的时间。
#ifndef COLOR_H
#define COLOR_H
#endif
#define S0      0
#define S1      1
#define S2      2
#define S3      3
#define LED     4
#define OUT     0
static volatile unsigned int timer=0;
static volatile unsigned int GC=0,BC=0,RC=0;//
static volatile char i=0;
unsigned char j=0;
volatile unsigned int rx=0,gx=0,bx=0;
//PA0   PA1 PA2 PA3 PA4 PB0
//S0    S1  S2  S3  LED OUT
//S3  S2
//0   0     红(R)
//1   1     绿(G)
//1   0     蓝(B)
//0   1     无
void Color_Mode(unsigned char color)
{
if(color=='R')//将滤波选择为红色,即S3:S2=0:0
{
PORTA   &=~((1<<s3)|(1<<s2)); }="" else="" if(color="='G')//将滤波选择为绿色,即S3:S2=1:1" {="" porta="" |="(1<<S3)|(1<<S2);" &="~(1<<S2);" void="" color_ioinit()="" 将传感器的s0,s1,s2,s3和led引脚设置成输出高电平形式="" out设置成带上拉电阻的输入模式="" ddra="" 选择输出比例因子为100%,="" color_timer02init(void)="" 将定时器0设置成外部脉冲输入模式pb0为外部脉冲输入引脚="" timsk|="(1<<TOIE0);//T0中断使能" tccr0|="(1<<CS02)|(1<<CS01)|(1<<CS00);//将TCCR0的第三位全部设置成1,上升沿有效" tcnt0="0;//将计数器初始化为0" 定时器2溢出中断="" isr(timer2_ovf_vect)="" timer++;="" 计数器0计数溢出中断="" isr(timer0_ovf_vect)="" if((porta&0x0c)="=0x00)//选择滤红色" rc="timer*34.7222;" color_mode('g');="" 选择滤绿色波="" i="0;" gc="timer*34.7222;" color_mode('b');="" 选择滤蓝色波="" bc="timer*34.7222;" color_mode('r');="" 选择滤红色波="" 转换完后,关闭溢出中断使能="" timsk&="~(1<<TOIE0);" tccr0&="~(1<<CS02)|(1<<CS01)|(1<<CS00);" tccr2&="~((1<<CS22)|(1<<CS21)|(1<<CS20));" timer="0;" tcnt2="0;" color_catchvalue()="" if(i="=1)" rx="RC;" gx="GC;" bx="BC;" #include="" #include"uart.h"="" #include"util="" delay.h"="" #include"color.h"="" int="" main(void)="" uartinit();="" color_ioinit();="" color_timer02init();="" printf("it="" is="" running");="" while(1)="" color_catchvalue();="" return="" 0;="" 结果显示:="" 结果分析:="" 当t0中断产生,第一个if语句中的timer总是为0,即使改变if顺序也是如此。求解释。=""

传感器白平衡:颜色识别传感器 TCS230的白平衡和比例因子浅谈。

<div class="" 0="" 本帖最后由="" linchenfeng="" 于="" 2016-10-10="" 17:31="" 编辑="" 注:本文是对颜色传感器白平衡和比例因子计算的介绍,和具体流程实现方法。="" 由于发现身边同学有做有些设计的时候需要到颜色识别传感器。但是对于其中的三个(rgb)的比例因子不知道怎么来的,是什么意思,或者怎么去计算调整。这里我简单统一的做一下介绍。="" 首先,使用颜色识别传感器的原理实际就是,三单元色的分析。因为任何颜色都可以由rgb这三种颜色混合而成。所以我们只要识别出这三种颜色的值,然后对应去查颜色铺表,即可得出被测物的颜色。="" 再者,实际使用中,很多同学都是照搬网络上的例程,发现对颜色的识别有很大的误差或者误识别。主要是因为历程中的比例因子均是固定了的,而且同学们也不知道如何去修改。="" 因为不同条件下,比例因子是不同的。所以才有了白平衡的需要。="" 那么,什么是比例因子呢。我们知道在理论(认为无任何干扰光源下),白色对应的三基色(rgb)="" 都是="" 255。="" 而我们在实际中不可能是在无干扰的理论环境下。="" 那么这个白色也不是理论下的“白色”,那么对应rgb就不是255了。既然白色都是不是标准的了,那么其他颜色的rgb肯定就不是标准的了。所以,我们得知道一个调整参数,这个参数就是比例因子。="" 比如:在使用环境下,我们做白平衡,得到了rgb的值,分别是240,245,250,那么对应的比例因子就是240="" 255,245="" 255,250="" 这样,我们在检测其他颜色的时候,得到rgb参数后,分别取乘上各自的比例因子。就可以得到更加真实的rgb值了。="" 然后,具体实现方法呢。="" 参考数据手册。="" 里面介绍了两种方法,第一种是脉冲计数到255,得到时间基数;第二种是固定时间采集脉冲然后通过正比例转化为255,得到一个调整参数,也就是比例因子。="" 由于,网络上基本都是采用第二种,我就介绍第二种方法。="" 个人实际上更加偏向第一种方法,更加的准确和可靠。="" 对第二种方法而言,传感器正对白色物体(光源也可)首先我们设置一个固定时间,比如为10ms。然后我们通过依次选通传感器的检测基色(每个通道都是10ms),分别得到三个脉冲个数的值,比如红色为x个脉冲,绿色为y个脉冲,蓝色为z个脉冲。然后a为红色比例因子,b为绿色比例因子,c为蓝色比例因子,那么a="255/X,B=255/Y,C=Z/255。" 这样我们就完成了比例因子的计算。="" 然后,我们检测其他颜色的时候,(这里注意,如果我们是采用10ms做的基本时间,那么检测任何颜色下,程序中的检测时间也需要设置为10ms)。分别得到rgb后,再分别乘以上面计算的比例就可以得到更加准确的真实rgb值。="" 之后,我们把得到的rgb值,通过查表法对三原色值表进行查表,可以就可以得到具体是什么颜色。这里肯能有的同学要问了,不可能每个rgb值都刚好和表里的值对应啊。这里,我就要说,其实如果我们只是大概识别红色,浅红,深红,这里我们已经可以实现。如果还要细分,那么可以这样,得到的rgb值首先查遍,如果没有刚好直接能够匹配的,我们可以找到相近的两个参数,然后通过插值法,再去判断识别。="" 具体的rgb值表在网络上可找到,实际程序中的查表法,可以使用二分法,插值法可以使用线性插值。仅仅个人建议。="" 最后,实际使用中,如果我们环境没有发生变换只需要做一次白平衡就可以(也就是只计算一次比例因子),之后就用这个因子做处理就好了。="" 程序里面,我们可以设置一个命令或者按键,当用户按下按下或者收到这个命令后,才做白平衡。="" 这里就介绍完了。希望对有疑问的朋友能够有帮助。="" 不过,那种还是只会问要代码的!别再来找我!!!!="" 只要你理解了,根据网络上提供的代码,然后稍微加修改就可以完成白平衡(比例因的计算)。="" 补充下:="" 针对第一种时基方式,实际上更加可靠。还是大概说下,白平衡时候,利用mcu的pca功能,分别去捕捉rgb的输出脉冲,直到捕获到255个。="" 然后计算出rgb分别输出255个脉冲的时间(pca模式下,捕获功能可以计算出时间的).="" 然后,这个三个时间t1,t2,t3,以后就是我们去检测其他颜色输出脉冲的限制时间。="" 举例:检测三原色中r的值,通过配置定时,比如配置为t1的时间长度,pca捕获这个t1下输出的脉冲个数,这个脉冲个数就是r真实值了。然后再把定时器配置为t2的时间长度,pca捕获t2下的脉冲,这个值就是g的值,b同理。="" 1="" qq图片.png="" (121.7="" kb,="" 下载次数:="" 29)="" (74.15="" 25)="" 17:25:38  ="" 评论="" 淘帖0="" 举报="" 相关推荐=""

下一篇: PLC、DCS、FCS三大控

上一篇: 电气控制线路图控制原