JPEG2000中PCRD算法的失真-长度斜率的计算和优化截断点的选择
PCRD算法(压缩后率失真算法)是JPEG2000实现码率控制的核心算法,其中的重点在于失真-长度斜率和优化截断点的计算。我查阅了N篇国内关于PCRD的论文(其实内容基本上雷同),再加上jasper软件和一些外文资料,对于失真-长度斜率的计算有一点心得,拿出来让朋友们批评更正一下。
首先看看率失真函数。如下图的率失真函数(Y轴式失真,X轴式码率长度),信息论里面已经证明过是下凸函数。可见,在率失真函数中,其斜率(绝对值)是是单调递减的。
其次要明白,符合率失真曲线的截断点必定是最优的,因为只要在曲线上,无论在哪个L上截断,都有最低的D。但是,在JPEG2000中,截断点定义为每一个位平面的编码通道,并不一定都在曲线上,而有可能在曲线外面,因此有必要通过计算求得次优的优化截断点。
由失真曲线可知,假设在某个编码块中,经过计算后,优化截断点的组合为:z1,z2...zi...zn,相应的截断点失真为D(z1),D(z2)...D(zi)...D(zn);相应的码率长度为L(z1),L(z2)...L(zi)...L(zn)。必定满足下面条件:
•(1) 相邻两个截断点的斜率严格单调递减。
•(2) D(zi)必然严格单调减少。L(zi)必然严格单调增大。
所有不符合以上两个条件的截断点都去掉。在jasper中,如果两个截断点的斜率相同,则只取后一个为优化截断点。如果失真度D(zi)相同,则取前一个截断点。
在国内大部分论文(其实就是copy外文资料)中,计算斜率和优化截断点分为两步:第一步计算每一点的R-D斜率,第二部再挑选其中的优化截断点。这样计算最严重的后果是计算量大,因为