isp 配置参数研究

一,isp的模块划分和介绍

参考rv1126平台,了解下isp需要配置哪些模块

  • BLC:黑电平校正
  • LSC:镜头阴影校正
  • CCM:色彩校正矩阵
  • AWB:自动白平衡校正
  • GIC:绿通道平衡校正
  • Bayer NR:Raw域降噪
  • YNR:Y通道降噪
  • MFNR:多帧降噪
  • FEC:鱼眼校正

Silicon Image ISP的功能框图,跟rv1126基本重合

二,rk3288的isp params包含以下内容

三,rk3288 isp各模块详解

sensor->去坏点(dpcc)->bls->插值前去噪(dpf,BayerNR)->镜头阴影校正(lsc)->awb->颜色插值(bdm,去马赛克)->RGB

RGB->颜色降噪(flt,RgbNR)<-像素去串扰(ctk包含ccm)<-gamma(sdg_goc)->rgbtoyuv(csm)->YUV

YUV->明度对比度饱和度色调调整(cproc)->output

1,bls

CMOS传感器采集的信息经过一系列转换生成原始RAW格式数据。以8bit数据为例,单个pixel的有效值是0~255,但是实际AD芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此,sensor厂家一般会在AD的输入之前加上一个固定的偏移量,使输出的pixel value在5(非固定)~255之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,由于对于图像来说,我们的关注度更倾向于暗部区域,ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此亮区的一点点损失是可以接受的。
sensor的电路本身会存在暗电流,导致在没有光线照射的时候,像素单位也有一定的输出电压,暗电流这个东西跟曝光时间和gain都有关系,不同的位置也是不一样的。因此在gain增大的时候,电路的增益增大,暗电流也会增强,因此很多ISP会选择在不同gain下减去不同的bl的值。

一般BLC模块会放在ISP比较靠前的位置,因为我们希望图像在进入其他模块之前能够还原最为真实的图像。有些sensor会在sensor内部集成BLC的模块,那么此时ISP里的BLC模块只做微调即可。

由于硬件设计人员在设计BLC模块时需要考虑效果和成本,因此目前市场上使用的ISP一般采用的方法是在sensor输出的图像上减去一个数值。

2,lsc

镜头阴影(Shading)分为亮度阴影(Lens Shading)和色彩阴影(Color Shading),简单来说它们都是由镜头的光学特性所导致的图像的亮度和色彩不均匀的现象。其中,Lens Shading是由于Sensor边缘接受到的光线比sensor中心弱,从而造成了中心亮四周暗的现象(有的文档也称这种现象为“渐晕”)。Color Shading是由于入射光中不同波长的光的折射率不同,导致入射光中不同波长的光落在感光器件的不同位置上,造成图像的色彩不均匀的现象。Color Shading一般与镜头和sensor的CRA不匹配相关

AWB并不会造成color shading,但是AWB会放大color shading的影响

Shading一般在OB和DPC的后面。额外注意,如果3A的统计数据在shading之后获取,那么shanding会影响3A的统计数据

Shading的矫正方法目前主流有两种:一种是同心圆法,一种网格法

同心圆法的流程为:

1. 找到RGB三通道的圆心(一般选择为同一个点)

2. 以同心圆的形状将画面的中心和画面的边缘的三通道乘以不同的增益

具体如下图所示,一般来说考虑shading渐变的曲率从中心到边缘逐渐增大,所以等增益曲线中心稀疏,边缘密集。一般来说lens shading的增益最好不要超过2倍,因为会引入噪声。

下图为mesh shading的矫正方法,同一个方格中的增益一致,mesh的分布也是中心稀疏四角密集

最后总结一下:同心圆矫正方法的优点是计算量小,缺点是镜头若装配时稍有不对称则矫正失败;网格矫正方法的优点是能够应对各种shanding情况,缺点是运算量大

3,dpcc

DPC的意义
图像传感器上由于自身工艺技术造成的瑕疵,如光线采集的点存在缺陷,导致在光电转换过程中某些像素值不准确,我们称之为坏点(Defect Pixel)。尤其是对于低成本的sensor来说,坏点数为100 或者1000ppm(parts per million,百万分之一)是正常的。若sensor中存在坏点,经过图像的插值(如demosaic)和滤波等非线性过程,坏点的尺寸会变大(坏点扩散),而且由于色彩校正和串扰补偿,坏点处颜色的强度和饱和度也会明显提高,因此需要在其他模块执行之前对坏点进行校正,坏点一般分为静态坏点和动态坏点。

静态坏点:
亮点:亮点的亮度值明显大于入射光乘以相应比例,随着曝光时间的增加,该点的亮度会显著增加;
暗点:接近于0。
动态坏点:在一定像素范围内,该点表现正常,而超过这一范围,该点表现的比周围像素要亮。动态坏点与sensor 温度、gain值有关,sensor 温度升高或者gain 值增大时,动态坏点会变的更加明显。
坏点的存在一方面会影响图像的画质,另一方面,在某些应用场景下可能会影响CV的识别准确率,因此一般需要对DPC进行矫正。但是DPC的矫正也会带来相应的副作用,例如锐度下降,图像细节损失等,所以进行合适的DPC矫正是必要的。

DPC一般怎么实现
依赖标定的方法 - 主要校正静态坏点
静态坏点的校正是基于已有的静态坏点表(静态坏点表一般由sensor厂商提供),比较当前点的坐标是否与静态坏点表中的某个坐标一致,若一致则判定为坏点,然后再采用中值滤波的方法对其进行校正。一般来说,每颗sensor的静态坏点都可以百分百矫正,但这样做对sensor厂商会增加成本,所以对于低成本的sensor来说,由于成本和时间的限制,sensor制造商没有检测sensor的坏点信息,因此需要用户自行对静态坏点进行标定,得到静态坏点表。

不依赖标定的方法 - 主要校正动态坏点
由于存储坏点信息的内存有限,静态坏点校正有可能无法完全校正sensor中的坏点,因此静态坏点校正应当校正对图像质量影响较大的坏点,而动态坏点校正方法则校正其余的坏点。动态坏点的校正可以实时的检测和校正sensor 的亮点与暗点,并且校正的坏点个数不受限制。动态坏点校正相对静态坏点校正具有更大的不确定性。动态坏点校正可以分为两个步骤:坏点检测和坏点校正。

4,dpf

模块全称: denoise pre-filter ,作用是在 demosaic 前对 raw 进行一次去噪。
<NLL_SEGMENTATION index="1" type="double" size="[1 1]"> [1] </NLL_SEGMENTATION>adpf 噪声方差曲线 x 间距模式,0 为等间距,1 为非均匀间距
<nll_coeff_n index="1" type="double" size="[1 17]"> [1024 1024 1024 1024 1024 405 256 203 173 139 119 106 89 79 71 65 61] </nll_coeff_n>adpf 噪声方差曲线 x 轴点对应 y 轴值
<SigmaGreen index="1" type="double" size="[1 1]"> [4] </SigmaGreen>Gr 和 Gb 通道去噪半径,代码已固定为 4,无需改变此参数
<SigmaRedBlue index="1" type="double" size="[1 1]"> [4] </SigmaRedBlue>r 和 b 通道去噪半径,可选两种,1 种为 4,1 种为 3
<Gradient index="1" type="double" size="[1 1]"> [0.15] </Gradient>与曝光 gain 值相关的计算去噪力度的参数
<Offset index="1" type="double" size="[1 1]"> [0] </Offset>与曝光 gain 值相关的计算去噪力度的参数,fStrength = sqrtf( fGradient * fSensorGain ) + fOffset
<NlGains index="1" type="double" size="[1 4]"> [1 1 1 1] </NlGains>代表顺序为 R、GR、GB、B 通道其他模块 gain 值影响。一般保持 1 不变

 

<DeNoiseLevel index="1" type="struct" size="[1 2]">
<gains index="1" type="double" size="[1 6]"> [1 1.1 6 8 10 12] </gains>曝光 gain 等级,去噪跟随曝光 gain 值进行变化
<dlevel index="1" type="double" size="[1 6]"> [0 1 1 1 1 1] </dlevel>去噪力度等级设置。取值范围[0, 10]
</DeNoiseLevel>

5,ctk 包含ccm

串扰 Crosstalk原本应属于某一个像素的光子或光生电子有一定概率可以扩散到周围像素,形成一种噪声机制。

Crosstalk Remove 是ISP 中的一个功能模块,主要用于平衡 raw data 之间临近像素 Gr 和 Gb 之间的差异,能够有效防止 demosaic 插值算法产生的方格或其他类似 pattern

struct cifisp_ctk_config {
    unsigned short coeff[3][3];color correction 3x3 matrix
    unsigned short ct_offset_r;//r offset for the crosstalk correction matrix
    unsigned short ct_offset_g;//g offset for the crosstalk correction matrix
    unsigned short ct_offset_b;//b offset for the crosstalk correction matrix
} ;

ccm:通过标准的3X3的矩阵和矢量偏移量可完成颜色空间的线性矫正

由于相机的颜色匹配特性通常不满足卢瑟条件(也就是说sensor的RGB响应通常不是线性无关的),即相机的颜色匹配特性与CIE标准观察者之间并不存在线性关系。因此,我们需要某种方法来校正相机的特性,使其接近标准观察者。在实际的ISP处理中,这种方法通常以3x3矩阵的形式出现,称为色彩校正矩阵(colour correction matrix)

CCM的作用主要有两个:其一就是完成了sensor_RGB色彩空间到sRGB色彩空间的转换,其二是使得相机的颜色匹配特性满足卢瑟条件。

下图显示了串扰的原理,黄色像素周围的多个像素都有可能捕获一些本属于黄色的光子,这也是一种噪声来源。

6,flt

flt_chr_h_mode RB 通道水平方向去噪设置,取值范围 [0 3]
flt_chr_v_mode RB 通道垂直方向去噪设置,取值范围 [0 3]
flt_grn_stage1 G 通道低通滤波去噪模板等级,取值范围 [0 8]
flt_thresh_bl0 flt_thresh_bl1 flt_thresh_sh0 flt_thresh_sh1
梯度和分区间的阈值,这四个阈值,分割出 5 个区间,取值范围 [0 1023]
flt_fac_bl0 flt_fac_bl1 flt_fac_sh0 flt_fac_sh1 flt_fac_mid:
上面 5 个区间对应的锐化强度值,取值范围 [0 63]
由于demosaic 对原始信号进行了插值操作,会导致图像的噪声变为结构性噪声
因为lens shading correction 是在图像的上乘以一个gain,远离中心的地方gain 越大,因此会导致,gain大的位置,噪声也变得更大

对于单个像素点而言,其电子来自于两个方面,其一是光子打在感光部分,发生光电转换,产生的电荷数量与时间和光强度成正比,另外一个方面是则是电路的热效应激发电子迁移,上述的两个过程都可以看作对电子的计数过程(counting process),且该过程可以用泊松过程(poisson process)来进行建模;在单次拍照过程中,电荷完成积累之后,放大器从电容器读出电压,进行模拟放大,在读取电压的过程中由于电压的波动和读出电路,这个过程引入了读取噪声,该噪声服从高斯分布;模拟的电压信号通过模数转换器(analog digital converter,ADC)转换成数字信号,于是便得到了raw data,ADC转换的过程引入模数转换噪声,这个噪声服从高斯分布;从上面的描述来看,在数学模型上的raw图像的噪声主要包含泊松噪声和高斯噪声两类。

具体的:

1.1光电转换噪声:光电转换过程中,得到的电信号主要是转换效率α和时间t的函数,服从泊松分布。

1.2热噪声:该噪声由于传感器散热等原因激发电子,累积到电容,它是时间t和温度D的函数,服从泊松分布。

1.3读出噪声:在模拟放大器读取电压之前和读取电压之后,电压都存在一个随机的震动,这个过程我们采用一个加性高斯噪声来建模。

1.4量化噪声:在ADC做数模转换的过程中引入量化噪声,我们也可以用一个高斯分布来描述。

7,csm

通常在ISP的Pipeline中用到的CSC转换只有RGB2YUV

8,awb

人类视觉系统具有颜色恒常性的特点,因此人类对事物的观察可以不受到光源颜色的影响。但是图像传感器本身并不具有这种颜色恒常性的特点,因此,其在不同光线下拍摄到的图像,会受到光源颜色的影响而发生变化。例如在晴朗的天空下拍摄到的图像可能偏蓝,而在烛光下拍摄到的物体颜色会偏红。因此,为了消除光源颜色对于图像传感器成像的影响,自动白平衡功能就是模拟了人类视觉系统的颜色恒常性特点来消除光源颜色对图像的影响的

人眼:在不同的光源下,人眼看到的白色物体总是白色的
图像传感器:在不同光源下,白色物体成像在Sensor上是不一样的
因此需要把Sensor的RGB相应各乘以一个系数来使得RGB相等
R’ = R x R_Gain
G’ = G x G_Gain
B’ = B x B_Gain
使得 R’=G’=B’
/**
 * struct cifisp_awb_gain_config - Configuration used by auto white balance gain
 *
 * out_data_x = ( AWB_GEAIN_X * in_data + 128) >> 8
 */
struct cifisp_awb_gain_config {
    unsigned short gain_red;
    unsigned short gain_green_r;
    unsigned short gain_blue;
    unsigned short gain_green_b;
}
/**
 * struct cifisp_awb_meas_config - Configuration used by auto white balance
 *
 * @awb_wnd: white balance measurement window (in pixels)
 * @max_y: only pixels values < max_y contribute to awb measurement, set to 0 to disable this feature
 * @min_y: only pixels values > min_y contribute to awb measurement
 * @max_csum: Chrominance sum maximum value, only consider pixels with Cb+Cr, smaller than threshold for awb measurements
 * @min_c: Chrominance minimum value, only consider pixels with Cb/Cr each greater than threshold value for awb measurements
 * @frames: number of frames - 1 used for mean value calculation(ucFrames=0 means 1 Frame)
 * @awb_ref_cr: reference Cr value for AWB regulation, target for AWB
 * @awb_ref_cb: reference Cb value for AWB regulation, target for AWB
 */
struct cifisp_awb_meas_config {
    /*
     * Note: currently the h and v offsets are mapped to grid offsets
     */
    struct cifisp_window awb_wnd;
    enum cifisp_awb_mode_type awb_mode;//MANUAL/RGB/YCBCR
    unsigned char max_y;//白点边界图上 AWB_MAX_Y,br sr 后缀为,白点数量多和少时候对应插值边界
    unsigned char min_y;//白点边界图上 AWB_MIN_Y,br sr 后缀为,白点数量多和少时候对应插值边界
    unsigned char max_csum;//白点边界图上 AWB_MAX_CSUM,br sr 后缀为,白点数量多和少时候对应插值边界
    unsigned char min_c;//白点边界图上 AWB_MIN_C,br sr 后缀为,白点数量多和少时候对应插值边界
    unsigned char frames;
    unsigned char awb_ref_cr;//白点边界图上 AWB_REF_CR
    unsigned char awb_ref_cb;//白点边界图上 AWB_REF_CB
    bool enable_ymax_cmp;
}

9,bdm

光线中主要包含三种颜色信息,即R、G、B。但是由于像素只能感应光的亮度,不能感应光的颜色,同时为了减小硬件和资源的消耗,必须要使用一个滤光层,使得每个像素点只能感应到一种颜色的光。目前主要应用的滤光层是bayer GRBG格式。如下图所示:

这样,经过滤色板的作用之后,每个像素点只能感应到一种颜色。必须要找到一种方法来复原该像素点其它两个通道的信息,寻找该点另外两个通道的值的过程就是颜色插补的过程。由于图像是连续变化的,因此一个像素点的R、G、B的值应该是与周围的像素点相联系的,因此可以利用其周围像素点的值来获得该点其它两个通道的值。目前最常用的插补算法是利用该像素点周围像素的平均值来计算该点的插补值。

10,cproc

常用的色彩模式有HSB、RGB、CMYK、LAB、灰度、位图、双色调、索引颜色和多通道等,每个颜色模式都有其特殊的用途,最常用的是 RGB模式、 CMYK模式以及 HSB模式。
Saturation: 饱和度设置,取值范围[0-1.992]
Contrast: 对比度设置,取值范围[0-1.992]
Brightness: 明度设置,取值范围[-255 +255]
Hue: 色调设置,取值范围[-90 87.188]

HSB色彩模式H(hue)表示色相S(saturation)表示饱和度B(brightness)表示明度。HSB是色相、饱和度、明度的相应英文首字母缩写。平常表述颜色时,一般用的就是HSB模式,因为人眼看到的就是色相、饱和度、明度。

对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,差异范围越小代表对比越小。

换句人话来说:增强或减弱画面的明暗反差程度,增加对比度,以中间灰为分界线,暗的更暗,亮的更亮,明暗反差增强

一般来说,对比度越大,图像越清晰醒目,色彩也越鲜明艳丽;对比度越小,则会让整个画面都灰蒙蒙的。

11,gamma

伽马校正的最初起源是CRT屏幕的非线性,研究CRT电子枪的物理表明,电子枪的输入电压和输出光之间满足5.2幂函数关系,即荧光屏上显示的亮度正比于输入电压的5/2次方,这个指数被称为伽马。这种关系源于阴极、光栅和电子束之间的静电相互作用。由于对于输入信号的发光灰度,不是线性函数,而是指数函数,因此必需校正。

但是实际情况是,即便CRT显示是线性的,伽马校正依然是必须的,是因为人类视觉系统对于亮度的响应大致是成对数关系的,而不是线性的。人类视觉对低亮度变化的感觉比高亮度变化的感觉来的敏锐,当光强度小于1lux时,常人的视觉敏锐度会提高100倍t2118]。伽马校正就是为了校正这种亮度的非线性关系引入的一种传输函数。校正过程就是对图像的伽玛曲线进行编辑,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果,以对图像进行非线性色调编辑。由于视觉环境和显示设备特性的差异,伽马一般取2.2~2.5之间的值。当用于校正的伽马值大于1时,图像较亮的部分被压缩,较暗的部分被扩展;而伽马值小于1时,情况则刚好相反。

现在常用的伽马校正是利用查表法来实现的,即首先根据一个伽马值,将不同亮度范围的理想输出值在查找表中设定好,在处理图像的时候,只需要根据输入的亮度,既可以得到其理想的输出值。在进行伽马校正的同时,可以一定范围的抑制图像较暗部分的噪声值,并提高图像的对比度。还可以实现图像现显示精度的调整,比如从l0bit精度至8bit精度的调整。上图分别是未做Gamma校正的,下图是做了Gamma校正的。

enum cifisp_goc_mode {
    CIFISP_GOC_MODE_LOGARITHMIC,//对数曲线
    CIFISP_GOC_MODE_EQUIDISTANT//指数曲线
};

/**
 * struct cifisp_goc_config - Configuration used by Gamma Out correction
 *
 * @mode: goc mode
 * @gamma_y: gamma out curve y-axis for all color components
 */
struct cifisp_goc_config {
    enum cifisp_goc_mode mode;
    unsigned short gamma_y[CIFISP_GAMMA_OUT_MAX_SAMPLES];

//gamma_y,所有颜色组件的gamma输出曲线y轴, 必须按照(0-4095)范围填写 34 个点,且第 34 个点必须为 0,内部 gamma_x 坐标为 LOG 模式,非均匀等分

}

实例参考:利用gamma曲线调节对比度方法

先使用sensor的默认值画出一条这个sensor的默认gamma曲线,一般为一个对数曲线。由于gamma值为0~255,所以我们鉴定128为图像的明暗分界线,当然这只是假设,实际并没有严格的分界。如果我们要增加对比度,则需要调低默认曲线值低于128的点的值,调高默认曲线值高于128的点的值;要减小对比度,则需要调高默认曲线值低于128的点的值,调低默认曲线值高于128的点的值。

 

sde 模式尚未支持,不建议使能

12,afm/hst/aec 给ae stats提供config,非单独模块

13,缺失的模块,EE边缘增强,HDR,3DNR等

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值