高通MSM8909 CAMERA TUNING 基础

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

 


2. 标准光源
是指模拟各类环境光线下的人造光源,让生产工厂或实验室非现场也能得到与这些特定环境下的光源基本一致的照明效果。标准光源一般安装在标准光源箱内,主要用于检测物品的颜色误差。
人造的标准光源主要有以下10种类型:算法


在调试的过程当中,通常都是基于三种光源类型调试,所用到的光源为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 中被加载;文件列表以下:shell

 


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---场景特效---*/-----------------场景特效
}ide

 

线性化:
因为图像感光器所具备的特性,传感器对场景亮度的输出响应不必定是线性的,而且不一样照明条件下可能有所不一样。例如,传感器光子响应曲线在强光饱和度条件下几乎是平的。
在黑暗环境下,因为暗电流的缘由,传感器输出将不会彻底为零。该偏移值取决于使用的
具体传感器,而且还取决于集成时间,曝光对应总体增益设置和温度。即便是不饱和区域,
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 */优化

 


曝光表不只仅是上面工具生成的表,还包括不少”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 滤波器指定两个滤波器,即平滑滤波器和锐化滤波器。ui

 



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

 

代码片断:
/* Normal Light */
            {
               10, /* e1 */
               32, /* e2 */
               -32, /* e3 */
               32, /* e4 */
               -32, /* e5 */
               0.750000f, /* k1 */
               0.750000f, /* k2 */
               30, /* sp */
               0, /* sp 5x5 */

 

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

 


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

 


它能起到的做用不少,它几乎能够影响到图像质量调整的各个方面。在图像质量调整中,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 <value> 设置属性
<value> 是十进制:

 

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的模组在效果参数上都有不少共性,在调试的时候本身多加总结,比较,总会出现意想不到的效果。

相关文章
相关标签/搜索