自适应扫描顺序算法的实现步骤分三步:
- 对于每帧之间的预测,初始化为一组二维数组{S1[n][n] ,S2[n][n],……, Sm[n][n]},其中m是多少帧间预测模式,n是转换的每个维度的大小。
对于4*4的转换,n=4;8*8,n=8;S用来保存系数矩阵的总和。
2. 对于每一个n*n大小的块
(a)如果这是第一个P帧,用标准的zig-zag扫描顺序,否则就根据帧间预测模式产生自适应排序。
(b)把这个块内的量化系数的绝对值进行加和存储到Si[n][n],i就是选择的这个块的帧间预测模式。
3. 对于每一个帧间预测模式i(i=1,。。。。m)
(a)按降序对Si[n][n]排序,排序的过程中保存好每一个值在顺序中的原坐标。
(b)建立一个有原指数顺序的2维数组,这个将变成下一个帧间预测在这个模式的新的扫描顺序。
具体的理解:
首先把一帧分成m块,产生m个预测模式:{S1[n][n], S2[n][n], …, Sm[n][n]},
对于每一个n*n的块,如果它是第一个p帧,则按照标准的zig-zag顺序扫描,否则就用帧内模式的自适应扫描。
自适应扫描方法中:就会把每一个块的量化系数的绝对值加到Si[n][n]中。
然后把Si[n][n]里面的数字按降序排列,并保存好每一个数字原来的位置,扫描的时候就按照降序进行。