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

📄 tobdel.m

📁 该程序是一个用matlab语言编写的jepg压缩解压程序
💻 M
字号:
function b=tobdel(x)
%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
%
%clear
%clc

%    run - category - length - bsae code length -  base code
table=[...
 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 1
10  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 0
10  3  19 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1
10  4  20 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0
10  5  21 16 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1
10  6  22 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0
10  7  23 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1
10  8  24 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0
10  9  25 16 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1
10 10  26 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0
11  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 1
11  3  19 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0
11  4  20 16 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1
11  5  21 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0
11  6  22 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1
11  7  23 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0
11  8  24 16 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1
11  9  25 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0
11 10  26 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1
12  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 0
12  3  19 16 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1
12  4  20 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0
12  5  21 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1
12  6  22 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0
12  7  23 16 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
12  8  24 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
12  9  25 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1
12 10  26 16 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0
13  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 1
13  3  19 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0
13  4  20 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1
13  5  21 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0
13  6  22 16 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1
13  7  23 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0
13  8  24 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1
13  9  25 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0
13 10  26 16 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1
14  1  13 12 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0
14  2  18 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0
14  3  19 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1
14  4  20 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0
14  5  21 16 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
14  6  22 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
14  7  23 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
14  8  24 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0
14  9  25 16 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1
14 10  26 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0
15  1  17 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
15  2  18 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0
15  3  19 16 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
15  4  20 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
15  5  21 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
15  6  22 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0
15  7  23 16 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
15  8  24 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
15  9  25 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
15 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 0
15  0  12 12 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0];

%x=[9 zeros(1,16) 9];
b=[];

ix = find(x~=0); % index of next non-zero entry
Nx = length(ix);  % # of non-zero entries

% Code added by Ravi Lakkundi
if ix(1)~=1 & length(x)~=1
    run=ix(1)-1;
    tmp=int2bin(x(ix(1)));
    cat=length(tmp)-1;
    if tmp(1)==1,  %if current x is negative 
        tmp=ones(1,cat+1)-tmp; % 1's complement
    end    
    row=run*10+cat;
    prefix=table(row,5:table(row,4)+4);
    b=[prefix tmp(2:cat+1)];
end
% Changed by Ravi Lakkundi

% 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)=EoB

if 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=[b prefix tmp(2:cat+1)];
end

for 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)];
   end
end

⌨️ 快捷键说明

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