目录

  • BD-rate介绍
  • VB程序分析
  • 使用方法
  • 参考文献

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的PSNRDim minPSNR As DoubleDim maxPSNR As Double'取出积分区间minPSNR = WorksheetFunction.Max(WorksheetFunction.Min(distA), WorksheetFunction.Min(distB))   maxPSNR = WorksheetFunction.Min(WorksheetFunction.Max(distA), WorksheetFunction.Max(distB))Dim vA As DoubleDim vB As Double'积分。bdrint函数先对码率取了对数,然后进行积分vA = bdrint(rateA, distA, minPSNR, maxPSNR)vB = bdrint(rateB, distB, minPSNR, maxPSNR)'计算积分差值,除以积分区间Dim avg As Doubleavg = (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 DoubleDim log_rate(1 To 4) As DoubleDim log_dist(1 To 4) As DoubleDim i As Long'数据重排。输入数据小qp在前,因此前面数据的码率和PSNR大,重排后小值在前For i = 1 To 4log_rate(i) = WorksheetFunction.Log(rate(5 - i), 10)  log_dist(i) = dist(5 - i)Next iDim H(1 To 3) As DoubleDim delta(1 To 3) As DoubleFor i = 1 To 3H(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 3d(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 id(4) = pchipend(H(3), H(2), delta(3), delta(2))Dim c(1 To 3) As DoubleDim b(1 To 3) As DoubleFor i = 1 To 3c(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 DoubleDim s1 As DoubleDim result As Doubleresult = 0 '积分值For i = 1 To 3s0 = 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)/4If (s1 > s0) Thenresult = result + (s1 - s0) * log_rate(i)result = result + (s1 * s1 - s0 * s0) * d(i) / 2result = result + (s1 * s1 * s1 - s0 * s0 * s0) * c(i) / 3result = result + (s1 * s1 * s1 * s1 - s0 * s0 * s0 * s0) * b(i) / 4End IfNext ibdrint = result
End FunctionPublic Function pchipend(h1 As Double, h2 As Double, del1 As Double, del2 As Double) As DoubleDim d As Doubled = ((2 * h1 + h2) * del1 - h1 * del2) / (h1 + h2)If (d * del1 < 0) Thend = 0ElseIf ((del1 * del2 < 0) And (Abs(d) > Abs(3 * del1))) Thend = 3 * del1End Ifpchipend = d
End Function

确定积分区间
由于输入的四个点不对齐,为了计算积分差,需要取得公共区间。如下图所示:

码率取对数
文献1介绍了对码率取对数的原因。实际上,当取对数后,码率之间的倍数关系会变成相减,方便计算。此外,类比PSNR的计算过程后,再对数域进行曲线拟合更加合理。
下图为普通的RD曲线图,纵坐标为PSNR,横坐标为码率Bitrate
下图为码率取对数的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

BD-rate计算原理相关推荐

  1. 基于新型忆阻器的存内计算原理、研究和挑战

    作者 | 林钰登.高滨.王小虎.钱鹤.吴华强 来源 | <微纳电子与智能制造>期刊 引言 过去半个世纪以来 ,芯片计算性能的提高主要依赖于场效应晶体管尺寸的缩小.随着特征尺寸的减小 ,器件 ...

  2. 《伟大的计算原理》一致谢

    本节书摘来华章计算机<伟大的计算原理>一书中的第1章 ,[美]彼得 J. 丹宁(Peter J. Denning) 克雷格 H. 马特尔(Craig H. Martell)著 罗英伟 高良 ...

  3. OpenGL中摄像机矩阵的计算原理

    OpenGL中摄像机矩阵的计算原理 熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄 ...

  4. 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...

    第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...

  5. 片偏移字段的值怎么算_搞懂钢丝网片计算原理,怎么算都不怕出错!

    钢丝网片是很多同学都模糊的概念,钢丝网片是怎么回事?什么时候要计算钢丝网片?是有填充墙的时候都要计算吗?软件是怎么计算的?我们如何知道软件计算的是错的还是对的? 今天的文章,我们就来解答这些问题. 钢 ...

  6. 【ArcGIS风暴】ArcGIS10.6图斑椭球面积计算原理与方法

    文章目录 1. 椭球面积计算原理 2. ArcGIS计算图斑椭球面积 3. ArcGIS计算图斑投影平面面积 1. 椭球面积计算原理 <

  7. 不同阶QAM调制星座图中,符号能量的归一化计算原理

    文章目录 前言 一.归一化能量计算原理 二.Matlab中如何得到归一化能量符号 总结 前言 在基于QAM调制的matlab仿真程序中,我们通常会产生二进制比特流,并最终映射成QAM符号,该符号大都是 ...

  8. inventor如何钣金出弧面_Inventor技巧丨外螺纹内径尺寸计算原理

    今天为大家带来:外螺纹内径尺寸计算原理. 比如,有个零件如下图,这个零件包含一个外螺纹. 在工程图中,你可以做以下标注,标识外螺纹相关规格.但某些时候,你可能需要知道螺纹底径是多少?或者说,你想知道软 ...

  9. 片偏移怎么计算_搞懂钢丝网片计算原理,怎么算都不怕出错!

    钢丝网片是很多同学都模糊的概念,钢丝网片是怎么回事?什么时候要计算钢丝网片?是有填充墙的时候都要计算吗?软件是怎么计算的?我们如何知道软件计算的是错的还是对的? 今天的文章,我们就来解答这些问题. 钢 ...

  10. 磁盘启动次数计算原理总结

    磁盘启动次数计算原理总结 @(OS) 文件管理有三大部分内容: 目录管理 文件存储空间管理 文件共享保护管理 目录管理又细分为: 文件控制块和索引结点 目录结构 单级目录结构 两级目录结构 树形目录结 ...

最新文章

  1. 物理看板还是电子看板?
  2. 怎么用python找因子_在python中有大量因子
  3. python怎么读取txt文件数据保存数组中-python将txt等文件中的数据读为numpy数组的方法...
  4. 蓝桥杯java第八届第十题--k倍区间
  5. 大数据开发hadoop核心的分布式消息系统:Apache Kafka 你知道吗
  6. java写一个搜索引擎_搜索引擎—-Java实现一个简单的网络爬虫
  7. GitHub, Google Code, and other
  8. 诺基亚首款5G手机正式发布!还有Nokia 5310经典再现
  9. sql oltp_内存中的OLTP系列– SQL Server 2014上的数据迁移指南过程
  10. cmake 学习笔记(四)
  11. 使用 Google Guava 美化你的 Java 代码
  12. 路由器回执路由配置_三分钟学会路由器各参数功能及设置方法
  13. 多元统计分析——多元线性回归
  14. SQL查询中的笛卡尔积现象解决方法
  15. 坚定不移地做自己认为正确的事情
  16. Aocoda-RCF7/F7 MINI飞控无法解锁的疑难杂症-使用 Betaflight 10.8.0调参软件地面站刷写固件以及AOCODAF722MINI 配置文件
  17. android 备份 通信录,如何简单备份手机通讯录?
  18. 基于Vue实现的多条件筛选功能(类似京东和淘宝功能)
  19. 计算机组织与结构性能设计答案,计算机组织及结构—性能设计第八版答案-COA8e.pdf...
  20. python中session()是干什么作用的_session是什么意思_session的作用是什么

热门文章

  1. Windows 下 VS 配置 OpenGL 环境
  2. win10查看网卡的vender ID和device ID
  3. 选择重新做程序员 作者:Pisces Lee
  4. noi linux黑屏,急!!!noi linux 安装后黑屏怎么处理?(xp系统)
  5. 【雷丰阳SSM基础】【Spring】【03】IoC容器_配置bean—上
  6. win32.mak下载地址github
  7. Project 2013项目管理教程(3):建立任务间的依赖性
  8. oracle中sid是什么意思,Oracle中SID的作用
  9. WinDjView对AfxMessageBox的定制
  10. netty Force-closing a channel whose registration task was not accepted by an event loop问题