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

📄 jacenc.m

📁 适合初学者的基于MATLAB的JPEG编码,haffman编码,RLE编码.
💻 M
字号:
function b=jacenc(x)% Usage: b=jacenc(x)% JPEG AC coefficient encoding routine% x: AC coefficient sequence % b: corresponding bit stream% copyright (c) 1997 by Yu Hen Hu%% created: 11/25/97%b=[];%    run - category - length - bsae code length -  base codetable=[... 0  1   3  2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  2   4  2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  3   6  3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  4   8  4 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0  5  10  5 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0  0  6  12  6 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0  0  7  14  7 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0  0  8  18 10 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0  9  25 16 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 10  26 16 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1  1   5  4 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0  1  2   8  6 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0  1  3  10  7 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1  4  13  9 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 1  5  16 11 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1  6  22 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1  7  23 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1  8  24 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1  9  25 16 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 10  26 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 2  1   6  5 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0  2  2  10  8 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 2  3  13 10 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0  2  4  20 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 2  5  21 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 0 2  6  22 16 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 2  7  23 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 2  8  24 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 2  9  25 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 2 10  26 16 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 3  1   7  6 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 3  2  11  9 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 3  3  14 11 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0  3  4  20 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 3  5  21 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 3  6  22 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 3  7  23 16 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 3  8  24 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 0 3  9  25 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 3 10  26 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 4  1   7  6 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 4  2  12 10 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0  4  3  19 16 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 4  4  20 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 4  5  21 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 4  6  22 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 0 4  7  23 16 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 1 4  8  24 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 4  9  25 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 4 10  26 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 5  1   8  7 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 5  2  12 10 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0  5  3  19 16 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 5  4  20 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 5  5  21 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 5  6  22 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 0 5  7  23 16 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 5  8  24 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 0 5  9  25 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 5 10  26 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 6  1   8  7 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 6  2  13 11 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0  6  3  19 16 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 6  4  20 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 6  5  21 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 1 6  6  22 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 6  7  23 16 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 6  8  24 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 6  9  25 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 6 10  26 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 0 7  1   9  8 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 7  2  13 11 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0  7  3  19 16 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 7  4  20 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 7  5  21 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 1 7  6  22 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 7  7  23 16 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 7  8  24 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 7  9  25 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 7 10  26 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 8  1   9  8 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 8  2  17 15 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 8  3  19 16 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 8  4  20 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 8  5  21 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 8  6  22 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 8  7  23 16 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 8  8  24 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 8  9  25 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 8 10  26 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 9  1  10  9 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0  9  2  18 16 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 9  3  19 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 9  4  20 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 9  5  21 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 9  6  22 16 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 9  7  23 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 9  8  24 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 9  9  25 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 9 10  26 16 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 110  1  10  9 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 10  2  18 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 010  3  19 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 110  4  20 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 010  5  21 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 110  6  22 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 010  7  23 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 110  8  24 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 010  9  25 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 110 10  26 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 011  1  10  9 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 11  2  18 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 111  3  19 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 011  4  20 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 111  5  21 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 011  6  22 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 111  7  23 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 011  8  24 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 111  9  25 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 011 10  26 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 112  1  11 10 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 12  2  18 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 012  3  19 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 112  4  20 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 012  5  21 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 112  6  22 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 012  7  23 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 112  8  24 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 012  9  25 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 112 10  26 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 013  1  12 11 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 13  2  18 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 113  3  19 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 013  4  20 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 113  5  21 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 013  6  22 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 113  7  23 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 013  8  24 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 113  9  25 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 013 10  26 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 114  1  13 12 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 014  2  18 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 014  3  19 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 114  4  20 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 014  5  21 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 114  6  22 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 014  7  23 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 114  8  24 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 014  9  25 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 114 10  26 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 015  1  17 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 115  2  18 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 015  3  19 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 115  4  20 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 015  5  21 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 115  6  22 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 015  7  23 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 115  8  24 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 015  9  25 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 115 10  26 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0  0   4  4 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 015  0  12 12 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0];ix = find(x~=0); % index of next non-zero entryNx = length(ix);  % # of non-zero entries% if first ac coefficient has no leading zeros% then encode x(1)!% note much details have been left out here% we did not concern what if Nx=1 and x(1)=EoBif ix(1)==1,     run=0;   % no leading zero   tmp=int2bin(x(1));  % tmp is 1 by (c+1)   cat=length(tmp)-1;  % first bit is sign bit   row=run*10+cat;   prefix=table(row,5:table(row,4)+4);   if tmp(1)==1,  %if current x is negative       tmp=ones(1,cat+1)-tmp; % 1's complement   end   b=[prefix tmp(2:cat+1)];endfor n=2:Nx, % loop through each non-zero entry   prefix=[];   % 1. ck # of leading zeros   run=ix(n)-ix(n-1)-1;   % 2. ck if run > 16;   %  run of 0s longer than 15, will be broken down into repeated   %  run-of-15-0 symbol   while run > 15,       b=[b 1 1 1 1 1 1 1 1 0 1 1 1];      run=run-15;   end   % check if end of block   if x(ix(n))==999,        b = [b 1 0 1 0];  % append EoB symbol   else      tmp=int2bin(x(ix(n)));  % tmp is 1 by (c+1)      cat=length(tmp)-1;  % first bit is sign bit      row=run*10+cat;     % row number of the prefix Hoffman code      prefix=table(row,5:table(row,4)+4);      if tmp(1)==1,       % if current x is negative          tmp=ones(1,cat+1)-tmp; % 1's complement      end      b=[b prefix tmp(2:cat+1)];   endend

⌨️ 快捷键说明

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