PCCAM 开发文档

PCCAM
开发文档
最近在做PCCAM的驱动开发所以顺手把一开发的过程写下来。

一、Gamma
矫正(Gamma Correction

    所谓的Gamma矫正就是把输入的光线转化电信号后在修正为人眼睛可看到的色彩及亮度。在PC上的数字化图像中图像的色彩模式一般才用RGB的格式,每个色值0~255,关于色彩的合成问题就不提了。 RGB模式中个G是最重要的就如YUV里的Y一样G基本代表了亮度的也就是说G是人眼睛最敏感的。 一个标准的计算机显示器的亮度显示不是线性的,所以就需要Gamma矫正,下图就是一般显示器的亮度响应近似的曲线,一个是理想的显示器曲线。 所以,在显示器上的一个黑点并不是完全黑色的或者一个白点不是全白的。对于这个问题就需要进行Gamma矫正了,把曲线的输入矫正成眼睛看上去是直线的输出效果。        CMOS Sensor的结构原理。光电二极管只能感应光线亮度,不能感应色彩信息。因此,必须使用某种机制以人工的方式增强它对不同色彩的灵敏度,从而向 人眼呈现不同的颜色。色彩滤镜阵列的作用是确保每个传感器像素只会收到一种颜色的光:通常是红蓝绿三种颜色。色彩滤镜阵列可以使用不同的模式。由于人眼感 应色彩的方式以及人眼对绿色的灵敏度是其对红色和蓝色灵敏度二倍这一事实,要模仿人眼的感应方式。因为绿色比较敏感所以需要更多的绿色Color Filter来模仿人的眼睛的工作原理。   
      实际算法,在PCCAM里的Sensor主要采用CMOS的Sensor,其色彩响应值一般比0~255,一般在需要对整个Sensor输出的Low data进行一个Gamma矫正,然后再对Low data 进行插部点算法产生一幅完整的彩色图象,一般的Sensor的对每种色彩的输出也不是平行线性的。所以针对这种Sensor还须分别对每种色彩进行Gamma矫正。使输出的色彩相对平衡。
二、自动曝光补偿(AE
       自动测光,是利用了物体对光线的反射原理,来判断。所有的物体对光线都有反射,绝对不反射的物体在地球表面是没有的,测光有2种;1、是全窗口分析。2、就是对某一部分进行分析,测出该物体的(一般是被摄主体)的反射率。将光线强弱信号转化成电信号,这就是自动测光。        通过测量的信号进行自动调整曝光时间及增益(AGC),1步测量出该Sensor最佳AGC值,一般在AGC最大与最小的中间值,然后对Sensor 设置AGC为查考值。然后对Sensor的exposure timer 进行调整,如果到了下限或上限再对AGC进行相应的调整,注意AGC调整太高了容易造成图象低噪信号。        计算公式: 曝光值EV = 参考焦距F与曝光时间T的比: PCCAM的自动算法: 计算RGB中的亮度值也就是计算G的累计值B, EVpre为上一次的EV值,Bpre为对应的上次的亮度值。 Bopt为当前计算的亮度值。  
三、自动白平衡(AWB
自动白平衡校正可以确保影像中的白色与观察者看到的真正的白色一样。下图中左侧的影像是在2856K卤钨灯照明的条件下拍摄的,但是对它进行了标准的自动白平衡处理。一个高级的自动白平衡(AWB)系统,可根据影像拍摄的照明条件,使影像几乎呈现为真正的白色。 下图中右侧的影像为经过改进的自动白平衡处理后的影像。  
四、坏点处理
    对于CMOS的Sensor或多或少都会有小坏点。这样就造成了显示图象的一个固定的亮点或带固定颜色的小点。     处理方法,首先在注册表里建立10个DWORD值的项目。用于保存坏点的位置及大小。DWORD分成3个9为的值分别保存X与Y的座标及坏点的大小。判断是否是坏点的方法,Init时从注册表里读取值判断是否已经初始化了,如果没有判断过就重新判断一次,     判断流程,启动用默认的值对IC和Sensor配置,关闭AWE及AE然后对每个点进行判断如果在10次内该值始终处与比较高或比较底的值段上且没有变化就认为是一个坏点。注意必须对Low data进行分析。     最后保存所有的坏点的数据(如果超出10点就不处理了,如果大于10个坏点该Sensor就可以扔了),最后在运行的过程中再对之前判断的坏点进行一次判断如果该点的值有发生变化就说明之前是个误判则删除保存该坏点的信息。     对坏点的修补工作,在插补算法的过程中对该坏点采用与该点最进的相同色点的值进行替换以达到坏点修复方法。      
下面是采用
ETOMS

IC
开发的
PCCAM 1、  首先从初始化USB、IC 、Sensor并设置一些配置功能。             Sensor以接收的时序的不同,可分为主动模式(Master)与被动模式(Slave),主动模式的Sensor的时序产生,主要是接收系统的时钟(Clock),产生输出资料的时钟(Pixel Clock)及垂直(V Sync)几水平(H Sync)的同步信号。而被动模式的Sensor的时序主要是接收系统的时序(Clock) 垂直(V Sync)几水平(H Sync)的同步信号然后输出图象数据,一般而言主动模式Serson内部有比较多的寄存器、除频器及一些影像处理功能,而被动式Sensor一般只有控制曝光(Shutter)几信号放大 (Gain)的功能,所以内部的寄存器也比主动式的要少,当然价格肯定也会更低。        注意每个Sensor都有个有效的感应区域所以在设置Sensor时需要设置好有效的起始位置,且要注意与插补算法对应否则会出现色彩不正确的问题!   2、  I2C 通讯协议: I2C通讯协议是标准的IC之间通信的一种协议。其由8个bit为单位进行传输。 EX61X251/151的I2C协议的设置。 在寄存器的0X01地址的第3个bit ,I2C 或串接式输入设定 (Serial InterfaceMode,0:SSI,1:SI),把该字节设置为1就是I2C模式否则为SI模式。 具体代码: wIndex=0x01; byValue=0x10; ulSize=1; ET150CAM_RegisterWrite(pDC,wIndex,&byValue,ulSize);   3、  Sensor Gamma 从Low data输入数据后根据对应的Gamma Table来修改输出的值。 4、  插补算法 从最下一行开始编码,采用3*3的方阵插补成一个点的颜色。 G=((g11+g13+g31+g33)/4+g22)/2,B=(b12+b32)/2,R= (r21+r23)/2,其他行的依次类推。 5、  AGC、EXP控制。 a)         Gain增益控制,0~255值越大其增益就越小。增益太大容易造成低噪。 b)        EXP自动曝光时间。0~1024值越大曝光时间越小。 该控制采用I2C协议进行传输。 注:该值是对特点的Sensor而言。 6、  AWB自动白平衡控制。 判断R、G、B之间的差异并相应对比低的色值调整其输出的增益(RGB Gain)   上图为PCCamera的整个流程图

点赞