⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exp4.m

📁 这是一个用MATLAB软件来实现的图像JPEG压缩程序源代码
💻 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 + -