资源简介
图像压缩的代码,使用DCT,变换,量化,熵编码。可以直接运行,运行结果很好。
代码片段和文件信息
%程序功能:模拟DCT编码解码过程,生成带“块效应”的图像
%步骤:灰度图像→DCT→量化→反量化→IDCT
%下一步目标:实现对任意大小图象的处理。(判断图象大小,若不是2的整数次方,则补零)
I=imread(‘Camera.tif‘)
I=im2double(I) %转换图像矩阵为双精度型。
T=dctmtx(8)%产生二维DCT变换矩阵
%计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数
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+7j:j+7);
K=T*P*T‘;
I2(i:i+7j:j+7)=K;
K=K./a1;%量化
K(abs(K)<0.03)=0;
I3(i:i+7j: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+7j:j+7).*a1;%反量化
K=T‘*P*T;
I4(i:i+7j:j+7)=K;
end
end
figure;
imshow(I4);
title(‘复原图像‘);
imwrite(I4‘复原图像6.jpg‘);
B=blkproc(I[88]‘P1*x*P2‘TT‘) %二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个
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) %只保留DCT变换的10个系数
I2=blkproc(B2[8 8]‘P1*x*P2‘T‘T) %重构图像
figure
imshow(I)
title(‘原始图像‘);
figure
imshow(I2);
title(‘压缩图像‘);
figure
imshow(dct2(I));
figure
mesh(dct2(I))
colorbar(‘horiz‘)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 65126 2014-05-28 17:53 图像压缩\Camera.tif
文件 1661 2014-06-04 11:02 图像压缩\tuxiangyasuo.m
目录 0 2014-06-04 11:42 图像压缩\
- 上一篇:QT对xm
l增删查改读取,节点自定义,键值自定义 - 下一篇:批量单波段组合IDL程序
评论
共有 条评论