📄 exp4.m
字号:
clear all;
close all;
%亮度量化表
LQT=[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];
%色度量化表
CQT=[17 18 24 47 99 99 99 99;
18 21 26 66 99 99 99 99;
24 26 56 99 99 99 99 99;
47 66 99 99 99 99 99 99;
99 99 99 99 99 99 99 99;
99 99 99 99 99 99 99 99;
99 99 99 99 99 99 99 99;
99 99 99 99 99 99 99 99];
%灰度图象处理
I1 = double(imread('Lena.bmp'));
[M,N] = size(I1);
last_Z = 0;
jpeg1 = '';
for i = 0:M/8-1
for j = 0:N/8-1
S = I1((1+8*i):(8*(i+1)), (1+8*j):(8*(j+1)));%分割成8*8处理
S = dct2(S);%DCT
S = round(S./LQT);%亮度量化
Z = Zigzag(S);%Zigzag扫描
DCH = DC_Huffman(Z(1),last_Z,1);%直流分量编码
ACH = AC_Huffman(Z(2:end),1);%交流分量编码
last_Z = Z(1);
jpeg1 = [jpeg1 DCH ACH];
end
end
rate1 = 8*M*N/length(jpeg1);%压缩比
%彩色图像处理
I2 = double(imread('LenaRGB.bmp'));
%转换成亮度
I2 = rgb2ycbcr(I2);
Y = I2(:,:,1);
Cr = I2(:,:,2);
Cb = I2(:,:,3);
[M,N] = size(Y);
Y_last_Z = 0;
Cr_last_Z = 0;
Cb_last_Z = 0;
Y_jpeg2 = '';
Cr_jpeg2 = '';
Cb_jpeg2 = '';
for i = 0:M/8-1
for j = 0:N/8-1
S1 = Y((1+8*i):(8*(i+1)), (1+8*j):(8*(j+1)));%分割成8*8处理
S2 = Cr((1+8*i):(8*(i+1)), (1+8*j):(8*(j+1)));
S3 = Cb((1+8*i):(8*(i+1)), (1+8*j):(8*(j+1)));
S1 = dct2(S1);%DCT
S2 = dct2(S2);
S3 = dct2(S3);
S1 = round(S1./LQT);%亮度量化
S2 = round(S2./CQT);%色度量化
S3 = round(S3./CQT);%色度量化
Z1 = Zigzag(S1);%Zigzag扫描
Z2 = Zigzag(S2);
Z3 = Zigzag(S3);
DCH_Y = DC_Huffman(Z1(1),Y_last_Z,1);%直流分量编码
DCH_Cr = DC_Huffman(Z2(1),Cr_last_Z,2);
DCH_Cb = DC_Huffman(Z3(1),Cb_last_Z,2);
ACH_Y = AC_Huffman(Z1(2:end),1);%交流分量编码
ACH_Cr = AC_Huffman(Z2(2:end),2);
ACH_Cb = AC_Huffman(Z3(2:end),2);
Y_last_Z = Z1(1);
Cr_last_Z = Z2(1);
Cb_last_Z = Z3(1);
Y_jpeg2 = [Y_jpeg2 DCH_Y ACH_Y];
Cr_jpeg2 = [Cr_jpeg2 DCH_Cr ACH_Cr];
Cb_jpeg2 = [Cb_jpeg2 DCH_Cb ACH_Cb];
end
end
jpeg2 = [Y_jpeg2,Cr_jpeg2,Cb_jpeg2];
rate2 = 8*M*N*3/length(jpeg2);%压缩比
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -