视频编解码之客观评价指标(Objective Metrics)

本文参考自JVET-T2016-v2.

客观评价指标

视频编解码效果通常有主观评价和客观评价两种方式。主观评价是根据一套完备的规则来设计实验,并组建实验测试人员团体来对视频质量进行打分。而客观评价往往是通过数学公式计算来得到视频质量效果的量化评价。

最常用的客观评价指标是BD-rate(Bjøntegaard delta bit rate),此外还有其他与主观感知相联系的指标,例如,SSIM(Structural SIMilarity),MS-SSIM(Multi-Scale SSIM), VMAF(Video Multimethod Assessment Fusion)等。

BD-rate 计算流程

1. 计算每帧的PSNR

PSNR(Peak Signal-to-Noise Ratio)是指峰值信噪比,常用于衡量信号质量。其计算公式为:
P S N R = 10 ⋅ log ⁡ 10 ( ( 255 ≪ ( b i t D e p t h − 8 ) ) 2 M S E ) PSNR=10 \cdot \log_{10}(\frac{(255\ll (bitDepth-8))^2}{MSE}) PSNR=10log10(MSE(255(bitDepth8))2)
其中,bitDepth是指位深,通常有8 bit,10 bit,12 bit,16 bit等;MSE是重建图像和原始图像的均方误差,像素值分别用 d e c ( x , y ) dec(x,y) dec(x,y) o r i ( x , y ) ori(x,y) ori(x,y)表示,其公式为:
M S E = 1 W ⋅ H ∑ y = 0 H − 1 ∑ x = 0 W − 1 ( d e c ( x , y ) − o r i ( x , y ) ) 2 MSE=\frac{1}{W\cdot H}\sum_{y=0}^{H-1}\sum_{x=0}^{W-1}(dec(x,y)-ori(x,y))^2 MSE=WH1y=0H1x=0W1(dec(x,y)ori(x,y))2

2. 计算不同QP之对应的PSNR和BitRate

按照JVET通测条件(CTC,Common Test Condition)的规定,QP取值为22,27,32,37,分别计算每个QP值下整个序列所有帧的PSNR和BitRate,这里两者均是平均数值。
P S N R s e q = 1 N u m F r a m e s ∑ k = 0 N u m F r a m e s − 1 P S N R PSNR_{seq}=\frac{1}{NumFrames}\sum_{k=0}^{NumFrames-1}PSNR PSNRseq=NumFrames1k=0NumFrames1PSNR
B i t R a t e s e q = 8 ⋅ F i l e s i z e I n B y t e s ⋅ f p s N u m F r a m e s ⋅ 1000 BitRate_{seq}=\frac{8\cdot FilesizeInBytes\cdot fps}{NumFrames\cdot 1000} BitRateseq=NumFrames10008FilesizeInBytesfps
其中,NumFrames是序列包含的帧数,FilesizeInBytes是每帧的码数,fps是每秒的帧数。

3. 综合考虑YUV

图像可由YCbCr(简称为YUV)表示,其中Y是亮度分量,Cb和Cr是色度分量。由于人类眼睛对于亮度分量的敏感程度远大于色度分量,因此综合考虑YUV时,需要重点关注Y。因此对于不同的分量计算得到的PSNR,需要进行加权平均,而6:1:1(或更大)的权值设定下,图像整体的PSNR即为:
P S N R = 1 8 ( 6 ⋅ P S N R Y + 1 ⋅ P S N R U + 1 ⋅ P S N R V ) PSNR=\frac{1}{8}(6\cdot PSNR_Y+1\cdot PSNR_U+1\cdot PSNR_V) PSNR=81(6PSNRY+1PSNRU+1PSNRV).

4. 计算序列的BD-rate

由于不同的QP值计算得到多个(BitRate,PSNR)的点(以BitRate为横坐标,PSNR为纵坐标),因此,可采用Piece Cubic Fitting对这些点进行曲线拟合。对于两种不同压缩方法的比较,可以分别得到两条拟合曲线,为了比较两种方法的效果差异性,可以计算曲线之间的面积积分,积分的上下界可由两组(BitRate,PSNR)点中的PSNR的最大值和最小值而定。具体如下图所示,其中BitRate通常采用对数坐标。
在这里插入图片描述

5. 计算方法增益

比较两种方法的好坏,曲线在上方的方法较优,称为获得增益(Gain),反之,曲线在下方方法较劣,称为获得损失(Loss)。Gain和Loss的计算结果就是相对性能的提升和降低,单位是%。

根据上述计算得到的曲线之间的积分面积( Δ a r e a \Delta area Δarea)和PSNR的最大值( P S N R m a x PSNR_{max} PSNRmax)和最小值( P S N R m i n PSNR_{min} PSNRmin),可以得到平均Gain或Loss(公式里用Avg表示),公式为:
A v g = ( 1 0 Δ a r e a P S N R m a x − P S N R m i n − 1 ) ∗ 100 % Avg=(10^ {\frac{\Delta area}{PSNR_{max}-PSNR_{min}}}-1)*100\% Avg=10PSNRmaxPSNRminΔarea1100%

Note:由于之前在曲线拟合时,BitRate采用的是log坐标,也就是对BitRate的值进行对数化,因此曲线积分得到面积差值相当于是BitRate的比值。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算视频质量指标BDBR和BD-PSNR的Matlab代码如下: ```matlab % BDBR (Buffer-Delay Bitrate Ratio)的计算 function bdbr = calcBDBR(buffer, delay, bitrate) bdbr = bitrate * delay / buffer; end % BD-PSNR (Buffer-Delay Peak Signal-to-Noise Ratio)的计算 function bdpsnr = calcBDPSNR(buffer, delay, origVideo, decVideo) % 计算原始视频的PSNR origPsnr = psnr(origVideo, decVideo); % 计算从第delay帧开始的重构视频 decVideo = decVideo(:, :, delay:end); % 计算重构视频的PSNR decPsnr = psnr(origVideo(:, :, 1:size(decVideo, 3)), decVideo); % 计算BD-PSNR bdpsnr = origPsnr - (10 * log10(buffer / bitrate)) - (10 * log10(delay / size(origVideo, 4))) + (10 * log10((buffer - delay) / size(decVideo, 3))); end ``` 其中,`calcBDBR`函数用于计算BDBR指标,其输入参数为缓冲区大小(单位:比特)、延迟时间(单位:秒)和视频比特率(单位:比特/秒),输出为BDBR值。 `calcBDPSNR`函数用于计算BD-PSNR指标,其输入参数为缓冲区大小(单位:比特)、延迟时间(单位:秒)、原始视频和重构视频,输出为BD-PSNR值。该函数首先计算原始视频的PSNR,然后根据延迟时间从重构视频中截取一段,计算该段视频的PSNR,最后根据公式计算BD-PSNR值。 需要注意的是,代码中使用了Matlab自带的`psnr`函数计算视频的PSNR值。在使用该函数前,需要将视频矩阵的像素值限制在0到255之间。例如,可以使用以下代码对原始视频和重构视频进行处理: ```matlab origVideo = max(min(origVideo, 255), 0); decVideo = max(min(decVideo, 255), 0); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值