一种用于SVAC标准的图像预测方法
技术领域
本发明涉及音视频处理技术,特别涉及一种用于SVAC标准的图像预测方法。
技术背景
在符合SVAC标准的解码流程中,一般采用重建图像来做参考点以进行解码。而在现有SVAC标准的编码器的硬件实现中,为了实现高性能编码器且降低硬件实现的难度,直接利用当前块周边的原始像素作为当前块的预测参考像素。由于这些预测参考像素源于原始图像数据,而非真实的重建图像数据,在计算预测值时必然会带来一些误差,导致预测的不准确,最终导致编码码流变长。
发明内容
有鉴于此,本发明实施例提供一种用于SVAC标准的图像预测方法,提高了预测的准确性。
为了达到上述目的,本发明实施例提供的一种用于SVAC标准的图像预测方法包括:
对预测参考像素值进行滤波处理;
利用滤波后的预测参考像素值计算当前块的预测像素值。
本发明实施例提供的一种用于SVAC标准的图像预测方法,在利用当前块的预测参考像素为当前块做预测前,首先对这些预测参考像素做滤波处理,然后利用这些滤波后的预测参考像素为当前块计算预测像素值。由于这些经过滤波处理的预测参考值更接近重建值,从而提高了帧内预测的准确性。
附图说明
图1是本发明实施例提供的用于SVAC标准的图像预测方法的流程图。
图2是本发明实施例中参考像素分布示意图。
图3序列Flowervase_416×240的RD曲线图。
图4序列BasketballDrill_832×480的RD曲线图。
图5序列rush_hour_1088p的RD曲线图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
图1是本发明实施例提供的一种用于SVAC标准的图像预测方法的流程图。如图1所示,该方法包括如下步骤:
步骤101:对预测参考像素值进行滤波处理。滤波处理可使预测参考值更接近解码中重建图像的重建值,从而提高了编码过程中帧内预测的准确性,且缩短了编码码流。具体滤波处理的方式将在后文图2所示的实施例中进行详细说明。
本领域技术人员可以理解,滤波处理的具体方式可以根据所要实现硬件的复杂度和所要接近的重建值而定,本发明对此不做限定。
步骤102:利用滤波后的预测参考像素来计算当前块的预测像素值;
在本发明一实施例中,计算预测像素值的预测模式可分为五种,分别为利用当前块上边、左上、右上、左边、和左下的原始像素值计算当前块所有像素的预测像素值。若当前块位于图像的边缘,当前块可能没有上边、左上、右上、左边、和左下的原始像素值中的一个或多个,此时将该上边、左上、右上、左边、和左下的原始像素值中的一个或多个视为空值即可。
在本发明一实施例中,为了进一步提高预测准确性,可以选取当前块上边、左上、右上、左边、和左下的原始像素值中的一种预测模式作为最佳预测模式进行预测像素值的计算。此时该SVAC标准的图像预测方法可进一步包括:
步骤103:分别将利用所述当前块上边、和/或左上、和/或右上、和/或左边、和/或左下的原始像素值计算得出的预测像素值与所述当前块的原始像素值进行绝对差值求和运算。
具体过程可以为:用当前块的原始像素值减去步骤102中分别通过五种预测模式计算出的预测像素值,再对减法运算求得的差值求绝对值,最后把当前块的所有像素的绝对值相加,得出当前块在相应预测模式下的绝对差值求和运算(后文以SAD表示)结果,每一种预测模式对应一个SAD值。
在本发明一实施例中,SAD运算中还包括将差值进行Hadamard变换,此时该SAD运算其实成为了SATD运算。
步骤104:将所述当前块上边、左上、右上、左边和左下中绝对差值求和运算结果最小的预测参考值作为最佳预测参考值。
具体过程可以为:将步骤103计算出的各预测模式的SAD值,按照由小到大顺序编号,并根据该顺序编号将这些SAD值进行两两比较,每轮比较取其中SAD值较小者继续下一轮比较,最终可得出具有最小SAD值的预测模式,该具有最小SAD值的预测模式即是当前块的最佳预测模式,该模式中所利用的预测参考值也即为最佳预测参考值。
下面通过一个实施例来详细说明滤波处理的具体过程。
图2是本发明一实施例中参考像素分布示意图。如图2所示,以一4x4亮度宏块(图中的a至p)为例进行说明。该亮度宏块的上边、左上、右上、左边和左下边像素为A到Q。其中,当前亮度宏块上边的像素为A~D;左上的像素为Q;右上的像素为E~H;左边的像素为I~L;左下的像素为M~P。
则滤波算法的输入为:预测参考值p[x,y],其中,x=-1~7,y=-1和x=-1,y=0~7。当然,实际情况下,当亮度宏块位于图像边缘时,有可能不具有上边、左上、右上、左边和左下边像素的一个或多个,此时可以将对应的p[x,y]视为空值。
滤波算法的输出为:滤波后的预测参考值f[x,y],其中,x=-1~7,y=-1和x=-1,y=0~7。
对当前块左上Q的预测参考值p[-1,-1]进行滤波处理,获得滤波后的预测参考值f[-1,-1]的过程为:
若值p[0,-1](对应I点)和p[-1,0](对应A点)都可用于预测,则Q点的预测值f[-1,-1]=(p[0,-1]+6*p[-1,-1]+p[-1,0]+4)>>3;
其中,I、Q、A三点对f[-1,-1]的作用系数为1∶6∶1,该值为经验值。
“>>3”的目的是为了实现除8的效果,以保持最后的运算结果仍为像素长度。具体而言,由于每一个像素点的比特位长度是8,则(p[0,-1]+6*p[-1,-1]+p[-1,0])的比特位长度为11,通过“>>3”的操作,可以使得最后运算结果保持8bits。
“+4”的目的是为了实现硬件除法取整的精确度,或者说为了实现四舍五入的效果。由于硬件移位操作后只能“保留整数部分,去掉小数部分”,这样当某些情况下除法结果为(1.5,2)时,都会被认为1,显然这是不够精确的。通过“+4”的计算,就可以让大于0.5的部分对整数部分贡献1,则对于原除法结果为(1.5,2)的情况,现在均可以为认为是2;而对于小于0.5的部分,即使“+4”,结果还是0,这样可以实现四舍五入,让运算结果更准确。
以上对f(x,y)的说明也适用于下列公式。即,当前块的下边块的预测参考像素值、当前块的预测参考像素值、当前块的右边块的预测参考像素值对所述块的滤波后的预测参考像素值的作用系数为1∶6∶1。
若值p[0,-1](对应I点)可用,但值p[-1,0](对应A点)不可用,用Q点的值替换A点时,此时f[-1,-1]=(p[0,-1]+7*p[-1,-1]+4)>>3;
若值p[-1,0](对应A点)可用,但值p[0,-1](对应I点)不可用,用Q点的值替换I点时,则f[-1,-1]=(7*p[-1,-1]+p[-1,0]+4)>>3。
对当前块上边的预测参考值p[x,-1],x=0~3(对应I、J、K、L)进行滤波处理,获得滤波后的预测参考值f[x,-1]的过程为:
若p[-1,-1](对应Q)可用,则I点滤波后的预测参考值f[0,-1]=(p[-1,-1]+6*p[0,-1]+p[1,-1]+4)>>3;
若p[-1,-1](对应Q)不可用,则I点滤波后的预测参考值f[0,-1]=(7*p[0,-1]+p[1,-1]+4)>>3;
J、K、L点滤波后的预测参考值f[x,-1]=(p[x-1,-1]+6*p[x,-1]+p[x+1,-1]+4)>>3,其中,x=1,2,3。
对当前块右上的预测参考值p[x,-1],x=4~7(对应M、N、O、P)进行滤波处理,获得滤波后的预测参考值f[x,-1]的过程为:
M、N、O点滤波后的预测参考值f[x,-1]=(p[x-1,-1]+6*p[x,-1]+p[x+1,-1]+4)>>3;其中,x=4~6;
P点滤波后的预测参考值f[7,-1]=(p[6,-1]+6*p[7,-1]+4)>>3。
对当前块左边的预测参考值p[-1,y],y=0~3(对应A、B、C、D)进行滤波处理,获得滤波后的预测参考值f[-1,y]的过程为:
若p[-1,-1](对应Q)可用,则A点滤波后的预测参考值f[-1,0]=(p[-1,-1]+6*p[-1,0]+p[-1,1]+4)>>3;
若p[-1,-1](对应Q)不可用,则A点滤波后的预测参考值f[-1,0]=(7*p[0,-1]+p[-1,1]+4)>>3;
B、C、D点滤波后的预测参考值f[-1,y]=(p[-1,y-1]+6*p[y,-1]+p[-1,y+1]+4)>>3,y=1~3。
对当前块左下的预测参考值p[-1,y],y=4~7(对应E、F、G、H)进行滤波处理,获得滤波后的预测参考值f[-1,y]的过程为:
E、F、G点滤波后的预测参考值f[-1,y]=(p[-1,y-1]+6*p[-1,y]+p[-1,y+1]+4)>>3,y=4~7;
H点滤波后的预测参考值f[-1,7]=(p[-1,6]+7*p[-1,7]+4)>>3。
当然,在本发明一实施例中,当前块的下边块的预测参考像素值、当前块的预测参考像素值、当前块的右边块的预测参考像素值对所述块的滤波后的预测参考像素值的作用系数也可以是1∶2∶1。这种情况下,举例说明,若值p[0,-1](对应I点)和p[-1,0](对应A点)都可用于预测,则Q点的预测值f[-1,-1]=(p[0,-1]+2*p[-1,-1]+p[-1,0]+2)>>2;
其中,“>>2”的目的是为了实现除4的效果,以缩短编码长度。具体而言,由于每一点的编码长度均为8,则(p[0,-1]+2*p[-1,-1]+p[-1,0])的长度为10,通过“>>2”的操作,可以使得编码长度又缩短为8。“+2”的目的是为了实现硬件除法取整的精确度,或者说为了实现四舍五入的效果。对于8×8的亮度宏块,其预测方式与图2所示实施例相同,其区别在于其预测参考值p[x,y]的范围为:x=-1~15,y=-1和x=-1,y=0~15。
下面以实际的实验数据对打开与关闭滤波算法进行比较测试。选取了3个不同的视频序列做测试实验,分别是:Flowervase_416×240,BasketballDrill_832×480和rush_hour_1088p。每个序列选100帧,以全I帧的方式进行编码。实验采用Hadamard变换和VLCE编码,为了检验算法在不同码率下的效果,采用了5个不同的QP值进行测试。
图表说明:ΔPSNR表示打开滤波算法后峰值信噪比的变化,ΔBitrate表示打开滤波算法后码率变化的百分比,正值表示增加,负值表示减少。表1~表3分别是3个序列的测试结果,图3至图5分别是3个序列的RD(Rate Distortion)曲线图,其中ON表示打开算法,OFF表示关闭算法。
表1序列Flowervase_416×240的结果
QP |
ΔPSNR |
ΔBitrate(%) |
28 |
0 |
-0.08% |
32 |
0.01 |
-0.07% |
36 |
0 |
-0.08% |
40 |
0.03 |
-0.19% |
44 |
0.02 |
-0.45% |
表2序列BasketballDrill_832×480的结果
QP |
ΔPSNR |
ΔBitrate(%) |
28 |
0.01 |
-0.08% |
32 |
0.01 |
-0.07% |
36 |
0.03 |
-0.16% |
40 |
0.05 |
-0.14% |
44 |
0.1 |
-0.11% |
表3序列rush_hour_1088p的结果
QP |
ΔPSNR |
ΔBitrate(%) |
28 |
0.01 |
0.22% |
32 |
0.01 |
-0.07% |
36 |
0.02 |
-0.75% |
40 |
0 |
-0.51% |
44 |
0.01 |
-0.08% |
根据上面的实验数据显示,在SVAC参考软件BM中加入滤波算法后,PSNR平均增加0.02dB,输出码率平均减少0.17%。可见,在SVAC的实现上加入本文的算法有助于提高图像的客观质量,且码率有一定的减少。
在快速寻找最佳预测模式的过程中,对当前块的预测参考像素做滤波处理,可以有效提高预测的准确性,提升PSNR,且降低码率。采用简单的算法就可以可靠地提高编解码的图像的主客观质量,性能提高的同时并没有增加多少复杂度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。