BD-Rate和BD-PSNR

BD-Rate和BD-PSNR

19世纪英国著名物理学家开尔文有一句名言是这样说的:

If you cannot measure it,you cannot improve it.

对视频压缩领域来说,可能这句话尤其适用。因为你想提出或者设计一个新的压缩算法,必须通过测试去证明,而且必须要通过与至少的编码器做对比测试才行。

背景介绍

测试需要的数据一般是失真D和码率R。在视频压缩编码中,前后两次对比测试时,如果新的算法能够做到码率数值又低,PSNR值又高,那当然最好。

但是不幸的是大多数视算法,在降低码率R的同时也会导致PSNR降低,即码率减小的同时失真也会变大。此时就需要使用BD-rate或者BD-PSNR指标去进行衡量。

而此处的BD是Bjøntegaard Delta的缩写,BD-Rate和BD-PSNR是由Gisle Bjøntegaard老爷子在2001年提出来进行视频编码器性能评价的客观指标模型。

通常用来比较两个不同视频编码器或者一个编码器在不同配置参数下的率失真性能或者压缩性能。

当我们去评价一个编码器性能的时候,通常以以R-D曲线作为切入点。通过R-D曲线我们可以知道在不同码率点时的视频质量(通常用PSNR/dB表示)。Bjøntegaard Delta模型也是如此,下面就来看看这个模型究竟是如何设计的。

BD模型说明

如果你已经通过给编码器设置不同QP值,得到了一组(PSNR,bitrate)点。我们知道像h264和h265视频编码标准中,QP取值从0-51,所以对一个测试序列来说,我们最多可以测试52个(PSNR,bitrate)点。

如果我们想根据这些个码率值以及相对应的PSNR值,来近似拟合出一条光滑的R-D曲线,可以有很多种不同的插值方法。

而Bjøntegaard模型中拟合R-D曲线的表达式如下(1)所示,它对码率R首先进行了log处理。

BD-Rate和BD-PSNR

从上面式子(2)可以知道,要求解出此模型下的表达式系数,至少需要4个(PSNR,bitrate)点。而这也解释了,为什么我们在使用BD-RATE和BD-PSNR指标的时候,至少需要测4个码率点数据。

然后计算两条R-D曲线之间的平均PSNR差值,它近似等于通过式(2)拟合出来的两条近似R-D曲线在码率点范围内积分的平均值,如下(3)所示:

BD-Rate和BD-PSNR

通过式(3)计算出来的△D就是所谓的BD-PSNR值。它的物理意义是,在相同的码率下,两个编码器客观视频质量(PSNR衡量)的差异。

与上面原理类似的,我们假设码率是失真D的函数,那可以使用表达式是(5)来表达,

BD-Rate和BD-PSNR

两条R-D曲线之间的平均码率差值比,它的计算如式子(6),这个计算出来的就是BD-Rate。它的物理意义是,在相同的客观质量PSNR下,两个编码器或同一编码器两次测试的码率节省百分比。如果BD-Rate值为负,则表示后一次测试比前一次测试,码率有节省。

这个其实也从上式(6)可以看出端倪,△R不是直接算的R2-R1 ,而是还除了一个R1。所以说它算的是后一次测试的码率R2比前一次测试码率R1的节省百分比。

如何使用

需要说明的是,式子(1)和(5)拟合R-D曲线的过程目前也有2种方法,一种是相对比较老的方法即cubic,它会将四个数据点直接拟合成曲线。一种是新方法即piece wise cubic,它会对四个数据点分段三次插值来拟合曲线。老的方法相关提案在VCEG-M033,新方法相关提案在JCTVC-F270。

github上BD-Rate和BD-PSNR开源下载地址在:

链接: link.

如果你觉得上面链接里的python脚本用起来比较麻烦。也可以直接使用VCEG-AE07.rar内提供的.xls文件来计算BD-rate和BD-PSNR。你只需要把前后两次测试的数据,贴到这个excel的对应位置即可,它会使用计算结果。。

上一篇:HM-SpringCloud微服务系列3.2【Docker的基本操作】


下一篇:用SVG代码画一只小猫咪