高通MSM8909 CAMERA TUNING 基础

转载自:http://blog.chinaunix.net/uid-7213935-id-5750641.html


一. 重要概念:
1.色温
所谓色温,简而言之,就是定量地以开尔文温度(K)来表示色彩。英国著名物理学家开尔文认为,假定某一黑体物质,能够将落在其上的所有热量吸收,而没有损失,同时又能够将热量生成的能量全部以“光”的形式释放出来的话,它便会因受到热力的高低而变成不同的颜色,如下图:


高通MSM8909 CAMERA TUNING 基础_第1张图片
2. 标准光源
是指模拟各种环境光线下的人造光源,让生产工厂或实验室非现场也能获得与这些特定环境下的光源基本一致的照明效果。标准光源通常安装在标准光源箱内,主要用于检测物品的颜色偏差。
人造的标准光源主要有如下10种类型:
高通MSM8909 CAMERA TUNING 基础_第2张图片
在调试的过程中,一般都是基于三种光源类型调试,所用到的光源为D65,D50,TL84,CWF,A,H。
3. 白平衡
所谓白平衡(英文名称为White Balance),就是对白色物体的还原。当我们用肉眼观看这大千世界时,在不同的光线下,对相同的颜色的感觉基本是相同的,比如在早晨旭日初升时,我们看一个白色的物体,感到它是白的;而我们在夜晚昏暗的灯光下,看到的白色物体,感到它仍然是白的。这是由于人类从出生以后的成长过程中,人的大脑已经对不同光线下的物体的彩色还原有了适应性。但是,作为拍摄设备,如数码相机,可没有人眼的适应性,在不同的光线下,由于CCD输出的不平衡性,造成数码相机彩色还原失真。一般情况下,我们习惯性地认为太阳光是白色的,已知直射日光的色温是5200K左右,白炽灯的色温是3000K左右。用传统相机的日光片拍摄时,白炽灯光由于色温太低,所以偏黄偏红。所以通常现场光线的色温低于相机设定的色温时,往往偏黄偏红,现场光线的色温高于相机设定时,就会偏蓝。
为了解决不同色温下,引起的白色漂移现象。由于白色对色温变化的响应最大,通常用白色来作为调整的基色。
4. 自动白平衡
自动白平衡是基于假设场景的色彩的平均值落在一个特定的范围内,如果测量得到结果偏离该范围,则调整对应参数,校正直到其均值落入指定范围。该处理过程可能基于YUV空间,也可能基于RGB空间来进行。对于Sensor 来说,通常的处理方式是通过校正R/B增益,使得UV值落在一个指定的范围内。从而实现自动白平衡。
一般来讲,在优化参数中,自动白平衡  (AWB) 调试模块用于调整参考点、弱光查询表、AWB Bayer 参数和色调校正。
5. 曝光Gain值
曝光等级的强弱,一般由sensor 本省处理能力决定;也可以通过ISP处理能力补强。
6. 光照强度Lux
勒克斯(lux,法定符号lx)照度单位,1 勒克斯等于 1流明(lumen,lm)的光通量均匀分布于 1㎡ 面积上的光照度。
二. 效果参数头文件构架
1. 效果参数文件列表
效果参数一般位于下面路径:mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0301\libchromatix,在xxxx_sensor_lib.c 中被加载;文件列表如下:

高通MSM8909 CAMERA TUNING 基础_第3张图片
2. 文件构架
所有的效果参数都是在.h头文件中,而头文件有分为两类,一类是common类,如chromatix_xxxx_common.h,一类是非common类,如chromatix_xxxx_preview.h。
任何一个复杂的东西,如果把他拆分的足够小,总有你能理解的部分。效果参数也不例外,当你把他们构架细分了的时候,就不会被烦躁的数据所缠扰而不知所云。
1) Chromatix_xxx_common.h 文件构架 
主要包含模块如下: 

Chromatix_xxx_common.h


0x0301,---------------------------------------------------版本
0, // Not compressed
1, // Revision 
{
/*Linearization*/  -------------------------------------线性化
}
{
/*Lens Rolloff */ ---------------------------------------- 镜头衰减
}
{
/*LA Secial Effects---场景特效---*/-----------------场景特效
}

线性化:
由于图像感光器所具有的特性,传感器对场景亮度的输出响应不一定是线性的,并且不同照明条件下可能有所不同。例如,传感器光子响应曲线在强光饱和度条件下几乎是平的。
在黑暗环境下,由于暗电流的原因,传感器输出将不会完全为零。该偏移值取决于使用的
具体传感器,并且还取决于集成时间,曝光对应整体增益设置和温度。即使是不饱和区域,
R/Gr/Gb/B 通道的响应曲线在线性度方面也可能不完全匹配,从而导致轻微的色偏。必须为不同照明条件下每个像素的每个通道校正传感器响应的线性度。
镜头衰减:
出于节约成本的考虑以及尺寸方面的原因,手机相机镜头向小型化和低成本方向发展。由于摄像头尺寸小,制造材料品质低,拍摄的图像在靠近边缘处会出现亮度衰减的现象。因
此要对 Bayer raw 图像进行镜头衰减校正,以降低计算负荷。使用 LUT 分段线性近似法代替模拟曲线和多项式运算。每种颜色都有自己的 LUT,因此亮度衰减和色偏问题可同时得到解决。
LA Special Effects
特效场景,如Whiteboard,Blackboard等,不解释。
一般情况下,Linearization不会去调试,如果非要调试,必须要通过工具优化
。Lens Rolloff则需要用工具调试,参见文档:80_NK872_1SC_Chromatix_6_User_Guide___Simplified_Chinese.pdf。
总体而言,Chromatix_xxx_common.h 决定一个模组的基本效果,即使Chromatix_xxx_preview.h再怎么优化,如果Chromatix_xxx_common.h没有优化好,也优化不出最佳的效果。
2) Chromatix_xxx_preview.h 文件
由于preview,video,snapshot等文件构架都一样,此处只分析此类架构。
主要包含模块如下:
chromatix_xxx_preview.h 文件:


0x0301,
0,
1,
{
 /*VFE Blocks*/
{
        /*Black-Level Subtraction*/
}
{
        /*Adaptive Bayer Filter 2 ---ABF2---*/
}
  {
/*Bad Pixel Correction*/
        /*Demosaic3*/
/*Chroma and Luma Filters*/
}
{
/*Color Correction*/
}
{
/*Gamma Tables*/
}
{
/*Color Conversion*/
}
{
/*5x5 ASF  */
    }
{
/*7x7 ASF */
}
{
/*Luma Adaptation   */
/*Chroma Suppression/Memory Color Enhancement  */
}
{
/*Wavelet Denoise*/
},
}
{
/*Manual Whitebalance*/
},
{
/*Auto Whitebalance*/
},
{
/*Bayer AWB Params*/
},
{
/*Exposure  Table*/
},
/*不常用模块*/
{
/*Auto Flicker Detection*/
},
{
/*Auto Scene Detection*/
},

三.重点模块调试
1. AEC 曝光表
通过传感器曝光时间和传感器模拟增益控制图像亮度.
a.知识背景:
摄像头sensor使用模拟放大器将像素信息放到来实现传感器增益。也可以将sensor曝光疆场一段时间,使得每个像素都可以收集到更多的光线。之后,可以通过曝光算法控制传感器增益和像素曝光,从而实现与目标值相关的画面、物体或是场景的亮度恒定。
b.chromatix6.0 调试,略去;
c. 手动调试:
代码片段:

 /* Exposure Table */
   {
      1, /* Use Digital Gain */
      367, /* Max Exposure Table Entries for EV0 */
      0, /* Enable Digital Gain for EV Lowlight */
      413, /* Max Exposure Table Entries for EV+2 with digital gain */
      {
         {256, 1}, /* Gain= 1.000 Exposure Index=0 */
         {264, 1}, /* Gain= 1.031 Exposure Index=1 */
         {272, 1}, /* Gain= 1.063 Exposure Index=2 */
         {280, 1}, /* Gain= 1.094 Exposure Index=3 */
         {288, 1}, /* Gain= 1.125 Exposure Index=4 */
         {297, 1}, /* Gain= 1.160 Exposure Index=5 */

高通MSM8909 CAMERA TUNING 基础_第4张图片
曝光表不仅仅是上面工具生成的表,还包括很多”target point”,用来做cover,代码片段如下:
/* Low-Light Trigger Points */
      {
         7.200000f, /* Gain Start */
         8.000000f, /* Gain End */
         330, /* Lux Index Start */
         367, /* Lux Index End */
      },
要调试的几个参数:
Luma Target----默认亮度
Fix FPS AEC Table Index------最大帧率下的曝光,影响帧率和亮度
……
2. ABF(Adaptive Bayer Fliter)
a. 知识背景:
常规 2D 卷积滤波会使图像质量劣化(要么图像模糊,噪点少;要么图像锐度高,噪点多),尤其在应用于 Bayer 像素时。而ABF滤波在降噪的同时不钝化边缘,采用的滤波器可根据相邻像素的值调整其内核。
b. 工具调试,略去;
c. 手动优化
不建议手动优化。
3.ASF(Adaptive Spatial Fliter)
a. 知识背景:
自适应空间滤波器 (ASF) 是一种根据边缘检测结果对图像的不同部分执行平滑和锐化处理的自适应滤波器。ASF 针对图像中的不同区域有两种不同的处理方法。它可对细节较少的区域进行平滑处理以实现降噪,对边缘进行锐化处理以提升图像锐度。因此必须为 ASF 滤波器指定两个滤波器,即平滑滤波器和锐化滤波器。

高通MSM8909 CAMERA TUNING 基础_第5张图片

b. 工具调试
略去,详细参考:80_NV105_1SC_5x5_Adaptive_Spatial_Filter_Tuning_Guide__Simplified_Chinese_.pdf
80_NK872_1SC_Chromatix_6_User_Guide___Simplified_Chinese.pdf
c.手动调试:

高通MSM8909 CAMERA TUNING 基础_第6张图片
代码片段:
/* Normal Light */
            {
               10, /* e1 */
               32, /* e2 */
               -32, /* e3 */
               32, /* e4 */
               -32, /* e5 */
               0.750000f, /* k1 */
               0.750000f, /* k2 */
               30, /* sp */
               0, /* sp 5x5 */

光照条件 
? 根据光照条件(例如,弱光、正常亮度和强光)确定的ASF参数 

高通MSM8909 CAMERA TUNING 基础_第7张图片
曝光指数代表着光照条件,不同光照条件下应使用不同的ASF参数。
注意在优化的时候,要兼顾到实际情况,不能随意调试,而各个参数之间也有有关联的。
4. gamma校正table
a.  背景知识
曝光的均值正确了,并不代表整体图像的亮度分布就和人眼所看到的保持一致了。事实上,人眼对亮度的响应并不是一个线性的比例关系,而各种涉及到光电转换的设备的输入输出特性曲线一般也是非线性的,对于sensor来说,其响应倒是接近为线性关系,所以为了在各种设备上正确输出符合人眼对亮度的响应的图像,就需要进行校正。幂函数的指数的倒数就是通常所说的 gamma 值。

高通MSM8909 CAMERA TUNING 基础_第8张图片
它能起到的作用很多,它几乎可以影响到图像质量调整的各个方面。在图像质量调整中,Gamma校正的一个重要作用是体现细节,增强对比度。由于人眼对于高亮度的差别感觉不明显,而对低亮度的细小差别感觉较为明显,因此,Gamma校正通过将低亮度部分的差距拉大,而造成低亮度部分的细节能够被人眼明显的感觉出来,而图像的细节部分基本上都是纯在于低亮度部分的。
b. 工具调试略去;
c. 这部分不可能手动优化,但是可以借鉴别的项目的gamma,最好是问FAE要几组他们实验室优化过的gamma table。
5. Color Correction 
 a.  背景知识
由于摄像头系统中使用的光学元件(镜头、色彩滤镜等)和传感器所具有的特性,当图像显示在特定输出介质上时,原始 RGB 数据可能不能真实地呈现给人眼。因此需要进行色彩校正。
b. 工具优化略去。
C.手动优化:
代码片段:
/* TL84 Color Correction */
      {
         1.729600f,    -0.939000f,    0.209400f,
         -0.319300f,    1.277900f,    0.042600f,
         -0.115400f,    -0.994300f,    2.109700f,
         0,    0,    0,
         0
      },

如上代码,加粗的对角线依次是R,G,B的饱和度,可以手动调节,注意各个场景下参数。
 
6. Color Conversion 
a. 背景知识:
要拍摄 JPEG 快照图像,必须将 RGB 色彩空间转换为 YCbCr 色彩空间。默认转换矩阵可以在不更改任何信息的情况下将 RGB 值转换为 YCbCr 值。不过,由于人眼和摄像头传感器对光谱响应不同,摄像头捕捉的颜色也与人眼看到的颜色有所不同。要提升还原色彩与人眼感知间的颜色精确度,可对颜色处理管道中的 RGB 至 YCbCr 转换矩阵进行优化,从而最大限度地降低平均色度偏差。高级色度增强 (ACE) 的目的是进一步降低还原色彩与人眼感知间的色差,同时增强期望颜色(例如记忆色)的效果。实际上,ACE 中的很多参数可用于提高转换灵活性,增强空间色彩而尽量不影响其他颜色。
b.工具优化略去;
c.手动调试:

代码片段:
/* TL84 Color Conversion */
      /* Noise Weight: 0.000000 */
      /* Saturation: Red - 1.000000, Green - 1.000000, Blue - 1.000000 */
      {
         {
            /* a_m, a_p */
            0.510000f, 0.510000f,
            /* b_m, b_p */
            -0.338000f, -0.338000f,
            /* c_m, c_p */
            0.510000f, 0.5100000f,
            /* d_m, d_p */
            -0.162000f, -0.162000f,
            /* k_cb, k_cr */
            128, 128

}
各个量的含义:
a_m:黄色饱和度;
a_p:蓝色饱和度;
b_m:绿色向量;
b_p:红色向量;
c_m:绿色饱和度;
c_p:红色饱和度;
d_m:黄色向量;
d_p:蓝色向量;
通过手动调试片段中加粗的参数,可以到到色彩的微调,尤其是肤色色彩。


7. 白平衡
a. 背景知识
见前重要概念章节所述。
b. 工具优化略去;
c. 手动优化:
   一般分为手动白平衡和自动白平衡。
Manaual Whitebalance
代码片段如下:
/* TL84 Whitebalance - RGB */
   {1.074800f, 1.000000f, 1.717200f},
   /* D50 Whitebalance - RGB */
   {1.300800f, 1.000000f, 1.302100f},
   /* A Whitebalance - RGB */
   {1.000000f, 1.134000f, 2.230100f},
   /* D65 Whitebalance - RGB */
   {1.479100f, 1.000000f, 1.074600f},
   /* Strobe Flash Whitebalance - RGB */
   {1.679100f, 1.000000f, 1.274600f},
   /* LED Flash Whitebalance - RGB */
   {1.288600f, 1.000000f, 1.551900f},

每一项下面的三个参数代表RGB的比率,可以按照实际效果手动优化,也可以通过工具优化。
7. Bad Pixel Correction
a. 背景知识
由于半导体工艺(CMOS 或 CCD)存在的缺陷,图像传感器会产生坏点。模块制造过程中也会引入其他瑕疵。这些坏点会表现为亮点(热像素)或暗点(冷像素),有时会成簇出现。坏点/坏点簇可能是: 
?  传感器制造过程中势阱渗漏、像素灵敏度异常或电阻损耗造成的坏点/坏点簇安装镜头时因传感器顶部落有灰尘颗粒而造成的坏像素因老化造成的坏点/坏点簇在噪声滤波和色彩滤镜阵列(CFA) 插值处理前,必须找到并校正坏点。缺陷像素和簇检测的原理是将图像传感器的特定彩色像素值与同种颜色相邻像素值进行比较。
b. 工具优化略去;
c. 手动优化:
此部分不做手动优化。

8. 小波降噪(Wavelet Denoise)
a.知识背景:
小波去噪是基于频域去做的去噪,不同的频率区间按照不同的力度和方式去处理;越是细节的地方频率越高噪声也越多,如果力度加的太强,清晰度也会损失比较多.根据目标芯片的小波功能,该模块可能是硬件小波降噪或者软件小波降噪;MSM8909 是不支持硬件小波降噪功能的,但是支持软件小波降噪,在capture环节有作用,打开后拍出的照片没有红绿噪点。
 /* Denoise Scale Y */
               {
                  10.000000f, 10.000000f, 10.000000f,10.000000f
               },
               /* Denoise Scale Chroma */
               {
                  15.000000f, 15.000000f, 13.000000f, 10.000000f
               },
               /* Denoise Edge Softness Y */
               {
                  10.000000f, 10.000000f, 10.000000f, 10.000000f
               },
               /* Denoise Edge Softness Chroma */
               {
                  15.000000f, 15.000000f, 15.000000f, 15.000000f
               },
               /* Denoise Weight Y */
               {
                  0.000000f, 0.000000f, 0.000000f, 0.000000f
               },
               /* Denoise Weight Chroma */
               {

b. 工具优化略去;
c. 手动优化:
     一般情况下可以尝试增大denoise scale去降噪;每组四个值,对应lv0-lv4四个区间力度,值越大去噪力度越强;
Denoise Edge Softness:可直接影响边缘/细节,因此在增大edge softness 值时要格外小心,特别是针对室外场景。
      Denoise Weight:越小去噪能力越强,denoise weight = 0 则是最大化降噪,细节与之关联最大,配合锐度调试,以达到细节和噪声之间的平衡.

四. 关于调试
  1. 调试信息
    调试参数的时候,往往要抓log用来跟踪实时数据,一般步骤如下:
a) adb root ---打开root权限;
b) adb shell setprop persist.camera.stats.debug.mask 设置属性
是十进制:

STATS_DEBUG_MASK_AEC_LOG = (1 << 0)  >1 曝光
STATS_DEBUG_MASK_AWB_LOG = (1 << 1)  >2 白平衡
STATS_DEBUG_MASK_AF_LOG = (1 << 2)   >4 对焦
STATS_DEBUG_MASK_ASD_LOG = (1 << 3)  >8 自动场景选择
STATS_DEBUG_MASK_AFD_LOG = (1 << 4)  >16 工频干扰消除

c) adb logcat 
在调试的适合,我习惯于用adb logcat –v time  | grep xxxx来抓取有用的信息;xxxx选择你所要关注的有效log,如:
previw size;
banding;
AWB;
exp_index;
indoor_index;
FRAMES;
lux_index;
......
在debug的适合,关注log,看连续性和拐点,进而判断问题;
2. 优化心得 
a) 尽量多的从FAE哪里获取帮助
FAE一般有专业的实验室,有可以讨论的团队,有别人不知道的特殊模块参数列表,总之优势明显。当然也有他们解决不了的问题,这个时候也要发挥我们自己的主观能动性,对问题不能置之不理。
b) 调试不能随意
camera 的效果参数很多都是前后有联系的,不能顾此失彼,要综合考虑,同时也要一定的妥协折中,以达到一个稳定和满意的效果。
c) 多总结
不同IC的模组在效果参数上都有很多共性,在调试的时候自己多加总结,比较,总会出现意想不到的效果。

你可能感兴趣的:(Linux,Android,kernel,boot)