织梦CMS - 轻松建站从此开始!

罗索

H.264解码器滤波模块分析

jackyhwei 发布于 2010-03-01 20:10 点击:次 
基于块的帧内和帧间预测残差的DCT变换量化和树状运动补偿造成解码后的图像出现方块效应,由此在解码器中要加入去块效应滤波功能。H.264协议规定的滤波方法是环路滤波器。
TAG:

        基于块的帧内和帧间预测残差的DCT变换量化和树状运动补偿造成解码后的图像出现方块效应,由此在解码器中要加入去块效应滤波功能。H.264协议规定的滤波方法是环路滤波器。尽管滤波器能够极大提高图像质量和节省码流,但其算法复杂度非常高。究其原因是它具有高度的自适应性,其自适应性体现在几个层面:

Ø         边界层的自适应滤波
根据相邻块的编码模式和编码条件,来确定滤波的强度BS(Boundary Strength)。边界强度取值在0-4之间,其中0表示不进行滤波,4表示最强的滤波。色度块的BS直接采用相应的亮度块的BS值。
Ø         像素层的自适应滤波
只有在同时满足下列条件时才对相邻块的像素p2, p1, p0, q0, q1, q2 中的样值进行滤波:
1) BS > 0;
2) | p0 - q0|<a && | p1 - p0|<b && | q1- q0|<b
a和b是H.264协议规定的域值,它们随块p和块q的量化系数QP的平均值的增加而增大。可以理解,因为量化参数大,即量化步长大,造成的量化误差大,从而形成的块效应也必然大些,所以a和b的值该取更大,以对更多的样值点进行滤波。a和b的获取是通过查表来的,为了查表,定义了有索引indexa和indexb。
Ø         片层的自适应滤波
为了进一步优化重建视频的主观质量,协议在片头语法中定义了两个偏移量OffsetA和OffsetB,通过OffsetA和OffsetB来调整a和 b查表的索引值indexa和indexb,从而达到进一步调整a和 b,使得全局滤波强度更合理。
滤波实现:
宏块层的边界滤波顺序
1.         按从左到右顺序对亮度分量的四条垂直边缘进行滤波;
2.         按从上到下顺序对亮度分量的四条水平边缘进行滤波;
3.         按从左到右顺序对每个色度分量的两条垂直边缘进行滤波;
4.         按从上到下顺序对每个色度分量的两条水平边缘进行滤波;
然后根据滤波强度值来选择不同抽头的滤波器,修正边界两边的像素样值。
另:当宏块边界两边属于不同片时,是否滤波由码流语法元素disable_deblocking_filter_idc决定:
disable_deblocking_filter_idc = 0          都滤波
disable_deblocking_filter_idc = 1          都不滤波
disable_deblocking_filter_idc = 2          宏块边界不滤波,但内部要滤波
宏块左边界 是图像左边界;
         是disable_deblocking_filter_idc=1;
         是disable_deblocking_filter_idc=2且左宏块不可用;
         有一个成立就不滤波
宏块上边界 是图像上边界;
       是帧场自适应,图像上边界,场宏块;
       是帧场自适应,图像上边界,帧宏块,顶场;
       是disable_deblocking_filter_idc=1;
       是disable_deblocking_filter_idc=2且上宏块不可用;
       有一个成立就不滤波
滤波器算法实现流程:
        对于MBAFF解码的滤波,关键是左上相邻宏块与当前宏块帧场属性的差异,对于上场下帧的情况,上边界需要做二次滤波。
        不管是帧还是场,处理时牢牢抓住其本质,前者逐行取点,后者隔行取点,顶对顶,底对底,不论是当前宏块还是相邻的参考宏块,都是按图像象素实际物理位置来取的。
(jacky)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201003/8627.html]
本文出处:网络博客 作者:jacky
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容