1 / 21

实验十 图像压缩的 MATLAB 实现

实验十 图像压缩的 MATLAB 实现. 一、实验目的. 了解有关数字图像压缩的基本概念,熟悉 MATLAB 软件中关于数字图像压缩的基本方法,掌握利用 MATLAB 软件进行数字图像压缩的方法。. 二、相关知识. 在当今的信息时代,图像在表达各种信息时有着不可替代的作用,但图像信息的缺点之一就是数据量非常庞大,因此,无论是存储还是传输,都需要对图像数据进行压缩,数据压缩的方法有很多,我们这里介绍一种基于 DCT (离散余弦变换)的图像压缩方法,并介绍用 MATLAB 软件来实现这个算法。 基于 DCT 的压缩方法如下:

faunia
Download Presentation

实验十 图像压缩的 MATLAB 实现

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验十 图像压缩的MATLAB实现

  2. 一、实验目的 • 了解有关数字图像压缩的基本概念,熟悉MATLAB软件中关于数字图像压缩的基本方法,掌握利用MATLAB软件进行数字图像压缩的方法。

  3. 二、相关知识 • 在当今的信息时代,图像在表达各种信息时有着不可替代的作用,但图像信息的缺点之一就是数据量非常庞大,因此,无论是存储还是传输,都需要对图像数据进行压缩,数据压缩的方法有很多,我们这里介绍一种基于DCT(离散余弦变换)的图像压缩方法,并介绍用MATLAB软件来实现这个算法。 • 基于DCT的压缩方法如下: • (1)首先将输入图像分解为8×8或16×16的块,然后对每个块进行二维DCT变换,这里,一个N×N图像块f(x,y)的二维离散余弦变换公式如下:

  4. 二、相关知识 • 二维离散余弦反变换公式如下: • 基于DCT的压缩方法如下: • (1)首先将输入图像分解为8×8或16×16的块,然后对每个块进行二维DCT变换,这里,一个N×N图像块f(x,y)的二维离散余弦变换公式如下:

  5. 二维离散余弦反变换公式如下: • 其中:

  6. 在MATLAB中, • 称为DCT的变换核 • 其中:

  7. 在MATLAB中, • 称为DCT的变换核 • MATLAB图像处理工具箱提供了一些函数进行DCT变换。 • 函数dct2实现图像的二维离散余弦变换,格式为: • B=dct2(A) • B=dct2(A,[M,N]) • B=dct2(A,M,N)

  8. A表示要变换的图像,B表示变换后得到的变换系数矩阵,B和A是同样大小的矩阵,其内容是余弦变换后的系数。A表示要变换的图像,B表示变换后得到的变换系数矩阵,B和A是同样大小的矩阵,其内容是余弦变换后的系数。 • M和N是可选参数,表示对图像矩阵A的填充或截取。 • 函数idct2实现图像的二维离散余弦反变换,语法变换。 • 函数dct2实现图像的二维离散余弦变换,格式为: • B=dct2(A) • B=dct2(A,[M,N]) • B=dct2(A,M,N)

  9. A表示要变换的图像,B表示变换后得到的变换系数矩阵,B和A是同样大小的矩阵,其内容是余弦变换后的系数。A表示要变换的图像,B表示变换后得到的变换系数矩阵,B和A是同样大小的矩阵,其内容是余弦变换后的系数。 • M和N是可选参数,表示对图像矩阵A的填充或截取。 • 函数idct2实现图像的二维离散余弦反变换,语法格式: • B=idct2(A) • B=idct2(A,[M,N]) • B=idct2(A,M,N)

  10. A表示要变换的二维离散余弦变换矩阵,B表示变换后得到的图像,B和A是同样大小的矩阵,其内容是余弦变换后的系数。A表示要变换的二维离散余弦变换矩阵,B表示变换后得到的图像,B和A是同样大小的矩阵,其内容是余弦变换后的系数。 • M和N是可选参数,表示对图像矩阵A的填充或截取。 • 函数dctmtx用于计算二维DCT矩阵,语法格式: • D=dctmtx(n) • 格式: • B=idct2(A) • B=idct2(A,[M,N]) • B=idct2(A,M,N)

  11. A表示要变换的二维离散余弦变换矩阵,B表示变换后得到的图像,B和A是同样大小的矩阵,其内容是余弦变换后的系数。A表示要变换的二维离散余弦变换矩阵,B表示变换后得到的图像,B和A是同样大小的矩阵,其内容是余弦变换后的系数。 • M和N是可选参数,表示对图像矩阵A的填充或截取。 • 函数dctmtx用于计算二维DCT矩阵,语法格式: • D=dctmtx(n) • 其中D是返回的n×n的DCT变换矩阵,如果矩阵A的大小是n×n,D×A是矩阵每一列的DCT变换值,A×D’是A的每一行的DCT变换值。 • dct2(A)的结果与D×A×D’相同,但后者计算速度较快。 • (2)将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。

  12. 基于DCT的解压缩方法如下: • (1)对每个8×8或16×16块进行二维DCT反变换。 • (2)将反变换的矩阵的块合成一个单一的图像。 • 例:把输入图像cameraman.tif划分为8×8的图像块,计算它们的DCT系数,并且只保留64个DCT系数中的10个,然后对每个图像块利用这10个系数进其中D是返回的n×n的DCT变换矩阵,如果矩阵A的大小是n×n,D×A是矩阵每一列的DCT变换值,A×D’是A的每一行的DCT变换值。 • dct2(A)的结果与D×A×D’相同,但后者计算速度较快。 • (2)将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。

  13. 基于DCT的解压缩方法如下: • (1)对每个8×8或16×16块进行二维DCT反变换。 • (2)将反变换的矩阵的块合成一个单一的图像。 • 例:把输入图像cameraman.tif划分为8×8的图像块,计算它们的DCT系数,并且只保留64个DCT系数中的10个,然后对每个图像块利用这10个系数进行逆DCT变换来重构图像。 • 解:程序如下: • clear • I=imread('cameraman.tif'); • I=im2double(I);

  14. T=dctmtx(8); • B=blkproc(I,[8 8],'P1*x*P2',T,T'); %这里T,T'是参数P1、P2的取值 • mask=[1 1 1 1 0 0 0 0 • 1 1 1 0 0 0 0 0 • 1 1 0 0 0 0 0 0 • 行逆DCT变换来重构图像。 • 解:程序如下: • clear • I=imread('cameraman.tif'); • I=im2double(I);

  15. T=dctmtx(8); • B=blkproc(I,[8 8],'P1*x*P2',T,T'); %这里T,T'是参数P1、P2的取值 • mask=[1 1 1 1 0 0 0 0 • 1 1 1 0 0 0 0 0 • 1 1 0 0 0 0 0 0 • 1 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];

  16. B2=blkproc(B,[8 8],'P1.*x',mask); • %这里mask是参数P1的取值 • % 这里可以对B2作进一步的处理,然后加以存储,解码时先读出存储的数据,然后恢复出B2. • I2=blkproc(B2,[8 8],'P1*x*P2',T',T); • 1 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];

  17. B2=blkproc(B,[8 8],'P1.*x',mask); • %这里mask是参数P1的取值 • % 这里可以对B2作进一步的处理,然后加以存储,解码时先读出存储的数据,然后恢复出B2. • I2=blkproc(B2,[8 8],'P1*x*P2',T',T); • subplot(1,2,1); • imshow(I);title('原图'); • subplot(1,2,2); • imshow(I2);title('解压缩图');

  18. subplot(1,2,1); • imshow(I);title('原图'); • subplot(1,2,2); • imshow(I2);title('解压缩图');

  19. 原图 解压缩图 • 虽然我们舍弃了85%的DCT系数,也就是减少了85%的存储量,但可以看到,解压缩图仍然清晰。在我们现在的实验中,没有进行真正的存储,这部分需要一些其它的函数配合工作,留待以后进一步完善。

  20. 三、实验内容 • 1.分别对图像“lenna.tif”、“board.tif”、“peppers.png”进行基于DCT的压缩操作,对每幅图像,分别给出保留1个、2个、3个、…、20个DCT变换系数的解压缩结果,这可以通过调整矩阵mask中1的个数实现,你认为保留几个系数时,图像的恢复效果可以接受,通过观察,对三个图像, • 原图 解压缩图 • 虽然我们舍弃了85%的DCT系数,也就是减少了85%的存储量,但可以看到,解压缩图仍然清晰。在我们现在的实验中,没有进行真正的存储,这部分需要一些其它的函数配合工作,留待以后进一步完善。

  21. 三、实验内容 • 1.分别对图像“lenna.tif”、“board.tif”、“peppers.png”进行基于DCT的压缩操作,对每幅图像,分别给出保留1个、2个、3个、…、20个DCT变换系数的解压缩结果,这可以通过调整矩阵mask中1的个数实现,你认为保留几个系数时,图像的恢复效果可以接受,通过观察,对三个图像,分别给出你的结论。 • 2.完成实验报告,报告中只需要指明程序名,不需要程序和图,只要写明你的结论即可。

More Related