《多媒体技术》实验指导书 - 图文 联系客服

发布时间 : 星期六 文章《多媒体技术》实验指导书 - 图文更新完毕开始阅读87e324c008a1284ac8504339

实验二 JEPG 图像编码

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0

0

0 0 0 0 0 1 0 0

0

0

0

0

0];

显示的结果就是:

图 4 若 I1

= [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0

0

0

0

0

0

1];

结果如下:

18

实验二 JEPG 图像编码

图 5

(3) 根据 JPEG 标准对标准测试图像做 DCT 变换,并队 DCT 系数进行量化(选择量化

步长为 8);然后做反了量化和反变换,得到重建图像,比较原始图像和重建图像的 差别。

该实验的源代码如下: %读入指定途径的图像

rgb=imread('D:\\MATLAB6p5\\work\\test.jpg'); %RGB 转换为 YUV,即 YCbCr yuv=rgb2ycbcr(rgb);

%将得到的 YUV 转换为可进行数学运算的 double 类型,原来为 uint8 类型 yuv=double(yuv);

%分别提取其中的 Y,U,V 矩阵 y=yuv(:,:,1); u=yuv(:,:,2); v=yuv(:,:,3);

%设定量化步长 eql=8;

%将 Y,U,V 矩阵分割为 8*8 的小块,并对每个小块进行 DCT 变换 y_dct=blkproc(y,[8,8],'P1*x*P2',T, T'); u_dct=blkproc(u,[8,8],'P1*x*P2',T, T'); v_dct=blkproc(v,[8,8],'P1*x*P2',T, T'); %设定块操作时 dct 矩阵 T = dctmtx(8);

%将得到的 DCT 系数除以量化步长 y_dct=y_dct/eql;

u_dct=u_dct/eql;

19

实验二 JEPG 图像编码

v_dct=v_dct/eql;

%将量化后的系数四舍五入 y_dct_c=fix(y_dct); u_dct_c=fix(u_dct); v_dct_c=fix(v_dct);

%反量化

y_dct_c=y_dct_c*eql; u_dct_c=u_dct_c*eql; v_dct_c=v_dct_c*eql;

%进行 DCT 反变换

y_idct=blkproc(y_dct_c,[8,8],'P1*x*P2', T^-1,(T')^-1); u_idct=blkproc(u_dct_c,[8,8],'P1*x*P2', T^-1,(T')^-1); v_idct=blkproc(v_dct_c,[8,8],'P1*x*P2', T^-1,(T')^-1); %恢复为 YUV 矩阵,转换为 uint8 类型, yuv(:,:,1)=y_idct; yuv(:,:,2)=u_idct; yuv(:,:,3)=v_idct; yuv=uint8(yuv); %YUV 转换为 RGB rgb1=ycbcr2rgb(yuv); %显示两幅图像

subplot(211),imshow(rgb),title('原始图像'); subplot(212),imshow(rgb1),title('处理后图像');

运行程序后,得到的结果如下图显示:

原始图像

处理后图像

图 6 实验 c——内容 1

将测试图片替换,有

20

原始图像

实验二 JEPG 图像编码

处理后图像

图 7 实验C——内容 2

由实验的结果可知,在量化步长为 8 的情况下,根据处理前后图像的对比,尽管损 失了一些图像信息,但是基本上和与原图差别不大。

(4) 改变量化步长,重复步骤(3)观察量化步长对图像质量的影响。

将实验(3)中源程序中的量化步长 eql=32,重复该实验,得到如下的结果:

原始图像

处理后图像

图 8 实验 D——内容 1 原始图像 处理后图像

21