视频图像帧内编码实验1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
视频图像帧内编码实验
一、 实验目的
1. 了解多媒体通信中图像压缩技术
2. 熟悉视频帧内压缩编码过程
3. 掌握二维DCT 变换算法
二、 实验原理
视频帧内编码有多种模式,最基本的是基于8×8块的DCT 顺序编码,将一帧图像分为8×8的块,然后按照从左至右、自上而下的顺序,对块进行DCT 、量化和熵编码。其编、解码框图如下:
图1 基于DCT 的顺序编码框图
图2 基于DCT 的顺序解压缩框图
视频帧内压缩编码算法的主要步骤:
1) 正向离散余弦变换(DCT)。 2) 量化(quantization)。 3) Z 字形扫描(zigzag scan)。
DCT 解码器
IDCT
逆量化器
熵解码器
量化表
熵编码表
压缩图像数重构图像
DCT
熵编码器
量化表
熵编码表
压缩图像数据
源图像数据
基于DCT 的编码器
图像子块
量化器
4) 使用差分脉冲编码调制(differential pulse code modulation ,DPCM)
对直流系数(DC)进行编码。
5) 使用行程长度编码(run-length encoding ,RLE)对交流系数(AC)进行
编码。
6) 熵编码(entropy coding)。
三、 实验内容
按照上述压缩过程实现一幅图像的压缩,图像编码流程如下:
图3 JPEG 图像编码流程
1. DCT 变换
对8×8的图像数据块进行二维DCT 的变换,把能量集中在少数几个系数上,从而达到数据压缩的目的。: DCT 变换公式:
DCT 反变换公式:
输入原图像
8×8二维DCT 变换
量化
DC 系数差分编码 AC 系数游程编码
熵编码
生成压缩图像
文件保存
输出原图像
8×8二维IDCT 变换
逆量化
DC 系数解码
AC 系数解码码
熵解码
读取压缩图像文件
表说明
量化表
16
)12(cos
16
)12(cos
),()()(4
1),(7
07
π
π
υv y u x y x f v C y C u F x y ++=
∑∑
==
其中:
二维DCT 变换可以分解为行和列的一维DCT 变换的组合运算,也可将8×8的块分为更小的子块,直接对二维数据进行2维快速余弦变换。 2. 量化
量化表达式为:
其中 T(u ,v)是推荐的量化矩阵,详见附录1量化矩阵表 3. 熵编码
对直流DC 系数和交流AC 系数分别采用不同的压缩编码算法 1)
DC 系数编码:
把所有子块的DC 系数集合在一起,采用差分编码的方法表示。编码步骤为:
a ) 将初始值设为128,对相邻块的DC 系数F(0,0)进行差分运算
b )将差分值改写为[size,value] (尺寸,幅值)的符号对。尺寸取2
的对数加1
c ) 按照表2、3对该符号对进行编码
2)
AC 系数编码 AC 系数编码步骤为:
a ) 以块为单位,从AC01开始对块内的量化数据进行Z 形行程
扫描,记录两个非零值的大小和其间连续零的个数
b )将扫描结果改写为[RunLength ,level](行程、幅度)的符号对,
其中RunLength 代表该非零值和它前一个值之间0的个数,以(EOB)表示块结束。
c ) 按照表3对上述的符号对进行编码。若符号在表中查不到对
应码字,用ESC 码表示,然后按表4,5对RunLength 和level 进行编码。
4. 对编码后的图像数据进行解码,与原始图像数据进行比较。
16
1216
124
1707
π
π
v y u x v u F v C u C y x f u v )(cos
)(cos
),()()(),(++=
∑∑
==⎪⎩
⎪
⎨⎧≠==
0v u, 0v u, 12
1
)()
(v C u C ⎥
⎦
⎤⎢⎣⎡=),(),(),(ˆv u T v u F NINT v u F
四、实验要求
1.根据实验内容要求编写编解码程序,所用编程语言自选,实验完成后提交
完整源程序,并在关键处加上详细批注
I=imread('cameraman.tif')
I=im2double(I) %转换图像矩阵为双精度型。
J=dct2(I);
T=dctmtx(8) %产生二维DCT变换矩阵
a1=[16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
18 22 37 56 68 109 103 77;
24 35 55 64 81 104 113 92;
49 64 78 87 103 121 120 101;
72 92 95 98 112 100 103 99 ];
for i=1:8:200
for j=1:8:200
P=I(i:i+7,j:j+7);
K=T*P*T';
I2(i:i+7,j:j+7)=K;
K=K./a1; %量化
K(abs(K)<0.03)=0;
I3(i:i+7,j:j+7)=K;
end
end
figure;
imshow(I2);
title('DCT变换后的频域图像'); %显示DCT变换后的频域图像
for i=1:8:200
for j=1:8:200
P=I3(i:i+7,j:j+7).*a1; %反量化