📄 tobdel.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 + -