RDO率失真优化

编码器性能的高低可以从解码后图像的质量(失真度)和编码后码流的大小决定。

图像失真度的评价指标有以下几种:
平方误差和SSD(sum of square difference):

SSD=x=0M1y=0N1|f(x,y)f(x,y)|2 S S D = ∑ x = 0 M − 1 ∑ y = 0 N − 1 | f ( x , y ) − f ′ ( x , y ) | 2

绝对误差和SAD(sum of absolute difference):
SAD=x=0M1y=0N1|f(x,y)f(x,y)| S A D = ∑ x = 0 M − 1 ∑ y = 0 N − 1 | f ( x , y ) − f ′ ( x , y ) |

其中 f(x,y) f ( x , y ) 原图像在像素点x,y处的值, f(x,y) f ′ ( x , y ) 代表解码后的图像在x,y处的值。对比起来,SAD的运算少了很多乘法运算,相对来说运算没那么复杂。
均方误差MSE(mean square error):
MSE=1MNx=0M1y=0N1|f(x,y)f(x,y)|2 M S E = 1 M N ∑ x = 0 M − 1 ∑ y = 0 N − 1 | f ( x , y ) − f ′ ( x , y ) | 2

在SSD的基础上求了一个均值。
PSNR:
PSNR=10log10((2BitDepth1)2MSE) P S N R = 10 log 10 ⁡ ( ( 2 B i t D e p t h − 1 ) 2 M S E )

由此可见PSNR是与MSE成反比的。BitDepth指像素的深度,一般是8bit或10bit。也可以发现,如果MSE无穷小,也就是说,基本上每个点在解码后都和原图像没什么误差,PSNR就无穷大了,但这基本上是不可能的。因为当PSNR等于99.99的时候,带入上式(BitDepth取较大的10比特)可得 MSE=25521010 M S E = 255 2 10 10 ,为了方便,我们就定义当MSE小于这个值的时候,PSNR强制取99.99,因为MSE基本不可能取到那个值一下,因此不会影响计算。

PSNR往往和码率BitRate一起来计算BD-Rate,用来衡量编码器的性能。

图像质量和码流大小是不可兼得的,因此,我们需要做一个权衡。
公式

cost=ΔD+λR c o s t = Δ D + λ R
其中 ΔD=f(Mode) Δ D = f ( M o d e ) R=g(Mode) R = g ( M o d e ) ,Mode是编码器选择的一些帧间帧内预测模式,R代表码流的大小,也就是每秒编多少比特; ΔD Δ D 表示图像失真,也就是编码后图像与编码前图像的偏差(可以参照之前的SAD等图像失真度计算方法),对于硬件,更倾向于用SAD计算 ΔD Δ D λ λ 是拉格朗日乘子,就是一个实系数而已。这个公式就是要求在 R>R R > R ′ 的条件下,求最小的 ΔD Δ D ,即求条件极值。其中的数学我们可以暂时忽略,总之,我们就是要计算不同模式下的cost的最小值,取之即可。

你可能感兴趣的:(HEVC)