本帖最后由 market1234 于 2014-7-15 17:09 编辑
DM8168 HDVPSS EDE图像边缘细节增强 1.边缘细节增强器(EDE) 1.1概述 放大后的图像看起来会变得平滑而让人感觉清晰度不够,EDE(边缘和细节增强器:Edge and Detail Enhancement)用来恢复因放大而失去的高频信息或者增强高频信息,以便使画面看得显得更加清晰一些,EDE模块的组成是:LTI(Luma Transit Improvement)、CTI(ChromaTransit Improvement)和2D Peaking、水平和垂直peaking。它还提供一些高级特征,包括Negative Coring用来避免放大噪声,因为通常噪声看起来也像是一个peaking、基于coring的肤色检测以便估计特别是在人皮肤上的轮廓(contouring)和噪声(noiseflicker)。 LTI(CTI)和peaking都是为了锐化图像。LTI(CTI)通常使用非线性技术以改善灰度和色度的边缘变化。Peaking通常使用线性技术(一般是FIR滤波)来提升图像中的高频信息。LTI(CTI)并不是像Peaking那样提升(boost)高频信息而是产生(create)高频信息以使画面看得更加清晰。 尽管LTI(CTI)都会使画面尖锐,但是它们通常应用于不同目的,比如像人脸这样相对平缓变化的区域,一般使用Peaking,而LTI(CTI)一般更倾向于应用于强烈变化的边缘区域,因为LTI(CTI)会导致尖锐的变化边缘和轮廓效果。 在我们的设计里,除了锐化色度变化边缘,CTI还能使色度跳变中心向灰度跳变中心移动,以消除灰度和色度跳变位置的失配。 在EDE中的peaking模块能是2D-peaking或者垂直peaking,2D-peaking可应用于灰度和色度,而垂直peaking仅应用于灰度,在2D-peaking中使用5x5的FIR滤波器,所有系数用户可编程,滤波输出值被剪切(clip)在规定的范围内。 1.1特点 模块支持下面关键特征:
- 图像格式: YUV4:4:4,10-bit数据;
- LTI/CTI
LTI(灰度边缘锐化)、CTI(色度边缘锐化)增强边缘 灰度和色度对齐,以获得更好的registration和清晰度 基于Coring的肤色检测,用来估计轮廓和噪声 2D peaking和垂直peaking,用来增强细节 2D peaking:Negative Coring非线性模块用来减少噪声 2D peaking:5x5peaking滤波器系数可编程 垂直peaking:软化的limiting,减少剪切造成的缺陷 Negative Noise Coring阻止放大噪声 阻止剪切和轮廓化造成的缺陷 1.1功能描述 图87显示了EDE模块的方块图,EDE模块由LTI、水平Peaking、CTI、线性缓冲和peaking模块组成。输入数据格式是YCbCr444,输出数据格式也是YCbCr444。
- LTI锐化Y边缘
- 水平peaking提升水平方向的peak
- CTI锐化色度边缘,并将色度的变化边缘与灰度变化边缘对齐
- 行缓冲存储数据用于peaking模块的垂直处理
- Peaking模块用于在峰值的2D或垂直位置的边缘
- 剪切模块剪切Y和C值用于保证输出数据在合理范围之内
1.1.1操作原理 图88描述了LTI和peaking模块锐化图像示意
为了执行水平peaking或LTI,首先在一个搜索窗口里搜索水平突变。搜索窗口是26个像素,灰度变化的起始点(min/max)和终点(min/max)与中心值(均值),沿着斜坡,LTI算法发挥作用,基本方法是朝最大值移动斜坡的上半部分,朝最小值方向移动斜坡的下半部分,在边缘(起点和终点)使用Peaking,在其他部分啥也不做,LTI和peaking的增益由一个增益曲线来定义,斜坡越窄增益越强,斜坡约宽,增益越弱,除了规则的Peaking和LTI外,可变的基于核的肤色检测算法用来估计轮廓和噪声。 图89描述了CTI的算法,除了与LTI一样外,CTI搬移色度的斜坡中心到灰度的斜坡中心位置,以减少灰度和色度位置的失配。
CTI算法类似于LTI,有自己的独立的配置参数,水平Peaking并不应用于色度数据,用户能选择是否将色度和灰度的变化位置对齐,如果它们的中心不是匹配的,这一点我们在模拟视频源中经常看到,当这个特征被使能的时候,色度的变化中心将被搬移到灰度变化中心一致的位置上,搬移数量的设置由CTI对齐增益来确定。 2D peaking模块执行5x5的2Dpeaking,5x5peaking滤波器系数是可编程的,由于系数矩阵是对称的,所以它们当中有8个系数需要编程。 在peaking期间,通常噪声也会被放大,NegativeCoring在Coring区域引入了一个负的增益,这样,在输入端噪声能被消除,Coring阈值依赖于对噪声的测量,软化的limiting限制的设计减少了clipping造成瑕疵,比如极强光和极弱光。 在EDE模块中,用户可以选择2Dpeaking或垂直peaking,垂直peaking跨越5行的5个像素上,在peaking像素上,peaking仅应用于灰度,在peak附近的斜坡上,peaking应用于灰度和色度。 8.3.2子系统概述 LTI 图90显示了一个斜坡边缘的定义。在peak处的像素定义为斜坡(LTI)边缘,如果像素值得改变小于cfg_lti_uni_y_th,像素被看作斜坡斜坡(LTI)边缘,如图中所描述,LTI改善作用并不应用与距离长于cfg_lti_len_max的Y斜坡。
图91定义LTI增益,LTI-gain = 0意味着LTI不起作用。
- cfg_lti_gain_max:定义最大LTI_gain
- cfg_lti_gain_slope_shift:定义函数的斜率
- cfg_lti_gain_th:定义斜坡阈值
水平Peaking 图92显示了水平peaking,在水平peak处,像素值被提升。
图93显示了水平peaking模块的方块图,peak检测器模块发现水平peak区域,计算提升数值。
- cfg_lti_gain_x8:定义水平peaking的增益。
- cfg_lti_pk_max_pos和cfg_lti_pk_max_neg:定义剪切(clip)的最大值和最小值。
- cfg_lti_pk_enable:使能水平peaking功能。
CTI CTI操作于YCbCr444域,图94显示输入色度的斜坡边缘的定义,在peak处的像素被定义为斜坡(CTI)边缘,如果像素值得改变小于cfg_cti_uni_y_th,像素被看作斜坡斜坡(CTI)边缘,如图中所描述,CTI改善作用并不应用与距离长于cfg_cti_len_max的Y斜坡。
图95定义色度锐化斜率的增益,CTI_gain= 0意味着LTI不起作用。
- cfg_cti_gain_max:定义最大CTI_gain
- cfg_cti_gain_slope_shift:定义函数的斜率
- cfg_cti_gain_th:定义斜坡阈值
图96显示了输入参考Y的斜坡边缘的定义,在peak处的像素定义为Y斜坡的边缘,如果像素值改变小于cfg_cti_uni_ref_th,这个像素被看作Y斜坡的边缘,如图中96所示。
图97显示了将C变化中心与Y变化中心对齐的增益,Gain=0意味着对C的处理与对Y的处理是一样的。
- cfg_cti_adj_decay_slope_shift:定义函数斜率
- cfg_cti_adj_decay_th:定义斜坡的阈值
在图97中,水平轴“distance_fr_C_edge”代表从C斜坡边缘到Y中心的距离。
图98显示“distance_fr_C_edge”定义,距离测量是在色度域。
Peaking 图99显示peaking的方块图,peaking模块是由2D-peaking和垂直-peaking组成,输出来自二者其一,由cfg_pk_alg选择。
2D Peaking 图100显示了2D peaking方块图,peaking应用于Y和C,5x5增益矩阵的细节、非线性函数、Cpeaking增益函数随后说明。
图101显示了5x5系数矩阵的对应寄存器名称,pk_hpf_gain0到pk_hpf_gain8。
图102显示了2D-peaking的非线性函数及对应的寄存器名称。
- pk_ytbl_slope_p_low_x16和pk_ytbl_slope_p_high_x16:定义输入为正时,函数的斜率
- pk_ytbl_slope_n_low_x16和pk_ytbl_slope_n_high_x16:定义输入为负时,函数的斜率
- pk_ytbl_th_p_low_x16和pk_ytbl_th_p_high_x16:定义输入为正时,斜坡的阈值
- pk_ytbl_th_p_low_x16:必须大于等于0
- pk_ytbl_th_p_low_x16:必须小于等于pk_ytbl_th_p_high_x16
- pk_ytbl_th_n_low_x16和pk_ytbl_th_n_high_x16:定义输入为负的时候,斜坡阈值
- pk_ytbl_th_n_low_x16:必须小于等于0
- pk_ytbl_th_n_low_x16:必须大于等于pk_ytbl_th_n_high_x16
- cfg_peaking_y_max和cfg_peaking_y_min:定义函数的最大值和最小值
- cfg_peaking_y_table_neg_core_limit:设置核化(coring)操作的负极限点(negayive limit point
图103显示了2D peaking的Cpeaking增益函数及对应的寄存器名称定义。
- cfg_peaking_c_slope_p_x512:定义输入为正时的斜率
- cfg_peaking_c_slope_n_x512:定义输入为负时的斜率
- cfg_peaking_c_gain_max_x512和cfg_peaking_c_gain_min_x512定义函数的最大值和最小值
- cfg_peaking_c_gain_max_x512:必须大于等于512
- cfg_peaking_c_gain_min_x512:必须大于等于512
垂直Peaking 图104显示了在peak位置和邻近peak的一个像素处的垂直peaking处理,在peak位置,peaking仅应用于Y,在peak周围,peaking处理则应用于Y和C
图105显示垂直peaking处理的方块图
- 水平边缘检测器计算垂直边缘可信度索引
- Peak检测器计算提升的数值,且提升的数值会被剪切在pk_v_diff_y_max之内
- difference-from-neighbor模块计算与邻居像素的数据值的差
水平边缘增益函书和斜坡增益函数解释如下。
图106显示垂直peaking的水平边缘增益函数、对应的寄存器名。在图106中,pk_gain_hor_slope定义函数的斜率
图107显示了垂直peaking的斜坡增益函数及对应的寄存器名称:
- pk_gain_edge_max_y定义函数的最大值
- pk_gain_edge_slope_y定义函数的最大值
剪切(Clip) 图108显示了clip模块的函数,Y、Cb、Cr的值按照寄存器设计来剪切。
- clip_max_y和clip_min_y:定义剪切Y在最大值和最小值定义的范围内
- clip_max_c和clip_min_c:定义剪切C在最大值和最小值定义的范围内
|