DM8168 HDVPSS EDE图像边缘细节增强

参考链接:

http://www.jeepxie.net/article/73228.html 

http://www.myexception.cn/image/912707.html

 http://www.myexception.cn/image/912719.html

http://www.myexception.cn/image/912697.html

专利:

 CN103841428A-用于图像和视频处理的内容自适应边缘和细节增强

 

1. 概述

放大后的图像看起来会变得平滑而让人感觉清晰度不够,EDE(边缘和细节增强器:Edge and Detail Enhancement)用来恢复因放大而失去的高频信息或者增强高频信息,以便使画面看得显得更加清晰一些,EDE模块的组成是:LTI(Luma Transit Improvement)、CTI(Chroma Transit Improvement)和2D Peaking、水平和垂直peaking。它还提供一些高级特征,包括Negative Coring用来避免放大噪声,因为通常噪声看起来也像是一个peaking、基于coring的肤色检测以便估计特别是在人皮肤上的轮廓(contouring)和噪声(noise flicker)。

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)在规定的范围内。

 

2. 特点

模块支持下面关键特征:

  • 图像格式:YUV444, 10-bit数据
  • LTI/CTI     

           LTI(灰度边缘锐化)、CTI(色度边缘锐化)增强边缘

           灰度和色度对齐,以获得更好的registration和清晰度

           基于Coring的肤色检测,用来估计轮廓和噪声

  • Peaking

           2D peaking和垂直peaking,用来增强细节

           2D peaking:Negative Coring非线性模块用来减少噪声

           2D peaking:5x5 peaking滤波器系数可编程

           垂直peaking:软化的limiting,减少剪切造成的缺陷

  • 噪声鲁棒性

           Negative Noise Coring阻止放大噪声

           阻止剪切和轮廓化造成的缺陷

 

3. 功能描述

图87显示了EDE模块的方块图,EDE模块由LTI、水平Peaking、CTI、线性缓冲和peaking模块组成。输入数据格式是YCbCr444,输出数据格式也是YCbCr444。

DM8168 HDVPSS EDE图像边缘细节增强(一)

上图中:

  • LTI锐化Y边缘
  • 水平peaking提升水平方向的peak
  • CTI锐化色度边缘,并将色度的变化边缘与灰度变化边缘对齐
  • 行缓冲存储数据用于peaking模块的垂直处理
  • Peaking模块用于在峰值的2D或垂直位置的边缘
  • 剪切模块剪切Y和C值用于保证输出数据在合理范围之内

3.1 操作原理

图88描述了LTI和peaking模块锐化图像示意

DM8168 HDVPSS EDE图像边缘细节增强(一)

为了执行水平peaking或LTI,首先在一个搜索窗口里搜索水平突变。搜索窗口是26个像素,灰度变化的起始点(min/max)和终点(min/max)与中心值(均值),沿着斜坡,LTI算法发挥作用,基本方法是朝最大值移动斜坡的上半部分,朝最小值方向移动斜坡的下半部分,在边缘(起点和终点)使用Peaking,在其他部分啥也不做,LTI和peaking的增益由一个增益曲线来定义,斜坡越窄增益越强,斜坡约宽,增益越弱,除了规则的Peaking和LTI外,可变的基于核的肤色检测算法用来估计轮廓和噪声。

图89描述了CTI的算法,除了与LTI一样外,CTI搬移色度的斜坡中心到灰度的斜坡中心位置,以减少灰度和色度位置的失配。

DM8168 HDVPSS EDE图像边缘细节增强(一)

CTI算法类似于LTI,有自己的独立的配置参数,水平Peaking并不应用于色度数据,用户能选择是否将色度和灰度的变化位置对齐,如果它们的中心不是匹配的,这一点我们在模拟视频源中经常看到,当这个特征被使能的时候,色度的变化中心将被搬移到灰度变化中心一致的位置上,搬移数量的设置由CTI对齐增益来确定。

 

2D peaking模块执行5x5的2D peaking,5x5 peaking滤波器系数是可编程的,由于系数矩阵是对称的,所以它们当中有8个系数需要编程。

在peaking期间,通常噪声也会被放大,Negative Coring在Coring区域引入了一个负的增益,这样,在输入端噪声能被消除,Coring阈值依赖于对噪声的测量,软化的limiting限制的设计减少了clipping造成瑕疵,比如极强光和极弱光。

在EDE模块中,用户可以选择2D peaking或垂直peaking,垂直peaking跨越5行的5个像素上,在peaking像素上,peaking仅应用于灰度,在peak附近的斜坡上,peaking应用于灰度和色度。

 

 

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选择。

图100显示了2D peaking方块图,peaking应用于Y和C,5x5增益矩阵的细节、非线性函数、C peaking增益函数随后说明。

图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的C peaking增益函数及对应的寄存器名称定义。

  • 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在最大值和最小值定义的范围内

 

 

 

             

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值