• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Matlab
  • 标签: jpeg  编码  解码  matlab  

资源简介

可以实现jpeg压缩编解码 分别进行dct 游程 和哈弗曼编码

资源截图

代码片段和文件信息

clc;
clear all;
Ip=imread(‘2.jpg‘);

figure(1); 
imshow(Ip) 
title(‘原始图象‘)      %显示原图 

I=double(Ip);             %将数据类型转换为双精度形式 
T=dctmtx(8);             %产生8*8的DCT变换系数矩阵 
B=blkproc(I[8 8]‘P1*x*P2‘TT‘); %对图象I的每个8*8块的DCT变换 
 Q=[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 60  
    18 22 37 56 68 109 103 77 
    24 25 55 64 81 104 113 92 
    49 64 78 87 103 121 120 101 
    72 92 95 98 112 100 103 99];  %标准量化矩阵 
 
B1=blkproc(B[8 8]‘round(x./P1)‘Q);%对DCT系数矩阵进行有损量化 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  Z扫描 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
 sx=[1 2 6 7 15 16 28 29  
    3 5 8 14 17 27 30 43  
    4 9 13 18 26 31 42 44  
    10 12 19 25 32 41 45 54 
    11 20 24 33 40 46 53 55 
    21 23 34 39 47 52 56 61  
    22 35 38 48 51 57 60 62 
    36 37 49 50 58 59 63 64]; 
 
out=zeros([1 8*8*64]); 
  
for a=1:8 
    for b=1:8
        for i=1:8 
            for j=1:8    
                   out(((a-1)*8+b)*64-64+sx(ij))=B1(a*8-8+ib*8-8+j); 
            end  
        end  
    end 
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 稀疏矩阵 游程编码 %%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
r=1; zero_num=0; 
for i=1:4096
    if out(i)~=0 
        YC(r1)=zero_num; 
        YC(r2)=out(i); 
        r=r+1; 
        zero_num=0; 
    else zero_num=zero_num+1; 
    end 
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Huffman编码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
%%%%%% 对游程编码后的第一分量(0游程的个数)进行 Huffman编码(1)     %%%%%%%%%%% 
YC1=YC(:1);[xy]=size(YC) 
sig=zeros([max(xy)3]); 
k=1; sig(11)=YC1(1); 
for i=1:max(xy) 
    flag=0; 
    for j=1:k 
        if sig(j1)==YC1(i) 
           sig(j2)=sig(j2)+1; 
           flag=1; 
           break 
        end 
    end 
    if flag==0 
        k=k+1; 
        sig(k1)=YC1(i); 
        sig(k2)=1; 
    end 
end 
 
sig=sig(1:k:); 
 
SUM=sum(sig(:2)); 
sig(:3)=sig(:2)/SUM; 
 
[dict1avglen1] = huffmandict(sig(:1)sig(:3)); % Create dictionary. 
actualsig1 = YC1;                      % actual data  
comp1 = huffmanenco(actualsig

评论

共有 条评论