Matlab的图像压缩技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

M a t l a b的图像压缩技术-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

Matlab的图像压缩技术

一.目的要求

掌握Matlab图像图像压缩技术原理和方法。理解有损压缩和无损压缩的概念,了解几种常用的图像压缩编码方式,利用matlab进行图像压缩算法验证。二.实验内容

1、观察颜色映像矩阵的元素

>> hot(8)

ans =

0.3333 0 0

0.6667 0 0

1.0000 0 0

1.0000 0.3333 0

1.0000 0.6667 0

1.0000 1.0000 0

1.0000 1.0000 0.5000

1.0000 1.0000 1.0000

数据显示第一行是1/3红色,最后一行是白色。

2、pcolor显示颜色映像

>> n=16;

>> colormap(jet(n));

>> pcolor([1:n+1;1:n+1]);

>> title('Using Pcolor to Display a Color )Map');

图2 显示颜色映像

3、colorbar显示当当前坐标轴的颜色映像>> [x,y,z]=peaks;

>> mesh(x,y,z);

>> colormap(hsv);

>> axis([-3 3 -3 3 -6 8]);

>> colorbar;

图3 显示当前坐标轴的颜色映像

4、图像格式转换

g=rgb2gray(I);

g=rgb2gray(I);

>> imshow(g),colorbar;

图4-1 原图像saturn.png

图4-2转换后的图像

5、求解图像的二唯傅里叶频谱I=imread('cameraman.tif');

>> imshow(I)

>>

J=fftshift(fft2(I));

>> figure;

>> imshow(log(abs(J)),[8,10])

图5-1 原图像cameraman.png

图5-2 频谱图

将图像更换一下

I=imread('pout.tif');

imshow(I)

J=fftshift(fft2(I));

figure;

imshow(log(abs(J)),[8,10])

图5-3 原始图 pout.tif

图5-4 频谱图

6、利用DCT变换进行图像压缩

RGB=imread('peppers.png');

>> I=rgb2gray(RGB);

>> J=dct2(I);

>> imshow(log(abs(J)),[]),colormap(jet(64)),colorbar

图6-1 DCT变换后二维变换谱J(abs(J)<10)=0;

>> K=idct2(J); %逆变换

>> figure,imshow(I)

figure,imshow(K,[0 255])

图6-2 原始图像

图6-3 压缩还原后的图像

仔细看我们可以发现,压缩还原后的图像比较模糊。

7、利用离散余弦变换进行JPEG图像压缩

>> I=imread('cameraman.tif');

>> I=im2double(I);

>> T=dctmtx(8); %产生二维DCT变换矩阵

>> B=blkproc(I,[8 8],'P1.*x',T,T'); %改成点乘

>> 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 ;zeros(4,8)] %二值掩膜用来压缩DCT系数

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

>> B2=blkproc(B,[8 8],'P1*x',mask); %只保留10个系数

>> I2=blkproc(B2,[8 8],'P1*x*P2',T,T'); %逆DCT >> subplot(1,2,1);

>> imshow(I);title('原图像');

>> subplot(1,2,2);

>> imshow(I2);title('压缩图像');

图7-1 原图像和第一种压缩后的图像>> mask=[1 1 0 0 0 0 0 0;1 0 0 0 0 0 0 0 ;zeros(6,8)] mask =

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

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

图7-2 原图像和第二种压缩后的图像>> mask=[1 0 0 0 0 0 0 0 ;zeros(7,8)]

mask =

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

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

图7-3 原图像和第三种压缩后的图像

相关文档
最新文档