视频编码指标中的BD-BR/BD-rate和BD-PSNR的说明和计算(Excel Method and Matlab Method)

版权说明:本文翻译自ottverse
更新:2022.3.31新增,少量补充

解释

BD-Rate 和 BD-PSNR 是视频压缩中使用的客观度量指标,用于在比特率或质量值范围内比较两种不同视频编解码器或同一视频编解码器的不同设置的速率失真性能或压缩效率。本文着眼于 BD-Rate 和 BD-PSNR 指标,并指导如何计算和解释 BD-Rate。

RD曲线(率失真曲线)

当您评估编解码器的性能时,您通常会得到一条速率失真 (RD) 曲线,该曲线告诉您不同比特率(通常以 kbps 或 Mbps 为单位)的质量(以 dB 为单位的 PSNR)。
BD-Rate 指标使用来自 RD 曲线的信息,告诉您一个编解码器相对于另一个编解码器的改进程度。
但是,首先,让我们了解一下视频压缩领域常见的 RD 曲线/图。
我们知道,视频压缩是为了存储或传输要求而减小视频大小的过程。并且视频压缩的过程会影响视频质量,并且通常会降低视频质量。
因此,视频压缩的目标是保持视频质量,或在压缩视频时降低失真程度!
当您开始使用视频编解码器时,您要做的第一件事是通过执行以下操作来检查其性能 -
选择某些编解码器设置(调整)并且不要更改它们。
在一系列增加的比特率中压缩具有不同空间和时间特征的多个视频。对于每次压缩运行,使用客观指标(如 PSNR (dB) 或 SSIM)记下编解码器实现的比特率和质量。
将这些结果制成表格,然后用 x 轴上的比特率和 y 轴上的质量绘制它们。

让我们试试这个。我们将使用相同的编解码器,但选择不同的调整或设置,并以四种不同的 CBR 设置(100、2000、3000、4000 kbps)在同一视频上运行我们的实验。在本教程中,我们假设我们的编解码器产生了我们设置的确切比特率(在现实世界中极不可能),并且我们使用 FFmpeg 计算每个实验的 PSNR(这是计算PSNR 使用 FFmpeg)。
在所有的交互之后,我们得到了比特率-PSNR 结果的下表。
在这里插入图片描述
然后,我们绘制这些结果以获得 RD-Plots 或 RD-Curves。 RD Plot 是一种直观比较两种不同编解码器或同一编解码器的两种不同设置的便捷方式,如下所示。
在这里插入图片描述
从这些 RD 曲线来看,很明显,在所选编码条件下,对于该特定视频,设置 B 的性能比设置 A 好得多。
但是,我们如何在数学上限定这些差异,通过一个数字告诉我们几乎所有我们需要知道的关于 RD 图中两条曲线之间差异的信息。
这就是 BD-Rate 分析的用武之地。

BD-Rate or Bjontegaard Delta-Rate

Bjontegaard 度量计算涉及两部分 - BD PSNR 和 BD Rate。它在一篇题为“G. Bjontegaard,计算 RD 曲线之间的平均 PSNR 差异 (VCEG-M33) [2] S. Pateux,J. Jung,用于计算 Bjontegaard 度量及其演变的 excel 插件”,此后提供了一个很好的比较 RD两种不同编解码器的性能或同一编解码器的两种不同设置。
BD-Rate 或 BD-PSNR 的计算很复杂,我在这里复制了 IETF 文档中的文本。如果您不明白,请不要担心!

1. Rate/distortion points are calculated for the reference and test codec.
2. At least four points must be computed. These points should be the same quantizers when comparing two versions of the same codec.
3. Additional points outside of the range should be discarded.
4. The rates are converted into log-rates.
5. A piecewise cubic hermite interpolating polynomial is fit to the points for each codec to produce functions of log-rate in terms of distortion.

Metric score ranges are computed:
6. If comparing two versions of the same codec, the overlap is the intersection of the two curves, bound by the chosen quantizer points.
7. If comparing dissimilar codecs, a third anchor codec’s metric scores at fixed quantizers are used directly as the bounds.
8. The log-rate is numerically integrated over the metric range for each curve, using at least 1000 samples and trapezoidal integration.
9. The resulting integrated log-rates are converted back into linear rate, and then the percent difference is calculated from the reference to the test codec.

幸运的是,作者提供了一个带有插件的 Excel 表格,使计算变得非常简单。
您需要做的就是转到他们的 GitHub 存储库 并下载 Excel 工作表和 Excel 加载项。
如果您下载 zip 文件,您将同时获得它们。
顺便说一下,repo 的 README.md 上的说明请务必阅读
在这里插入图片描述
以下是使用 Excel 表格计算 BD-Rate 和 BD-PSNR 所需的操作(可以参考CSDN博客文章)
步骤 1:解压 zip 文件并进入生成的文件夹。
步骤2:使用Microsoft Excel 打开bjontegaard_etro_standalone_example 并批准弹出的对话框——点击“更新”。这将选取包含计算和数学的 bjontegaard_etro Excel 加载项文件。
在这里插入图片描述
第 3 步:转到标题为“使用 VCEG-M33 进行验证”的第三个选项卡,您将找到一个表,行标题为“Curve1”和“Curve2”。这就是您需要从运行的测试中输入数据的地方(查看上表以了解如何获取和输入数据)。
输入数据后,您会看到自动计算了两个值

  • B-DSNR (dB) — 与 BD-PSNR 相同
  • B-DBR (%) — 与 BD-Rate 相同

这些是您分析所需的 BD 值。
让我们看看它们是什么意思。

  • B-DSNR (dB):这会告诉您 Curve2 与 Curve1 在等效比特率下的质量增益。
    换句话说,如果在编解码器设置 1 和 2 中花费相同数量的比特,那么哪个质量更好,多少?
    因此,如果该值为 5 dB,则意味着第二个设置在等效比特率下提供的质量比第一个设置高 5 dB。
    此外,无论您是使用 SSIM 还是 VMAF,而不是 PSNR,计算都有意义。如果您使用其他一些客观质量指标,请确保忽略 dB 单位。

  • B-DBR (%):这会告诉您同等质量下的比特率节省,也称为 BD-Rate 值。换句话说,如果两种编解码器设置的质量相同,那么哪个使用更多位,多少?
    如果 B-DBR 的值为 50%,则意味着 Curve2 需要比 Curve1 多 50% 的比特才能达到相同的质量。
    如果该值为 -25%,则表示 Curve2 需要比 Curve1 少 25% 的位数才能实现相同的视频质量。
    小心这种解释和 +/- 符号。

在我们的实验中,我们得到以下结果——
B-DBR (%) = -19.893 %
B-DSNR (dB) = 1.833 dB
这意味着,
对于相同的质量,设置 B 比设置 A 节省 19.893 % 的比特;或者,如果您使用设置 B,则需要少花费 19.893% 的比特才能达到与设置 A 相同的质量。
并且,在花费的比特数相同的情况下,设置 B 的视频质量比设置 A 高 1.833 dB。
这证实了我们通过查看 RD 曲线得出的结论。

结论

综上,现有的两种计算方式为

  • excel
    • 主要是利用给定的宏进行计算
  • matlab
    • matlab可用程序(link)

注:为了方便使用,直接按照官网链接写了一个mlx实时脚本

% test Bjontegaard metric
 
 
R1 = [686.760000000000;309.580000000000;157.110000000000;85.9500000000000];
R2 = [893.340000000000;407.800000000000;204.930000000000;112.750000000000];
 
PSNR1 = [40.2800000000000;37.1800000000000;34.2400000000000;31.4200000000000];
PSNR2 = [40.3900000000000;37.2100000000000;34.1700000000000;31.2400000000000];
 
avgdiff = bjontegaard(R1,PSNR1,R2,PSNR2,'dsnr');
disp(avgdiff)
 
 
avgdiff = bjontegaard(R1,PSNR1,R2,PSNR2,'rate');
disp(avgdiff)
 
function avgdiff = bjontegaard(R1,PSNR1,R2,PSNR2,mode)
%BJONTEGAARD    Bjontegaard metric calculation
%   Bjontegaard's metric allows to compute the average gain in PSNR or the
%   average per cent saving in bitrate between two rate-distortion
%   curves [1].
%   Differently from the avsnr software package or VCEG Excel [2] plugin this
%   tool enables Bjontegaard's metric computation also with more than 4 RD
%   points.
%
%   R1,PSNR1 - RD points for curve 1
%   R2,PSNR2 - RD points for curve 2
%   mode - 
%       'dsnr' - average PSNR difference
%       'rate' - percentage of bitrate saving between data set 1 and
%                data set 2
%
%   avgdiff - the calculated Bjontegaard metric ('dsnr' or 'rate')
%   
%   (c) 2010 Giuseppe Valenzise
%
%   References:
%
%   [1] G. Bjontegaard, Calculation of average PSNR differences between
%       RD-curves (VCEG-M33)
%   [2] S. Pateux, J. Jung, An excel add-in for computing Bjontegaard metric and
%       its evolution
% convert rates in logarithmic units
lR1 = log(R1);
lR2 = log(R2);
switch lower(mode)
    case 'dsnr'
        % PSNR method
        p1 = polyfit(lR1,PSNR1,3);
        p2 = polyfit(lR2,PSNR2,3);
        % integration interval
        minint = min([lR1; lR2]);
        maxint = max([lR1; lR2]);
        % find integral
        pint1 = polyint(p1);
        pint2 = polyint(p2);
        int1 = polyval(pint1, maxint) - polyval(pint1, minint);
        int2 = polyval(pint2, maxint) - polyval(pint2, minint);
        % find avg diff
        avgdiff = (int2-int1)/(maxint-minint);
    case 'rate'
        % rate method
        p1 = polyfit(PSNR1,lR1,3);
        p2 = polyfit(PSNR2,lR2,3);
        % integration interval
        minint = min([PSNR1; PSNR2]);
        maxint = max([PSNR1; PSNR2]);
        % find integral
        pint1 = polyint(p1);
        pint2 = polyint(p2);
        int1 = polyval(pint1, maxint) - polyval(pint1, minint);
        int2 = polyval(pint2, maxint) - polyval(pint2, minint);
        % find avg diff
        avgexpdiff = (int2-int1)/(maxint-minint);
        avgdiff = (exp(avgexpdiff)-1)100;
end
end

…matlab的语法高亮有点问题…

参考&辅助阅读

链接1
链接2
链接3
链接4
链接5

补充

关于参数的补充说明

当前VVC的研究可以被分为两个大的方向:压缩效率的提升和压缩速度的提高(压缩时间的减少)。
效率提升:大多为一些更加精细化的预测或滤波等工具的提出或设计,所体现的指标变化为BD-rate(负值,表明同等的客观质量下,码率的降低–>压缩效率的提升)和BD-PSNR(正值,表明相同码率情况下,客观质量的提高–>压缩效率的提升)。
突出的是用时间来换效率的提升
速度提高:大多数为一些决策优化或跳过划分等算法,所体现的指标变化为BD-rate有所上升(正值,表明同等的客观质量下,码率有少量增加,但是编解码时间大大减少),BD-PSNR略有下降,(可能为负值?表明相同的码率情况下,客观质量有所下降,但是编码时间减少)。
突出的是用编码效率来换取时间的减少

关于工具的补充说明

一些相关的工具:
VCEG-M33
VCEG-AE07(旧版)
JCTVC-A031
JCTVC-B055 (五点<5 QP>计算工具)

关于excel使用的补充说明

以VCEG-AE07为例演示说明:

  • 打开AE07.xls文件,启用编辑,启用宏(默认操作就好)
  • 更改图片中的文件夹路径(将引号内的路径修改为自己的路径)在这里插入图片描述
  • 不同版本的excel可能不一样?(所用版本为Office Monda 2016)我直接将双引号内路径删除后,如图,回车后直接显示宏计算的结果
    在这里插入图片描述
  • 11
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值