OBMC的前世(H.263)

近日看《新一代视频压缩标准H264_AVC_毕厚杰》的时候,作者在书中提到H.263“采用OBMC运动补偿方式,以减少方块效应”。我对OBMC运动补偿方式不太了解,上网搜了一下发现H.266里也有这个玩意儿,可惜我看不大懂H.266,连H.265都没怎么了解过的小白伤不起(苦笑……)。 于是,为了理解OBMC运动补偿方式是怎么减少方块效应的,我搜出了尘封多年的H.263标准(十七八年前的标准)。
以下H.263中OBMC的内容参考自《H263协议中文版》附录F.3:对亮度的重叠运动补偿,参考网址为:
http://www.docin.com/p-50403691.html

H.263的宏块由4个8x8的亮度块和2个8x8的色度块(YUV420格式)组成。下面讨论的OBMC作用对象为8x8的亮度块。
当前8x8亮度预测块中的每个像素的预测值等于3个参考像素(1个当前像素,2个参考像素)的加权平均值。由此看出,OBMC之所以能减少方块效应,是因为它把当前块和邻块做了加权平均处理,从而减少了块效应。
块效应主要是由DCT变换和量化导致的,DCT变换减少了块与块之间的相关性,因此相邻块之间存在量化差异。再者,量化粗糙时,块边缘的大量高频信息丢失,造成重建图象中块的边界处出现不连续的跳变。
(关于块效应的内容参考自 https://baike.baidu.com/item/块效应/4121886?fr=aladdin)

下面继续介绍H.263中的OBMC运动补偿方式:

1.选取参考像素

上述示意图用于说明如何选取2个参考像素。图中大方块表示block8x8的亮度块,中间的亮度块为当前块。参照箭头示意可知,当前块左上角的4x4块的像素参考左边和上边的2个8x8块中的像素,其他3个4x4块参考方式同理可得。

2.加权值示意图

注意:上述加权值示意图参考自豆丁网 http://www.docin.com/p-50403691.html

3.计算公式
(x,y)表示以整像素为单位的图像中的位置。
(i,j)表示以半像素为单位的图像中的位置。
MV_x(n)和MV_y(n)表示以半像素为单位的运动矢量的方向分量。
我觉得x,y的取值范围应为0,1,2,…,7,即为在block8x8中相对左上角的坐标,而非整幅图像中的坐标。不然下面的计算公式很难说得通。
8x8亮度预测块中像素值的公式为:
P(x,y) = ( q(i,j)H0(x,y) + r(i,j)H1(x,y) + s(i,j)H2(x,y) + 4) / 8.
(小提示:“+4”是为了整数运算中实现四舍五入取整)
其中,q(i,j) , r(i,j) , s(i,j)是和H0,H1,H2分别对应的参考图像中的参考像素。
q(i,j) = p(2
x+MV_x0 , 2
y+MV_y0) ,
r(i,j) = p(2
x+MV_x1, 2y+MV_y1) ,
q(i,j) = p(2
x+MV_x2, 2*y+MV_y2) ,.
注意:参考图像应为前向帧,要不怎么能参考右边和下边的block8x8呢,毕竟当前帧的数据还没有出来嘛。看到MV(运动矢量)的时候要醒目点哟。

猜你喜欢

转载自blog.csdn.net/allen_sdz/article/details/83895161