DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1508|回复: 0
打印 上一主题 下一主题

[待整理] 解读HEVC视频标准的环内滤波

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 21:55:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1.0 引言
         
        高效视频编码(HEVC)是H.264/MPEG-4 AVC(高级视频编码)的一种升级版视频压缩标准(即ISO/IEC 23008-2 MPEG-H第2部分和ITU-T H.265)是由ISO/IEC动态图像专家组(MPEG)和ITU-T视频编码专家组(VCEG)共同编写的。与业界标准H.264相比,HEVC能够以几乎同样的视频质量实现半比特速率,并且有望在视频应用中得到广泛运用,其中包括:手机、广播、机顶盒、视频会议、视频监控、车载等。
       
        下图显示了带有环路滤波的HEVC视频解码器结构图,突出显示的即为环路滤波。如图所示,它是一个可去除视频编码过程中块效应的两个级组成的级联,即去块效应滤波(DBLK)和采样自适应偏移(SAO)滤波。接下来的两部分内容将详细描述这个级。
       
       
        图1 HEVC视频解码器结构图
         
        2.0 去块效应滤波(DBLK)
       
        本部分将阐述去块效应滤波,如HEVC视频标准[1]所述。去块效应滤滤器运行可大体可分为两部分:
       
        1. 滤波器边缘上的边界滤波强度(aka BS)计算
        2. 滤波器的实际运行
       
        纵观整个去块效应滤波器运行,本文献采用了以下惯例:Q像素位于“纵向”滤波器的右侧,P像素位于“纵向”滤波器左侧。同样,Q属于“横向”滤波器边缘下方的像素,P属于“横向”滤波器边缘上方的像素。
       
       
        图2 环内去块效应滤波中称为惯例的相邻像素
       
        2.1 滤波器边缘强度(aka BS)
       
        边界滤波强度[hor/ver][xpos][ypos]计算是在一个8x8网格上完成的,取值0、1、2,如下图所示:
       
        虽然在8x8网格的每个像素边缘上都有滤波器(8x8结构包括4像素边缘),但就一个4像素段的所有像素而言,边界滤波强度计算的属性可以被组合。就强度计算而言,我们假设每个4像素段作为一个级。请注意,边界滤波强度计算取决于当前、左侧和顶部LCU LCUinfo。
       
       
        图3 边界滤波强度(BS)结构图,在8x8网格中显示了边缘及其编号
         
        2.1.1 边界滤波强度功能概述
       
        边界滤波强度计算是在一个8x8网格上完成的,设置图片为0,且分片边界(slice boundarie) (if loop_filter_across_slice_enabled_flag = 0),Tile边界(loop_filter_across_tile_enabled_flag = 0).
       
        只有8x8像素边界经过滤波,即预测单元(PU)和/或转换单元(TU)边界,滤波过程如下。
       
       
        图4 PU和TU部分的边界滤波强度(BS)与边缘调谐
         
        边界滤波强度推导规则:
       
       
        感兴趣的读者可参见HEVC规范,了解以下内容:
       
        1. 边界滤波强度的TU边界滤波强度推导:8.7.2.1章节
        2. 边界滤波强度的PU边界滤波强度推导:8.7.2.2章节
        3. 边界滤波强度推导:8.7.2.3章节
        2.1.2 色度边界滤波强度推导
       
        只有8x8色度像素网格上的PU和/或TU边界得到滤波。色度边界滤波强度值源自亮度边界滤波强度值。就色度滤波器4:2:0 (q0, p0)采样而言,从相应的(2q0, 2p0)亮度采样(即BS{Hor/ver}[xpos/2][ypos/2]图中的2因素下行采样)获取边界滤波强度。
       
        图5 色度边界滤波强度映射:匹配到8x8网格然后除以2
        2.2 滤波器运行
       
        该部分将阐述去除HEVC视频标准中特定块效应的实际滤波。
       
        2.2.1 滤波器的阶数
       
        就HEVC而言,规定的滤波器阶数为帧级(不是LCU级),如下所示:
       
        1. 在整个帧处理过程中,对所有块的竖向边缘都进行了H滤波。
        2. 在整个帧处理过程中,对所有块的横向边缘都进行了V滤波。
       
        滤波是完全独立的8x8滤波段,如图6所示:
       
        图6 8x8块级独立滤波
        是否需要亮度/色度(开启/关闭判定)滤波、滤波级别(弱滤波/强滤波)以及最终的实际滤波运行将在下面章节阐述。
        2.2.2 亮度滤波器开启/关闭以及弱/强滤波的判定
       
        滤波器开/关判定和亮度强/弱判定是根据上图所示的四个行列段进行的。
        如果边界滤波强度等于0,则按顺序进行以下步骤:
       
        qPL= ((QPP+QPQ+1)>>1), QPP 和 QPQ 为亮度 QPs
        &beta; = BETA_TABLE[Clip3(0,51,qPL+(beta_offset_div2<<1)) ]
        tc = TC_TABLE[Clip3(0,53,qPL+2*(BS-1)+(tc_offset_div2<<1)) ]
        dp0 = |p2,0-2*p1,0+p0,0| ; dp3 =|p2,3-2*p1,3+p0,3|
        dq0 = |q2,0-2*q1,0+q0,0| ; dq3 = |q2,3-2*q1,3+q0,3|
        dpq0 = dp0+dq0 ; dpq3 = dp3+dq3
        dp = dp0+dp3 ; dq = dq0+dq3
        dE = dEp = dEq = 0
        如果 (dpq0 + dpq3 < &beta;) //滤波器开/关判定
        If ( (2*dpq0 <(&beta;>>2)) && ( |p3,0- p0,0| + |q3,0- q0,0| <(&beta;>>3)) && ( | p0,0- q0,0| <((5*tc+1)>>1))) dSam0 = 1
        If ( (2*dpq3 <(&beta;>>2)) && ( |p3,3- p0,3| + |q3,3- q0,3| <(&beta;>>3)) && ( | p0,3- q0,3| <((5*tc+1)>>1))) dSam3 = 1
        如果 (dSam0 ==1 && dSam3 ==1) dE = 2 (strong filter); 其他 dE = 1 (弱滤波);
        如果 (dp < ((&beta;+(&beta;>>1))>>3) ) dEp = 1 //对滤波采样的数量进行弱滤波
        If (dq < ((&beta;+(&beta;>>1))>>3) ) dEq = 1 //对滤波采样的数量进行弱滤波
       
       
        图7 去块效应滤波中滤波开/关以及滤波强度判定中的像素使用
       
        表1 qp、tc和&beta;(BETA_TABLE和TC_TABLE)之间的关系
        2.2.3 亮度强滤波以及弱滤波
       
        2.2.3.1 亮度强滤波机制
       
        4像素部分共享同一个判定(dE, dEp, dEq)
       
        如果(dE == 2),则进行强滤波以修改每端的三个像素
       
        p0' = Clip3( p0?2*tc, p0+2*tc, ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3 )
        p1' = Clip3( p1?2*tc, p1+2*tc, ( p2 + p1 + p0 + q0 + 2 ) >> 2 )
        p2' = Clip3( p2?2*tc, p2+2*tc, ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3 )
        q0' = Clip3( q0?2*tc, q0+2*tc, ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3 )
        q1' = Clip3( q1?2*tc, q1+2*tc, ( p0 + q0 + q1 + q2 + 2 ) >> 2 )
        q2' = Clip3( q2?2*tc, q2+2*tc, ( p0 + q0 + q1 + 3*q2 + 2*q3 + 4 ) >> 3 )
       
        图8 亮度DBLK滤波和边缘周围像素点的使用
         
        2.2.3.2 亮度弱滤波机制
       
        4像素部分共享同一个判定(dE, dEp, dEq)
        如果(dE == 1),则进行弱滤波以修改每端的一个或二个像素
        D = (9*(q0&ndash; p0)-3*(q1&ndash;p1)+8)>>4
        如果 (aBS(&Delta;) < tc*10),则顺序进行以下步骤:
        滤波采样值p0’和q0’规定如下:
        &Delta; = Clip3(-tc,tc,&Delta;)
        p0’ = Clip1Y(p0+&Delta;)
        q0’ = Clip1Y(q0-&Delta;)
        If dEp等于1,则滤波采样值p1’规定如下:
        &Delta;p = Clip3(-(tc>>1),tc>>1,(((p2+p0+1)>>1)&ndash;p1+&Delta;)>>1)
        p1’ = Clip1Y(p1+&Delta;p)
        if dEq等于1,则滤波采样值q1’规定如下:
        &Delta;q = Clip3(-(tc>>1),tc>>1,(((q2+q0+1)>>1)&ndash;q1&ndash;&Delta;)>>1)
        q1’ = Clip1Y(q1+&Delta;q))
         
        2.2.4 色度滤波
       
        只有8x8色度像素网格上的PU和/或TU边界得到滤波
        边界滤波强度源自亮度(对每个方向进行2因素下行采样)(请参见色度边界滤波强度推导小节)
       
        qPI = ( (( QPQ + QPP + 1 ) >> 1) + cqp_offset ), 其中此处的cqp_offset分别代表组件Cb/U和Cr/V的pic_cb_qp_offset和pic_cr_qp_offset。
        下表的qPI包括了qPC
         
       
        图9 色度DBLK滤波和边缘周围像素点的使用
       
        表2 QPc向qPi转换
        tc = TC_TABLE[Clip3(0,53,qPC+2*(BS-1)+(tc_offset_div2<<1))]
        BS > 1时,则Chroma滤波器将被开启
        &Delta; = Clip3(-tC,tC,((((q0&ndash;p0)<<2)+p1&ndash;q1+4)>>3))
        p0’ = Clip1C(p0+&Delta;)
        q0’ = Clip1C(q0-&Delta;)
        2.2.5 IPCM和TQByapss处理
       
        在边缘包含IPCM CU且pcm_loop_filter_disable_flag = 0 OR TQByapss(无损耗)的情况下,像素(位于IPCM/TQBypass内部)将保持无滤波状态,而另外的一半则经过滤波处理,这就是说仅在边缘的一侧进行了滤波处理。我们通常采用以下两种方法完成:
       
        1. 跳过一半的像素进行滤波处理
        2. 在两端进行滤波,然后对包含IPCM/TQBypass CU的一半进行Recon像素替换。
       
        2.3 DBLK语法元素(syntax element)
       
        下面的语法元素会影响DBLK的运行,现以表格形式总结如下(带有范围和描述栏)。
       
        表3 DBLK语法元素
       
        3.0 SAO解码器滤波
       
        本部分将对SAO滤波进行阐述,请参见HEVC视频标准[1]。这是一个将偏移添加到去块效应像素值的过程,这一添加过程是根据SAO类型(即根据边缘方向/边缘形状(边缘偏移aka EO)以及像素水平(频带偏移aka BO)或无变化(OFF))进行的。
       
        偏移范围具有下列特征:
       
        1. 8bpp的偏移幅度为[0, 7],10bpp的偏移幅度为[0, 31]。
        2. 在BO情况下,发送信号实现非0幅度偏移。
        3. 在EO情况下,根据边缘类型(1和2为(+)、3和4为(-))对信号进行作出推断。
       
        3.1 边缘偏移(EO)
       
        边缘偏移根据边缘方向可以分为四类(0度、90度、135度和45度),具体情况请参见下图。
       
        图10 边缘偏移类型,即0度、90度、135度和45度
        就选定的方向而言,与四个边缘形状一致的偏移有四个(即种类/边缘指数)。就边缘偏移而言,边缘指数被称为SAO子类型。下图显示了类别的不同类型。
       
        图11 边缘偏移类型/边缘指标和像素映射
       
        图12 边缘偏移类别选择逻辑或公式
         
        如果偏移值属于给定的边缘偏移类型和种类的话,那么该偏移值就会被添加到每个去块效应像素值当中去,否则像素值则保持不变。
        3.1.1 频带偏移(BO)
       
        整个像素范围(8bpp为0-255)被平均分为了32个频带,如下图所示。
       
        起始频带的后续频带中有四种偏移。起始频带编码连同四个偏移值被发送。起始频带位置还被称为频带偏移的SAO子类型。
       
        如果偏移值属于给定的1/4频带范围,那么该偏移值就会被添加到每个去块效应像素值当中去,否则像素值则保持不变。
       
        图13 频带分类(像素范围被分为32个频带)
         
        3.1.2 SAO语法元素
       
        影响SAO-解码器运行的语法元素如下表总结所示(包括范围和描述)。
       
       
        表4 SAO语法元素
         
        3.1.3 边界条件处理
       
        需要条件处理的有三种条件:
       
        1. 图像边界(上、下、左、右)
        2. 分片边界以及slice_loop_filter_across_slices_enabled_flag = 0。跨跃分片滤波适用于给定分片边界的左侧和上侧边缘(并非所有方向)
        3. 瓦片边界和loop_filter_across_tiles_enabled_flag = 0
       
        在上述情况中,分片边界沿线的像素未被处理,具体取决于SAO类型。
       
        就BO而言,所有像素都将被处理。
       
        就EO而言,像素有效性将根据SAO类型进行,如果在边界条件下像素无效,其将跳过进行处理(即0漂移)。
       
        下图对边界条件处理进行了描述。
       
       
        图14 SAO解码器的边界处理实例
         
        3.1.4 条件处理
       
        在下列条件时,SAO滤波将关闭。
       
        SAO类型idx = OFF
        CU类型 = PCM且环路滤波器被描述为PCM类型
        CU类型 = TQBypss(无损耗)
        限幅电平SAO = OFF
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-5-22 18:04 , 耗时 0.093485 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表