BD-RATE计算原理

引自:https://www.freesion.com/article/6203385847/

BD-RATE计算原理

标签: H.26X研究  视频编解码  算法  计算机视觉

BD-RATE介绍

BD-rate是评价视频编码算法性能的主要参数之一,表示新算法编码的视频相对于原来的算法在码率和PSNR上的变化情况。
在视频编码中,码率低表示压缩量大,PSNR值高表示客观质量好。因此,对于一种编码算法,如果压缩视频码率降低、PSNR值提高,那么该算法具有良好的性能。但是通常视频编码算法在提高压缩量的同时会损失压缩质量,即码率减小的同时PSNR值也减小,此时就需要使用BD-rate进行衡量。

VB程序分析

本部分首先对程序进行注解,再按模块进行分析。

Public Function bdrate(rateA As Range, distA As Range, rateB As Range, distB As Range) As Double 
'rateA是anchor码率,distA是ancher的PSNR,rateB是test码率,distB是test的PSNR

    Dim minPSNR As Double
    Dim maxPSNR As Double
    
   '取出积分区间
    minPSNR = WorksheetFunction.Max(WorksheetFunction.Min(distA), WorksheetFunction.Min(distB))   
    maxPSNR = WorksheetFunction.Min(WorksheetFunction.Max(distA), WorksheetFunction.Max(distB))
    
    Dim vA As Double
    Dim vB As Double
    
    '积分。bdrint函数先对码率取了对数,然后进行积分
    vA = bdrint(rateA, distA, minPSNR, maxPSNR)
    vB = bdrint(rateB, distB, minPSNR, maxPSNR)
    
    '计算积分差值,除以积分区间
    Dim avg As Double
    avg = (vB - vA) / (maxPSNR - minPSNR)
    
    '对数反变换。得到被测算法的码率相对于anchor的倍数,减1后得到变化率
    bdrate = WorksheetFunction.Power(10, avg) - 1
End Function
Public Function bdrint(rate As Range, dist As Range, low As Double, high As Double) As Double
    Dim log_rate(1 To 4) As Double
    Dim log_dist(1 To 4) As Double
    Dim i As Long
    
    '数据重排。输入数据小qp在前,因此前面数据的码率和PSNR大,重排后小值在前
    For i = 1 To 4
        log_rate(i) = WorksheetFunction.Log(rate(5 - i), 10)  
        log_dist(i) = dist(5 - i)
    Next i
    
    Dim H(1 To 3) As Double
    Dim delta(1 To 3) As Double
    
    For i = 1 To 3
        H(i) = log_dist(i + 1) - log_dist(i)  '差值
        delta(i) = (log_rate(i + 1) - log_rate(i)) / H(i)  '以PSNR为横轴的斜率
    Next i 
    
    'd、c、b为分段多项式系数,本程序采用pchip三次分段插值方法获得拟合曲线
    Dim d(1 To 4) As Double 
    d(1) = pchipend(H(1), H(2), delta(1), delta(2))
    For i = 2 To 3
        d(i) = (3 * H(i - 1) + 3 * H(i)) / ((2 * H(i) + H(i - 1)) / delta(i - 1) + (H(i) + 2 * H(i - 1)) / delta(i))
    Next i
    d(4) = pchipend(H(3), H(2), delta(3), delta(2))

    Dim c(1 To 3) As Double
    Dim b(1 To 3) As Double
    For i = 1 To 3
        c(i) = (3 * delta(i) - 2 * d(i) - d(i + 1)) / H(i)
        b(i) = (d(i) - 2 * delta(i) + d(i + 1)) / (H(i) * H(i))
    Next i
    
    '分成3段,s0作为起点,s1作为终点
    Dim s0 As Double
    Dim s1 As Double
    Dim result As Double
    
    result = 0 '积分值
    
    For i = 1 To 3
        s0 = log_dist(i)
        s1 = log_dist(i + 1)
        
        '判断当前分段是否在范围内
        s0 = WorksheetFunction.Max(s0, low)
        s0 = WorksheetFunction.Min(s0, high)
        s1 = WorksheetFunction.Max(s1, low)
        s1 = WorksheetFunction.Min(s1, high)
                
        '平移区间
        s0 = s0 - log_dist(i)
        s1 = s1 - log_dist(i)
        
        '积分
        ' 插值函数为 rate(i) + s*(d(i) + s*(c(i) + s*(b(i))) 
        ' 即 rate(i) + s*d(i) + s*s*c(i) + s*s*s*b(i)
        ' 则原函数为 s*rate(i) + s*s*d(i)/2 + s*s*s*c(i)/3 + s*s*s*s*b(i)/4
        If (s1 > s0) Then
            result = result + (s1 - s0) * log_rate(i)
            result = result + (s1 * s1 - s0 * s0) * d(i) / 2
            result = result + (s1 * s1 * s1 - s0 * s0 * s0) * c(i) / 3
            result = result + (s1 * s1 * s1 * s1 - s0 * s0 * s0 * s0) * b(i) / 4
        End If
    Next i
    
    bdrint = result
End Function

Public Function pchipend(h1 As Double, h2 As Double, del1 As Double, del2 As Double) As Double
    Dim d As Double
    
    d = ((2 * h1 + h2) * del1 - h1 * del2) / (h1 + h2)
    If (d * del1 < 0) Then
        d = 0
    ElseIf ((del1 * del2 < 0) And (Abs(d) > Abs(3 * del1))) Then
        d = 3 * del1
    End If
    
    pchipend = d
End Function

确定积分区间

由于输入的四个点不对齐,为了计算积分差,需要取得公共区间。如下图所示:
在这里插入图片描述
码率取对数
文献1介绍了对码率取对数的原因。实际上,当取对数后,码率之间的倍数关系会变成相减,方便计算。此外,类比PSNR的计算过程后,再对数域进行曲线拟合更加合理。
下图为普通的RD曲线图,纵坐标为PSNR,横坐标为码率Bitrate普通的RD曲线图
下图为码率取对数的RD曲线图,纵坐标为PSNR,横坐标为10*码率的对数

在这里插入图片描述
数据重排
如下图所示,一般输入数据点基于四个从小到大的QP值,QP值越小,压缩量越小,码率越大,损失越小,即PSNR更高。因此输入的数据点码率与PSNR从大到小,为了方便计算,使用log_dist(i) = dist(5 - i),将数据反排为从小到大。
在这里插入图片描述
对数反变换
通过对数反变换,获得被测算法的平均码率相对于anchor的倍数,当被测算法与ancher相等时,对数反变换为1。减1后,倍数变为相对变化率。由此可以看出,BD-rate实际上表示的是一种平均变化率,所以格式通常是百分比。
BDBR与BDPSNR
与BD-rate相似,BDBR与BD-PSNR也是常见的视频算法评价指标。BDBR表示了在同样的客观质量下,两种方法的码率节省情况;BD-PSNR表示了在给定的同等码率下,两种方法的PSNR-Y的差异。与二者不同的是,BD-rate表示的是一种平均值的关系。BDBR与BD-PSNR的介绍见文献2。
pchip三次分段插值方法
程序使用分段三次Hermite插值,将原始长序列分割成三段,每段构造一个三次函数,使得分段的衔接处具有二阶导数连续的性质(也就是光滑衔接)。
多项式形式为:v = y + sd + ssc + sssb
介绍见文献3、4

使用方法

1.建立VB程序
2.EXCEL中调用,对应输入四组数值
3.输出值以百分号形式表示,负值代表新算法性能更优,正值表示新算法性能较差。

参考文献

(文献1为原作者提案,文献2分析了BDBR与BDPSNR的计算原理,文献3、4介绍了插值原理)
[1]: https://wenku.baidu.com/view/588c854fde80d4d8d05a4f2c.html
[2]: https://blog.csdn.net/XX_bai/article/details/89713343?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
[3]: https://max.book118.com/html/2018/0317/157673431.shtm
[4]:https://zhuanlan.zhihu.com/p/62860859

 
版权声明:本文为weixin_42348033原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42348033/article/details/104892903
原文地址:https://www.cnblogs.com/lyp1010/p/15266825.html