Matlab的图像压缩技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 原图像和第三种压缩后的图像