实验八、图像变换压缩编码
四, 实验内容 1.以 DCT 变换为例,采用标准亮度量化表,得有损压缩的变换值,并计算并显示其直方
图;
2.采用标准量化表的上述变换值反量化回去后采用 DCT 变换回图像,比较并计算压缩 前后图像的差异(均方差 MSE,峰值信噪比 PSNR 等);
3.根据由 1 计算得到的统计直方图试判断采用 HUFFMAN 编码的平均码长。 MATLAB 具体的实现代码: clear ALL; cd d: %问题一,DCT 变换,运用标准亮度量化表,得到有损压缩的量化值,并显示其直方图 %jpeg 亮度量化表 M=[16 11 10 16 24 40 51 61;
end end if (b==504 & a==504)%当抵达倒数第二个边界时结束该循环
break; end if (b==504)
a=a+8;b=0;
未信的我
continue;%当完成一次 8 行循环,行向下移动 8,B 置 0,重新从左到右的开始 end b=b+8;%当 A 小于 504 时,继续向右推移计算 end
仅供参考
% 统计概率分布 zhifangtu=zeros(1,511);%定义-255—255 范围的一维空间 for i=1:1:512
for j=1:1:512 zhifangtu(lianghuazhi(i,j)+256)=(zhifangtu(lianghuazhi(i,j)+256)+1);
%将统计值多添加 256,以此来避免负数灰度值的出现,最后统计灰度值,并计算概率 end end %定义了重新描述直方图的横坐标 X=[-255:255]; plot(X,zhifangtu);title('概率统计');
for x=1:1:8 for y=1:1:8
未信的我
TEMP(x,y)=J(x+a,y+b); end end TEMP=dct2(TEMP); %8*8 的大子块循环 for x=1:1:8 for y=1:1:8
lianghuazhi(x+a,y+b)=round((TEMP(x,y)/M(x,y))); end end if (b==504 & a==504)%当抵达倒数第二个边界时结束该循环 break; end if (b==504) a=a+8;b=0; continue;%当完成一次 8 行循环,行向下移动 8,B 置 0,重新从左到右的开始 end b=b+8;%当 A 小于 504 时,继续向右推移计算 end
原始图像
未信的我
逆变换后的图像
未信的我
未信的我
问题三、根据由 1 计算得到的直方图试判断采用 Huffman 编码的平均码长。 答:由 1 的直方图可以确定一个大的分布值为-3—3。即编码需要的比特数位
3 位。其中有一位来表示正负。
五, 讨论与分析 分析与讨论,有可能增强压缩率的部分在哪?
在对量化后取直方图中可以大致估计其分布的范围,减少不必要的冗余数据。
5
x 10 2.5
概率统计
未信的我
2
1.5
1
0.5
0
-300
-200
-100
0
100
200
300
%问题二,DCT 的逆变换,即将有损的量化值乘以量化表,并进行逆变换处理 nibianhuan=zeros(512,512);%产生 512*512 逆变换矩阵 TEMP2=zeros(8,8);%产生 8*8 临时矩阵 a=0;b=0; while 1
%显示变换与逆变换后的图像 nibianhuan=uint8(nibianhuan); subplot(1,2,1),imshow(I1); subplot(1,2,2),imshow(nibianhuan);
%计算 mse 均方差及峰值信噪比 MSE=0;PSNR=0; e = double(J)-double(nibianhuan); [p, q] = size(e); MSE = sqrt(sum(sum(e.^2))/(p*q)); %k 为图像是表示地个k - 1; a = fmax.^2; b = sum(sum(e.^2)); PSNR = 10*log(p*q*a/b); %f 方法二 %PSNR2=20*log(256/5.4585);
未信的我
实验八、图像变换压缩编码
一, 目的 掌握变换压缩编码的原理与方法 了解有损压缩编码图像的质量评估的指标
二, 实验条件 1) 微型计算机:INTEL 奔腾及更高
2) 3) 三,
MATLAB 典型的灰度、彩色图像文件 原理
1) 去除数据冗余度可以有效地压缩数据
2) 图像编码压缩的主要技术指标:压缩比,客观评价 SNR,主观评价
for x=1:1:8 for y=1:1:8 T;b)*M(x,y) ); end
end TEMP3=idct2(TEMP2); %8*8 的大子块循环 for x=1:1:8
for y=1:1:8 nibianhuan(x+a,y+b)=TEMP3(x,y);
12 12 14 19 26 58 60 55; 14 13 16 24 40 67 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; ]; I_=imread('test.jpg');%读入原始图像 I1=rgb2gray(I_);I2=double(I1); J = imresize(I2,[512 512]);%调整图像的大小 TEMP=zeros(8,8);%产生 8*8 临时矩阵 lianghuazhi=zeros(512,512);%产生 512*512 量化值矩阵 a=0;b=0; while 1