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

📄 jpeg.asv

📁 用离散余弦变换实现JPEG编码
💻 ASV
字号:
%jpeg压缩编码
function [dc_cof,ac_cof] = jpeg(f)
% 灰度变换 -128
f=f-128; 
%获取图象大小以及分块数目
[mf,nf]=size(f); mb=mf/8; nb=nf/8;  
% size of f, # of blocks of f
% 第一步,进行8*8块的二维DCT变换
disp('DCT ...')
DCT_f = blkproc(f,[8 8],'dct_2D');  
%进行DCT系数量化
disp('dpcm ...')
DCT_q = round( blkproc(DCT_f,[8 8],'quantization') );
disp('dpcm ...')
% 用DPCM进行DC系数编码 
if mb*nb > 1,       %超过1块
   f_dc=reshape(DCT_q(1:8:mf,1:8:nf)',mb*nb,1);   
   f_dpcm=dpcm(f_dc,1);
else
   f_dpcm=DCT_q(1,1);        %只有1块
end
%对DPCM编码后的系数进行HUFFMAN编码
disp('dcencode ...')
dc_cof=[];
for i=1:mb*nb,
   dc_cof=[dc_cof dcencode(f_dpcm(i))];
end
disp('ZigZag ...')
% Zig-Zag顺序的AC系数获取
z=[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];
ac_cof = [];
acseq = [];
for i=1:mb
  for j=1:nb
    tmp(z)=DCT_q(8*(i-1)+1:8*i,8*(j-1)+1:8*j); 
    % tmp 是1*64 向量
    %每块系数中最后一个不为0的位置作为该块结束
    eobi=max(find(tmp~=0)); 
    % 每一块用999作为结束标志   
    acseq=[acseq tmp(2:eobi) 999];
  end
end
%AC系数的HUFFMAN编码
disp('acencode ...')
ac_cof = acencode(acseq);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -