1.dct 变换对象是MxN的图像块或残差块,其处理单位为块。

简单说,两边同时乘以一个A然后将原本时域信号投射到频域信号(个人理解就是颜色变换的频率),频域信号中相关性比较小。这个过程完事之后就将原来的每个信号点变成了一系列的系数矩阵。在解码端如果直到A转置的话,将解码得到的系数矩阵重新乘以这个转置A就得到了原来的信号值(残差块或者图像块)。

 

这样变换完系数矩阵后,主要的信息其实集中在DC系数,也就是最左上角那个,其他的信息由于相关性很强并不是很重要,所以可以某种程度上,丢弃一部分。下一步的量化就是讲系数矩阵中一部分值丢弃掉,通过一定的准则。

 

下一步的量化就是讲系数矩阵一部分某种程度上的一种丢弃。

 

这样系数矩阵会有很多的0,在高频区域,但是由于0集中的区域在矩阵中是右下角,高频位置,所以要进行编码前首先要对他们进行一次重排序,将0集中一下。标准中使用的重排序就是zigzag扫描,将4×4,8×8,16×16映射到一个一维的矩阵上,而且此时0的位置在后面,为后面的熵编码提供了方便。

 

然后就是熵编码,先记录自己的问题。

代码中所说dcac是分开编码不懂,但是代码里面确实这么写了,对一个数字编码,然后在对其他15个数字编码,有什么好处吗。

 

貌似上面重排序之后还有一个游程过程?

先记录下。所谓游程就是对我们变换后的一维数组的另一种表示方式,不是一系列的数字,而是一系列的向量(run-level-lastrun表示当前系数前0的个数,level表示当前系数的大小,last表示自己是不是最后一个非0系数。例子

160,0-3,5,6,0,0,0,0-7  

0,160)(2-3,0)(0,5,0)(0,6,0(4,-7,1)

 

熵编码的输入很多。。。。。。。。。。。。。。。。。。。。。。。。这里是以前没有考虑到的

有量化后的传输系数(就是上面说那个向量),

运动矢量(运动补偿块在x方向和y方向上的偏移,具有整数或者半像素精度),

标记点(视频流的同步标志),

头信息(宏块的头信息,帧的头信息,流的头信息)和

辅助信息(又称side信息,视频解码的次要信息)

 

Cavlc 

首先编码非零系数的总数和+/-1序列的个数还有一个nc 它们三个按照以往的统计量信息来查表确定编码的长度

然后编码刚才trailingone的符号,刚才是1的个数,这里还要添上符号

 

这个是对level完美的讲解

http://www.chinavideo.org/viewthread.php?tid=1057&extra=page%3D3%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D4

 

 

在看一遍cavlc过程(指示对残差来说)

1.首先编码自己本身的非0系数个数和最后面1的个数。同时根据周围的非0个数来查找表,来决定自己的码长。

2.上面编码了最后1的个数,第二部要编码1的符号。

3.编码level,不知道为什么这么做,但是上面那个过程非常明晰

http://www.chinavideo.org/viewthread.php?tid=1057&extra=page%3D3%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D4

 

4.非0系数前的0的个数

5.0游程

 

晚上继续总结

 

 

 

 

 

 

版权声明:本文为hatreds原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hatreds/archive/2012/05/04/2483040.html