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

📄 jacenc.m

📁 灰度图像的jpeg压缩处理
💻 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  14 12 1 1 1 1 1 1 1 1 0 1 1 1 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  11 11 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0];ix = find(x~=0); % index of next non-zero entry 找到不为零的数值的坐标例如x=[0,0,0,1,1,0,0],ix = find(x~=0),值为ix=[4,5]                                               %即第4位以及第5位部位零。Nx = 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)=EoB% 在程序tobdel中有详细的处理,但是对它们对EoB都没有处理,开头if ix(1)==1,     run=0;   % no leading zero    游程长度   tmp=int2bin(x(1));  % tmp is 1 by (c+1) 把非零数值由10进制转化为2进制;这里的这个函数是自己写的int2bin(12)=01100;int2bin(-12)= 11100   cat=length(tmp)-1;  % first bit is sign bit (数值的绝对值所占用的位数,即是相当于组号)   row=run*10+cat;     %通过游程长度确定该数据在表中的行的位置。(因为每一个游程对应的是10行)   prefix=table(row,5:table(row,4)+4); %prefix,是对AC系数的符号1进行查表编码,5:table(row,4)+4对应的码字的坐标,从第5列开始,结束的坐标位置是                                       %table(row,4)为每一行的第4列,对应的值是符号1对应的码字的                                       %码长,加上4是码字的最后一位对应的坐标   if tmp(1)==1,  %if current x is negative  利用函数int2bin转化之后第一位为1则是负数,else是整数      tmp=ones(1,cat+1)-tmp; % 1's complement ,这里利用减法实现了编码,其实对其取反效果是一样的(注意补码&反码的不同,都可以通过减法来实现)   end                       %正数不需要处理   b=[prefix tmp(2:cat+1)];  %AC编码完毕,其中一位的编码完毕endfor n=2:Nx, % loop through each non-zero entry Nx是非零数的个数,对每一个位数进行编码   prefix=[];   % 1. ck # of leading zeros   run=ix(n)-ix(n-1)-1;                     %两个非零数字之间的游程数目 %因为编码中符号1中用来表示游程的长短的位数是4位,所以只能到(15,0)就是连续15个零,当游程的长度超过15是可以考虑 %在其中间添加码字(15,0)                                       % 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 0 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 + -