当前位置:文档之家› 数字视频编解码 2012 试题1

数字视频编解码 2012 试题1

2011第一学期 数字视频编解码试题 (研究生)1、在数字视频编码过程中,运动补偿是预测编解码的基本形式之一,请阐述其基本理论及其重要性。

运动补偿是一种描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻)差别的方法,具体来说是描述前面一帧(相邻在这里表示在编码关系上的前面,在播放顺序上未必在当前帧前面)的每个小块怎样移动到当前帧中的某个位置去。

这种方法经常被视频压缩/视频编解码器用来减少视频序列中的空域冗余。

一个视频序列包含一定数量的图片--通常称为帧。

相邻的图片通常很相似,也就是说,包含了很多冗余。

使用运动补偿的目的是通过消除这种冗余,来提高压缩比。

2、请阐述一般数字视频信号的DCT 变换编码的步骤及其重要特点。

数字图像信号的DCT 变换编码过程为:将图像N ×N 的图像矩阵X 变换成N ×N 的系数矩阵Y 。

变换过程可以用变换矩阵A 来描述。

N ×N 矩阵的DCT 变换如下: T YAXA =N ×N 矩阵的IDCT 变换如下:TX A YA =其中A 为N ×N 转换矩阵,A 中的各个元素为:(21)cos( > 0)2ij i j i A C i N π+= 其中0>0), i C i C 然后对变换后的系数进行量化,量化通过降低整数精度,以减少存储位数,增加0系数数目,从而达到数据压缩目的。

然后进行重排序,把非零系数集中在一起,使剩下的零系数能被更加有效的编码。

然后进行熵编码,将描述视频流的一串符号编码成适于传输的压缩比特流。

从而获得高效压缩结果。

3、试比较Huffman 编码与算术编码的异同点。

相同点:霍夫曼编码和算术编码都是是根据出现的概率将输入的符号映射编码成一系列码字。

不同点:霍夫曼编码是把每一个输入符号映射为一个码字,而算术编码是将一系列数据符号映射为一个单独的小数,所以霍曼编码每一个符号的映射码字必须是整数个比特,而算术编码每个传输符号不需要被编码成整数比特。

因此算术编码的编码性能优于霍夫曼编码。

4、如何理解MPEG-4视频编码的“分档次和等级”?MPGE-4的功能内容非常繁多而且详细,包含低质的编码和高质的编码,还包括各种视频对象的编码等等,这些功能全部在编码器中实现是非常困难的,而且通常是不必要的。

为了使用不同的应用场合,MPEG-4进行了“分档次和等级”,对不同的画面质量的编码方式做了详细的分类,对不同档次做了标准,从而是编码器在不同性能的处理器和不同的应用目标上都可以实现通用性。

5、设某时刻的一块图像亮度抽样信号值为f (x ,y )8×8,采用Z 形扫描和变字长编码(可以借助于任意的计算工具如C 语言或MA TABL 工具等,但要求答卷中带源程序)139 144 149 153 155 155 155 155 144 151 153 156 159 156 156 156 150 155 160 163 158 156 156 156 f (x ,y )8×8= 159 161 162 160 160 159 159 159 159 160 161 162 162 155 155 155 161 161 161 161 160 157 157 157 162 162 161 163 162 157 157 157 162 162 161 161 163 159 158 158(1)求出该块亮度信号的离散余弦变换(DCT )矩阵表达式。

(2)若采用Q coeff =roungd(coeff/Q step )的量化器,其中量化步长Q step =16。

求出其量化(Q )后的矩阵表达式。

(3)如果上一帧亮度信号的直流值为25,根据所得的量化矩阵表方式,写出该帧亮度信号的直流信号编码形式,并画出编码结构框图。

(4)根据所得的量化矩阵表方式,写出该帧亮度信号的交流信号编码形式,并画出编码结构框图。

(5)根据所得亮度信号的交直流编码结果,分析解码原理。

并画出解码结构框图。

(6)针对上述(2)的结果,求出其反量化(IQ)的表达式。

(7)根据所求的编码形式即编码结果,求出压缩比和冗余度。

(8)求出反离散余弦变换(IDCT)矩阵表达式,并与原亮度信号的矩阵系数进行比较,写出其差值矩阵表达式,分析出现差值的原因。

(1) dct系数矩阵g =1.0e+003 *[ 1.2597 -0.0011 -0.0121 -0.0050 0.0020 -0.0017 -0.0025 0.0012-0.0228 -0.0173 -0.0061 -0.0034 -0.0027 -0.0000 0.0002 -0.0010-0.0108 -0.0094 -0.0017 0.0018 0.0000 -0.0010 -0.0004 -0.0003-0.0072 -0.0018 0.0003 0.0013 0.0010 -0.0000 -0.0002 0.0005-0.0005 -0.0009 0.0014 0.0017 -0.0002 -0.0007 0.0008 0.00110.0017 -0.0001 0.0017 -0.0005 -0.0007 0.0015 0.0009 -0.0009-0.0012 -0.0004 -0.0004 -0.0014 -0.0006 0.0017 0.0012 -0.0008-0.0026 0.0016 -0.0037 -0.0019 0.0019 0.0012 -0.0006 -0.0004](2) 量化后的矩阵Q =[79 0 -1 0 0 0 0 0-2 -1 0 0 0 0 0 0-1 -1 0 0 0 0 0 0-1 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0](3)直流系数采用DPCM编码方式,当前快的直流系数为79, 79-25 = 54;直流系数的编码模型如下:(4)编码所得到的run level 对如下交流系数的编码模型如下:编码形式如下:(5)解码的框图如下图:直流分量解码交流分量解码(6)Y1=Yq.*Q;%%反量化X1=A’*Y1*A;%%重建Xd=X-X1;%%差值(7)视频帧的最终编码长度为 : 11+8+3+3+3+6+3 +4 = 41压缩比为 8*8*8/41=12.5;视频的冗余度为1-1/12.5 =92%(8)差值出现的主要的原因是量化误差,量化后的DCT系数不能完全无损恢复。

解码后的视频与原始视频帧的差值矩阵。

e =[-3.5274 -1.1957 -0.4625 -0.7396 -1.7122 -2.9279 -2.8651 -2.4719-3.1894 1.5547 0.0499 -0.2315 0.8735 -2.3464 -1.5216 -0.7160-4.2196 -0.8536 1.7908 3.0108 -2.2590 -2.9776 -1.0036 0.4239-1.3073 -0.4028 -0.7633 -3.2432 -2.1057 -0.5241 2.4449 4.4109-3.9417 -3.8041 -3.7340 -2.6513 -0.9048 -4.7607 -1.3610 0.8381-0.7216 -1.6919 -2.8212 -2.9991 -2.5347 -2.6511 0.5491 2.64023.5831 2.3204 -0.3491 0.7673 0.4677 -2.3544 0.3056 2.10446.2289 4.7322 1.6302 0.1815 2.2703 -0.1169 1.1107 2.6754]源程序:clear,clc%%f=[ 139 144 149 153 155 155 155 155144 151 153 156 159 156 156 156150 155 160 163 158 156 156 156159 161 162 160 160 159 159 159159 160 161 162 162 155 155 155161 161 161 161 160 157 157 157162 162 161 163 162 157 157 157162 162 161 161 163 159 158 158];g=dct2(f);%%输出DCT变换系数q=16;%%%运用量化矩阵对DCT系数进行量化Q=g./q;Q=round(Q); %%量化取整Z=zigzag(Q); %%对量化矩阵进行zigzag扫描P=Q.*q;%%%进行反量化p=idct2(P); %%进行反DCT变化e=f-p; %%输出误差矩阵%%%%%%%%%%%%%%%%%%%%zigzag函数%%%%%%%%%%function b=zigzag(a)[n,m]=size(a);if(n~=8 & m~=8)error('Input array is NOT 8-by-8');end% Set up array for fast conversion from row/column coordinates tozigzag = [ 0, 1, 8, 16, 9, 2, 3, 10, ...17, 24, 32, 25, 18, 11, 4, 5, ...12, 19, 26, 33, 40, 48, 41, 34, ...27, 20, 13, 6, 7, 14, 21, 28, ...35, 42, 49, 56, 57, 50, 43, 36, ...29, 22, 15, 23, 30, 37, 44, 51, ...58, 59, 52, 45, 38, 31, 39, 46, ...53, 60, 61, 54, 47, 55, 62, 63];zigzag = zigzag + 1; %% 下标加1aa = reshape(a,1,64); %% 将输入块变成1*64的向量b = aa(zigzag); %% 得到zigzag扫描结果end。

相关主题