安霸pipeline简述之YUV域的处理
YUV域处理模块的详细介绍:
YUV域的处理主要是rgb_to_yuv_matrix,chroma_scale,ASF(空域降噪),MCTF(时域降噪),SharpenB(锐化模块)。
RGB2YUV Matrix:此模块是设置RGB到YUV的矩阵。矩阵的格式为标准的3×3转换矩阵加上YUV的偏移量。
矩阵的设置要根据sensor input具体考虑,也可以根据显示器类型或应用类型具体定制。如果是Mono sensor,该矩阵需要设置为单位矩阵。
修改Y_offest可以修改画面的整体亮度,U /V_offest可以修改画面的色彩饱和度。这个矩阵一般不建议修改,使用默认的即可。
Chroma Scale:经过转换矩阵后,U、V分量经过Chroma Scale进行处理,本模块是对色彩信号整体的控制量,相当于饱和度的设置。
Chroma Scale成员是以亮度为索引,修改不同的亮度的色彩强度。当Chroma Scale成员全部设置为0时就是灰色图像。
ASF(空域降噪):经过转换矩阵后,Y分量也就是Luma信号首先经过一个降噪/加锐模块。在绝大多数情况下,此时会选择ASF模块进行降噪处理。
首先该模块会检测图像的边缘区和平坦区通过不同的滤波器对不同频率区域做相应处理。
当像素的边缘分值低于direction_decide_t0时,做iso滤波;当像素的边缘分值高于direction_decide_t1时,做dir滤波。对于分值在direction_decide_t0与direction_decide_t1之间的,
会用iso滤波与dir滤波融合来处理。
fir_specify的取值范围是2-4。当取2时,控制滤波强度参数是fir_strength_iso(iso滤波强度)和fir_strength_dir(dir滤波强度)。
当取3时,则是使用fir_per_dir_fir_dir_amount(iso滤波与dir滤波融合强度),fir_per_dir_fir_dir_strength(dir滤波强度),fir_per_dir_fir_iso_strength(iso滤波强度)。
当取4时,则是使用fir_coefs控制滤波强度。分别是一个平坦区和8个方向。
为了保持图像的细节和边缘,还提供了两个level_control。如下:
这是一组基于图像频率的level Control ,T0T1_div_high和T0T1_div_high_delta限定了高频率范围。T0T1_div_low和T0T1_div_low_delta限定了低频率范围。剩下的频率则属于中等频率 范围。,T0T1_div_high/mid/low_strength则是对应频率的降噪强度。值越大,降噪强度越小。
这是一组基于亮度的level_Control ,level_str_adjust_high和level_str_adjust_high_delta限定了高亮度范围。level_str_adjust_low和level_str_adjust_low_delta限定了低亮度范围。剩下的亮度范围则属于中等亮度范围。,level_str_adjust_high/mid/low_strength则是对应亮度的降噪强度。值越大,降噪强度越大。
最后的这些参数的作用是对以上三种降噪方式(fir_iso/dir、level_str_adjust_*、T0T1_div_*)做一个幅值得限定。
MCTF(时域降噪):MCTF模块是一个对图像的时域和空间域分别进行处理的模块。Y(亮度信号)、U、V(色彩信号)会一同进入这个模块做降噪处理。此模块主要分为一个时域降噪部分,一个空域降噪部分。
空间域降噪部分:
空域降噪有两路滤波,分别是isotropic和directional两路滤波,由边缘门限y/cb/cr_spat_smth_directional_decide_t0/t1来确定。
当图像分为iso区域和dir区域后, 分别用两组level_control来对这些区域做降噪处理。Y/cb/cr_spat_smth_dir*是对dir区域进行降噪的level_control,Y/cb/cr_spat_smth_iso*是对iso区域进行降噪的level_control。
y/cb/cr_advance_iso_noise_level和y/cb/cr_advance_iso_size是生效最快的的空域滤波器。noise_level、size越大,去噪越强。
时域降噪部分:
时域滤波器是通过一组基于motion的level_control去控制,如下:
y/cb/cr_t0/t1/t2/t3是四个运动强度的阈值,0-1表示运动强度最低的范围,这部分像素的时域降噪强度采用的是y/cb/cr_temporal_alpha0控制;1-t1表示较强的运动范围,这部分像素的时域降噪强度是由y/cb/cr_temporal_alpha1控制;后续同上。
运动检测部分:运动检测的功能是划分出画面中的静止区域,做时域降噪;另外的运动区域则做空域降噪。
Noise_base是很重要的判断运动的参数,值越大越容易被判定为静止。Motion_response的值越大,越容易被判断为运动区域。Slow_mo_sensitivity检测慢速运动的灵敏度,值越大,对慢速运动的检测越灵敏。
SharpenB(锐化模块):YUV信号在经过MCTF后就来到了此模块。此模块的作用有两个作用,一个作用是对图像进行锐化操作;另一个作用就是对锐化后的图像再进行一次降噪处理。
锐化从sharpening FIR开始,sharpening FIR中主要的参数如下:
Fir_specify是锐化滤波器的选择,取值范围是0-4,不同的取值会使用不同的锐化滤波器,见下图:
取0时,只对平坦区进行锐化操作,使用fir_strength_iso控制其锐化强度;取1时使用fir_cofes中的第一个卷积核,即控制平坦区的卷积核做锐化操作,也是只针对平坦区
取2时,会将图像分为平坦区和边缘区,两个区域划分的阈值由edge_thresh划分的,大于edge_thresh的部分将划为边缘区;小于edge_thresh的部分将划为平坦区。
取3时,使用Fir_per_dir_fir_iso_strengths控制平坦区的锐化强度,Fir_per_dir_fir_dir_strengths控制边缘区的锐化强度,介于平坦区和边缘区之间的区域则使用Fir_per_dir_fir_dir_amounts决定锐化强度。
取4时使用fir_coefs中的平坦区以及八个方向的卷积核去做锐化处理,八个方向分别为0°、90°、45°、135°、22.5°、67.5°、112.5°、157.5°。
sharpening FIR之后是一个index_scale模块,是一个level_control的锐化处理模块。其参数如下:
由于Non-Smooth Detec的引入,这个模块不建议调试。
index_scale之后是一个coring_table模块,是一个对上述两个模块做一个锐化输出的限幅模块。其参数如下:
Coring_table是对锐化输出的一个系数,锐化的输出会乘以coring_table,所以coring_table内的数值越大,锐化的强度就越高。
Fractional_bits也是一个控制锐化输出分数的分母,取1时,锐化不变,当大于1时并且随着其增大时,锐化的输出会越小。
coring_table之后是一个gain_scale模块
gain_scale之后是一个Min/Max模块
·
这两个level control常用method 14控制。分别控制弱边缘、边缘和强边缘的锐化强度。其中对边缘的划分以high、low的值做划分。
锐化中的降噪是Spatial FIR模块,主要参数如下:
这个子模块主要对输入的信号做一个降噪处理,用direction_decide_t0/t1判断像素属于还是低频区域。
当fir_specify去不同的值时,会使用不同的参数控制对高频区、低频区的降噪强度。
取0时,只对平坦区进行降噪操作,使用fir_strength_iso控制其降噪强度。
取1时使用fir_cofes中的第一个卷积核,即控制平坦区的卷积核做降噪操作,也是只针对平坦区。
取2时,使用fir_strength_iso控制低频区域的降噪强度,使用fir_strength_dir控制高频区域的降噪强度。
取3时,使用Fir_per_dir_fir_iso_strengths控制平坦区的降噪强度,Fir_per_dir_fir_dir_strengths控制边缘区的降噪强度,介于平坦区和边缘区之间的区域则使用Fir_per_dir_fir_dir_amounts决定降噪强度。
取4时使用fir_coefs中的平坦区以及八个方向的卷积核去做降噪处理,八个方向分别为0°、90°、45°、135°、22.5°、67.5°、112.5°、157.5°。
之后会对锐化和降噪做一个融合,通过Final Clamp判断门限以及做一个整体限幅,主要参数如下:
Edge_thresh为sharpening FIR子模块中的平坦区,边缘区的阈值。
Max_change_up5x5\Max_change_down5x5则是分别控制图像的overshoot(锐化后的白边白点)的强度和图像的undershoot(锐化后的黑边黑点)的强度。
Max_change_up\Max_change_down则是对锐化、降噪输出做一个总的限幅。