SDT代码学习:http://blog.csdn.net/lin453701006/article/details/79158700
在JEM中,变化编码的改进可以分为两个阶段,如下图。
第一阶段是使用自适应多核变换AMT(http://blog.csdn.net/lin453701006/article/details/79026631)或信号决定变换SDT的主变换,两者通过率失真优化进行选择。第二阶段是使用模式依赖的不可分二次变换MDNSST(http://blog.csdn.net/lin453701006/article/details/79030862)的二次变换。这里介绍第一阶段:信号决定变换SDT。
考虑帧内帧间都有很多相似的块,提出信号决定变换探索通过KLT增强编码性能。这个训练后的KLT可以更有效的集中能量。
利用非局部相关性训练KLT流程如下:
1.获取当前块C的参考块R,包含模板tb和当前块的预测块p。
2.在重构区域搜索N个最接近块。
3.使用残差(最接近块减预测块)训练一维KLT。
因为编码的原始块在解码器端搜索相似候选块时是未知的,所以用预测块和重构模板替代原始块进行相似块搜索。这个处理对于4x4,8x8,16x16和32x32多种块尺寸可用。
KLT理论知识学习:http://blog.csdn.net/lin453701006/article/details/79083760
众所周知,KLT是能量集中效率最优的变换。通过对重构区域进行搜索,获得N个和参考块最近似的块 xi,i=1,2,...,N x i , i = 1 , 2 , . . . , N 。这里 xi=(xi1,xi2,...,xiD)T x i = ( x i 1 , x i 2 , . . . , x i D ) T ,D(示变换块尺寸的矢量维度。例如,对于4x4的编码块,N为16。这些编码块减掉预测p得到残差块 ui,i=1,2,...,N u i , i = 1 , 2 , . . . , N ,其中 ui=(xi−p)/N−−√ u i = ( x i − p ) / N 。这些残差块被用做KLT的零均值训练样本。N个训练样本可以用 U=(u1,u2,...,uN) U = ( u 1 , u 2 , . . . , u N ) 表示,是一个DxN矩阵。考虑其协方差矩阵Σ:
该矩阵维度为DxD。KLT基为基于这个协方差矩阵的特征向量。对于原始图像/视频内容,经过测试发现候选数选择为N=100,性能就足够好了。
为了降低算法复杂度,使用了一个针对大尺寸块KLT的快速算法。Σ的尺寸为DxD,但 UTU U T U 的维度NxN要比它小很多。我们计算 Σ′=UTU Σ ′ = U T U 的特征矢量ϕ,满足以下等式:
ϕ表示特征矢量矩阵,Λ是一个特征值对角矩阵。对上述等式左右两侧乘以U:
对等式增加括号:
列向量 Uϕ U ϕ 是 UTU U T U 的特征值,对应Λ矩阵对角元素。令 φ=Uϕ φ = U ϕ 。这说明高维协方差矩阵 UTU U T U 的特征值可以通过U乘以特征值ϕ得到,其中ϕ由低维协方差矩阵 UTU U T U 得到。φ和Λ维度均为DxN。 UTU U T U 的其他D-N个特征值具有零特征值。可以使用Schmidt正交变换来填充着D-N个特征值来获得DxD的特征值矩阵。
为了降低矩阵乘法的复杂度,可以使用已获得的N个特征值来进行KLT变换,剩余D-N个变换系数置为0。这样不会使性能衰减,因为从采样点训练的基和编码块高度相关,前N个投影会覆盖信号能量绝大部分。
在JEM中,上述的KLT被用于块级别。为了更好的适应视频内容,该提案支持4x4,8x8,16x16和32x32的编码块。在JEM编码器端,率失真优化被用于决定使用SDT还是AMT。
JEM中,提出了基于KLT的SDT,和AMT竞争,选率失真代价小的用作主变换。