亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? jpeglike.m

?? 算術(shù)編碼
?? M
字號:
function varargout = JPEGlike(arg1, arg2, arg3)
% JPEGlike    Entropy encoding (or decoding) in a JPEG like manner
% Coding is very similar to sequential Huffman coding as described in
%   William B. Pennebaker, Joan L. Mitchell.
%   JPEG: Still Image Data Compression Standard, chapter 11.1
%   (Van Nostrand Reinhold, New York, USA, 1992, ISBN: 0442012721)
% The number of input arguments decide whether it is encoding or decoding,
% three input argument for decoding, two for encoding.
%
% [y,Res] = JPEGlike(Speed, W);              % encoding  % y = JPEGlike(Speed, W);                    % encoding  % W = JPEGlike(y, N, L);                     % decoding  %----------------------------------------------------------------------
% arguments:
%   W       The quantized values, a matrix where the first row is the
%           DC component and the following rows are the AC components.
%           We assume AC components (rows) are ordered in ascending frequencies.
%  N        Number of rows in W
%  L        Number of columns in W, [N,L]=size(W)
%  Speed    For complete coding set Speed to 0. Set Speed to 1 to cheat 
%           during encoding, y will then be a sequence of zeros only,
%           but it will be of correct length and the other output 
%           arguments will be correct. 
%  y        a column vector of non-negative integers (bytes) representing 
%           the code, 0 <= y(i) <= 255. 
%  Res      The results (encoding only)        for DC part       for AC part
%           Number og symbols:                 Res(1)            Res(5)
%           Bits to store Huffman table (HL):  Res(2)            Res(6)
%           Bits to store Huffman symbols:     Res(3)            Res(7)
%           Bits to store additional bits:     Res(4)            Res(8)
%           The total of bits is then:  sum(Res([2:4,6:8]))
%----------------------------------------------------------------------

% Function needs following m-files: HuffLen, HuffCode, HuffTree

%----------------------------------------------------------------------
% Copyright (c) 1999.  Karl Skretting.  All rights reserved.
% Hogskolen in Stavanger (Stavanger University), Signal Processing Group
% Mail:  karl.skretting@tn.his.no   Homepage:  http://www.ux.his.no/~karlsk/
% 
% HISTORY:
% Ver. 1.0  26.07.99  Karl Skretting, Signal Processing Project 1999
%----------------------------------------------------------------------

global y Byte BitPos Speed 

Mfile='JPEGlike';
Debug=0;

% check input and output arguments, and assign values to arguments
if (nargin < 2); 
   error([Mfile,': function must have input arguments, see help.']); 
end
if (nargout < 1); 
   error([Mfile,': function must have output arguments, see help.']); 
end

if (nargin == 2)
   Encode=1;Decode=0;
   Speed=arg1;
   W=arg2;
   clear arg1 arg2
   [N,L]=size(W);
   if ((length(Speed(:))~=1)); 
      error([Mfile,': Speed argument is not scalar, see help.']); 
   end
   if Speed; Speed=1; end;
elseif (nargin == 3)
   Encode=0;Decode=1;
   y=arg1(:);         % first argument is y
   N=arg2;
   L=arg3;
   clear arg1 arg2 arg3
   if ((length(N(:))~=1)); 
      error([Mfile,': N argument is not scalar, see help.']); 
   end
   if ((length(L(:))~=1)); 
      error([Mfile,': L argument is not scalar, see help.']); 
   end
else
   error([Mfile,': wrong number of arguments, see help.']); 
end

if N<3
   error([Mfile,': N<3 will not work']); 
end

% Encode
if Encode
   Byte=0;BitPos=1;  % ready to write into first position
   Res=zeros(8,1);
   % take the DC component
   DC=[W(1,1),W(1,2:L)-W(1,1:(L-1))];
   DCsym=abs(DC);
   I=find(DCsym);
   DCsym(I)=floor(log2(DCsym(I)))+1;
   Hi=hist(DCsym,0:15);
   HL=HuffLen(Hi);
   % save HL in 8 byte, then DCsym and extra bits in bits
   bits=8*8+sum(HL.*Hi)+sum(DCsym);
   Res(1)=L;Res(2)=8*8;Res(3)=sum(HL.*Hi);Res(4)=sum(DCsym);
   y=zeros(ceil(bits/8),1);
   if Speed
      % advance Byte and BitPos without writing to y
      Byte=Byte+floor(bits/8);
      BitPos=BitPos-mod(bits,8);
      if (BitPos<=0); BitPos=BitPos+8; Byte=Byte+1; end;
   else
      % save HL 
      for j=1:16
         for (i=4:-1:1); PutBit(bitget(HL(j),i)); end;
      end
      HK=HuffCode(HL);
      % save DCsym and extra bits
      for l=1:L
         if Debug
            disp(['Encode:  DCsym(',int2str(l),')=',int2str(DCsym(l)),...
                  '   DC(',int2str(l),')=',int2str(DC(l))]);
         end
         n=DCsym(l)+1;    % symbol number (value 0 is first symbol, symbol 1)
         for k=1:HL(n)
            PutBit(HK(n,k));
         end
         if DCsym(l)        % extra bits
            if (DC(l)>0)    % the sign '1'='+', '0'='-'
               PutBit(1); 
               n=DC(l)-2^(DCsym(l)-1);
            else; 
               PutBit(0); 
               n=DC(l)+2^DCsym(l)-1;
            end;  
            % if Debug; disp(['   n=',int2str(n)]); end;
            for k=(DCsym(l)-1):-1:1
               PutBit(bitget(n,k));
            end
         end
      end
   end
   
   % now take the AC component
   % The symbols are now in range 0-255, where first four bits are RR
   % and last four bits are SS, SS is as DCsym above
   % disp([int2str(Byte),'  ',int2str(BitPos)]);
   AntSym=sum(sum((W(2:(N-1),:)~=0)))+L+floor((N-1)/16)*L; % should be enough
   ACsym=zeros(AntSym,1);
   AC=ACsym;   % the values
   i=0;
   for l=1:L
      RR=0;
      for n=2:N
         if W(n,l)==0
            RR=RR+1;
         else
            while RR>=16
               i=i+1;
               ACsym(i)=240;  % the symbol ZRL
               RR=RR-16;
            end
            i=i+1;
            AC(i)=W(n,l);
            SS=floor(log2(abs(AC(i))))+1;
            ACsym(i)=16*RR+SS;
            RR=0;
         end
      end
      if RR>0; i=i+1; end;       % the EOB symbol
   end
   ACsym=ACsym(1:i);AC=AC(1:i);
   AntSym=i;
   Hi=hist(ACsym,0:255);
   HL=HuffLen(Hi);
   while max(HL)>16
      % this is not good, try to correct it
      disp([Mfile,': Some codewords get length > 16, we try to correct this']);
      I=find(HL>16); 
      Hi(I)=Hi(I)+1;   % increace 'probability' for these symbols
      HL=HuffLen(Hi);
   end
   Hii=hist(HL,0:16);
   % save HL as in chapter 7.8.1
   bits=16*8+sum(Hii(2:17))*8+sum(HL.*Hi)+sum(mod(ACsym,16));
   Res(5)=AntSym;Res(6)=16*8+sum(Hii(2:17))*8;
   Res(7)=sum(HL.*Hi);Res(8)=sum(mod(ACsym,16));
   y=[y;zeros(ceil(bits/8),1)];
   if Speed
      % advance Byte and BitPos without writing to y
      Byte=Byte+floor(bits/8);
      BitPos=BitPos-mod(bits,8);
      if (BitPos<=0); BitPos=BitPos+8; Byte=Byte+1; end;
   else
      % save HL 
      for i=1:16
         for (j=8:-1:1); PutBit(bitget(Hii(i+1),j)); end;
      end
      for i=1:16
         I=find(HL==i);        % find symbols with codeword length i
         I=I-1;                % symbols in range 0:255
         for k=1:Hii(i+1)
            for (j=8:-1:1); PutBit(bitget(I(k),j)); end;
         end
      end
      HK=HuffCode(HL);
      % save ACsym and extra bits
      for i=1:AntSym
         if Debug
            disp(['Encode:  ACsym(',int2str(i),')=',int2str(ACsym(i)),...
                  '   AC(',int2str(i),')=',int2str(AC(i))]);
         end
         n=ACsym(i)+1;    % symbol number (value 0 is first symbol, symbol 1)
         for k=1:HL(n)
            PutBit(HK(n,k));
         end
         SS=mod(ACsym(i),16);
         if SS        % extra bits
            if (AC(i)>0)    % the sign '1'='+', '0'='-'
               PutBit(1); 
               n=AC(i)-2^(SS-1);
            else; 
               PutBit(0); 
               n=AC(i)+2^SS-1;
            end;  
            if Debug; disp(['   n=',int2str(n)]); end;
            for k=(SS-1):-1:1
               PutBit(bitget(n,k));
            end
         end
      end
   end
   
   y=y(1:Byte);   
   varargout(1) = {y};
   if (nargout >= 2); varargout(2) = {Res}; end;

end

% Decode
if Decode
   W=zeros(N,L);
   Byte=0;BitPos=1;  % ready to read from first position
   % first read the HL tab
   HL=zeros(1,16);
   for j=1:16
      for (i=1:4); HL(j)=HL(j)*2+GetBit; end;
   end
   % then the symbols and extra bits
   DCsym=zeros(1,L);
   DC=DCsym;
   Htree=HuffTree(HL);
   root=1;pos=root;     
   l=0;  % number of symbols decoded so far
   while l<L
      if GetBit
         pos=Htree(pos,3);
      else
         pos=Htree(pos,2);
      end
      if Htree(pos,1)           % we have arrived at a leaf
         l=l+1;
         DCsym(l)=Htree(pos,2)-1;   % value is one less than symbol number
         pos=root;              % start at root again
         % is there extra bits
         if DCsym(l)
            DC(l)=2^(DCsym(l)-1);
            if (~(GetBit)); DC(l)=1-2*DC(l); end;
            if (DCsym(l)>1)
               n=0;
               for i=1:(DCsym(l)-1); n=n*2+GetBit; end;
               DC(l)=DC(l)+n;
            end
         end
         if Debug
            disp(['Decode:  DCsym(',int2str(l),')=',int2str(DCsym(l)),...
                  '   DC(',int2str(l),')=',int2str(DC(l))]);
         end
      end
   end
   W(1,1)=DC(1);
   for l=2:L; W(1,l)=W(1,l-1)+DC(l); end;
   
   % now take the AC component
   % first read the HL tab
   Hii=zeros(16,1);
   % disp([int2str(Byte),'  ',int2str(BitPos)]);
   for j=1:16
      for (i=1:8); Hii(j)=Hii(j)*2+GetBit; end;
   end
   % disp(Hii);
   HL=zeros(1,256);
   for j=1:16
      for k=1:Hii(j)
         n=0;
         for (i=1:8); n=n*2+GetBit; end;
         HL(n+1)=j;
      end
   end
   % disp(HL)
   
   % then the symbols and the extra bits
   AC=0;ACsym=0;
   Htree=HuffTree(HL);
   root=1;pos=root;     
   Finished=0;
   l=1;n=2;
   while ~Finished
      if GetBit
         pos=Htree(pos,3);
      else
         pos=Htree(pos,2);
      end
      if Htree(pos,1)           % we have arrived at a leaf
         ACsym=Htree(pos,2)-1;   % value is one less than symbol number
         pos=root;              % start at root again
         % is there extra bits
         SS=mod(ACsym,16);
         RR=floor(ACsym/16);
         if SS
            AC=2^(SS-1);
            if (~(GetBit)); AC=1-2*AC; end;
            if (SS>1)
               k=0;
               for i=1:(SS-1); k=k*2+GetBit; end;
               AC=AC+k;
            end
         end
         if Debug
            disp(['Decode:  ACsym=',int2str(ACsym),'   AC=',int2str(AC)]);
         end
      % now put value into W (which is zeros initially)
         if SS; n=n+RR; W(n,l)=AC; n=n+1;
         elseif (ACsym==0); l=l+1; n=2;
         elseif (ACsym==240); n=n+16;
         else; error([Mfile,': logical error, unknown symbol decoded.']); end
         if (n>N); l=l+1; n=2; end;
         if (l>L); Finished=1; end;
      end
   end
   varargout(1) = {W};
end

return;


% Functions to write and read a Bit
function PutBit(Bit)
global y Byte BitPos
BitPos=BitPos-1;
if (~BitPos); Byte=Byte+1; BitPos=8; end; 
y(Byte) = bitset(y(Byte),BitPos,Bit);
return
   
function Bit=GetBit
global y Byte BitPos
BitPos=BitPos-1;
if (~BitPos); Byte=Byte+1; BitPos=8; end; 
Bit=bitget(y(Byte),BitPos);
return;

% test of function
W=[-7,4,400,-2,0,1;1,0,1,0,-1,3;-1,1,0,0,-1,4;0,0,0,0,-7,8;-6,2,0,0,5,7]
[y,Res] = JPEGlike(0, W);
W2 = JPEGlike(y, 5, 6)


   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一二三四| 亚洲欧美另类小说视频| 久久精品视频在线看| 亚洲精品精品亚洲| 国产精品一区二区果冻传媒| 欧美在线一二三四区| 中文字幕av一区二区三区免费看| 亚洲成在线观看| 97精品国产97久久久久久久久久久久| 日韩一区二区不卡| 亚洲成人免费看| 99久久夜色精品国产网站| 亚洲精品一线二线三线无人区| 一区二区日韩av| 成人a免费在线看| 久久综合九色欧美综合狠狠| 亚洲第一福利一区| 色婷婷精品久久二区二区蜜臀av | 国产一区二区三区在线观看免费视频| 色综合天天性综合| 国产精品另类一区| 国产一区视频网站| 欧美大片在线观看一区| 亚洲成人av电影在线| 99精品热视频| 国产精品久久久久久福利一牛影视 | 亚洲猫色日本管| 风间由美中文字幕在线看视频国产欧美 | 久久久精品综合| 国产一区二区三区免费播放 | 日韩高清电影一区| 欧亚一区二区三区| 一区二区三区**美女毛片| 91在线一区二区三区| 国产精品久久久久久久久免费相片| 精品午夜久久福利影院| 日韩美女主播在线视频一区二区三区| 亚洲自拍偷拍欧美| 欧美视频一区二区在线观看| 亚洲图片欧美色图| 337p亚洲精品色噜噜狠狠| 婷婷国产在线综合| 91精品国产一区二区人妖| 日韩av在线播放中文字幕| 69av一区二区三区| 蜜臀精品一区二区三区在线观看| 欧美一区二区三区影视| 韩国成人在线视频| 国产清纯在线一区二区www| 成人精品gif动图一区| 综合久久久久久| 日本高清无吗v一区| 亚洲国产成人91porn| 日韩一区二区三区免费观看| 精品一区免费av| 中文字幕免费一区| 色欧美日韩亚洲| 美国精品在线观看| 国产精品无人区| 欧美日韩在线播放| 国内成人自拍视频| 亚洲丝袜另类动漫二区| 欧美群妇大交群中文字幕| 美日韩黄色大片| 国产精品理论在线观看| 色天使久久综合网天天| 久久精品国产网站| 国产精品欧美经典| 欧美精品v日韩精品v韩国精品v| 老司机一区二区| 自拍偷拍国产亚洲| 日韩一区二区电影网| 不卡视频一二三| 日韩高清中文字幕一区| 中文字幕av一区二区三区高| 欧美日韩黄视频| 国产**成人网毛片九色| 亚洲国产精品尤物yw在线观看| 精品国产一区二区三区av性色| 色综合久久精品| 狂野欧美性猛交blacked| 亚洲精品亚洲人成人网在线播放| 日韩一区二区在线免费观看| 91在线视频网址| 久久国产人妖系列| 亚洲一区二区三区在线看| 久久久国产午夜精品| 欧美日韩不卡在线| 成人毛片在线观看| 日韩高清不卡一区二区| 亚洲婷婷在线视频| 久久午夜色播影院免费高清| 欧美午夜宅男影院| 99国产一区二区三精品乱码| 国产制服丝袜一区| 免费在线成人网| 亚洲不卡av一区二区三区| 亚洲视频图片小说| 国产色爱av资源综合区| 日韩欧美一区二区视频| 欧美性生交片4| 91亚洲精华国产精华精华液| 国产福利精品导航| 激情综合色综合久久综合| 三级在线观看一区二区| 夜夜嗨av一区二区三区中文字幕| 欧美国产一区在线| 久久久久亚洲蜜桃| 日韩一二三区视频| 制服.丝袜.亚洲.另类.中文| 欧美性色黄大片| 一本大道久久a久久精二百| 99久久精品国产观看| 懂色av一区二区夜夜嗨| 国产999精品久久久久久绿帽| 久久精品国产99| 久久99久久久欧美国产| 久久国产精品72免费观看| 欧美aⅴ一区二区三区视频| 亚洲h精品动漫在线观看| 亚洲香蕉伊在人在线观| 天天综合网天天综合色| 日韩中文字幕麻豆| 另类小说图片综合网| 韩国成人在线视频| 国产69精品久久久久777| 成人一区二区视频| a4yy欧美一区二区三区| 一本高清dvd不卡在线观看| 色悠久久久久综合欧美99| 色94色欧美sute亚洲线路一久 | 精品成人佐山爱一区二区| 欧美成人精精品一区二区频| 精品国产免费久久| 国产亚洲视频系列| 中文字幕免费一区| 亚洲精品综合在线| 日韩黄色免费电影| 国产美女视频一区| 粉嫩一区二区三区在线看| 92精品国产成人观看免费| 欧美日韩情趣电影| 国产精品国产精品国产专区不蜜 | 91一区在线观看| 欧美亚洲国产一卡| 欧美精品一区二区三区蜜臀 | 久久久国产午夜精品| 国产精品久久久久毛片软件| 一区二区免费在线播放| 欧美aaa在线| 国产成人免费在线观看| 色老头久久综合| 日韩欧美中文一区| 中文字幕av不卡| 午夜精品福利一区二区蜜股av| 久久精品国产秦先生| 波多野结衣亚洲一区| 欧美久久久一区| 欧美激情一区在线| 日韩va亚洲va欧美va久久| 国产成人在线免费| 欧美日韩国产乱码电影| 久久久另类综合| 午夜精品福利一区二区三区蜜桃| 国产在线视频不卡二| 在线观看不卡一区| 久久久激情视频| 日韩电影免费一区| 91在线码无精品| 久久先锋影音av| 日本午夜一本久久久综合| 97精品国产97久久久久久久久久久久| 91精品婷婷国产综合久久| 亚洲婷婷在线视频| 国产精品99久久久久久似苏梦涵 | 蜜桃视频免费观看一区| 99re成人在线| 久久久高清一区二区三区| 婷婷中文字幕综合| 91在线观看下载| 久久久久久久综合色一本| 天堂蜜桃一区二区三区| 久久久噜噜噜久噜久久综合| 亚洲国产精品久久艾草纯爱| 97久久超碰国产精品电影| 国产女主播一区| 国产乱人伦偷精品视频不卡| 3d动漫精品啪啪一区二区竹菊 | 国产麻豆午夜三级精品| 欧美丰满一区二区免费视频| 国产精品免费久久久久| 久久精品噜噜噜成人av农村| 在线不卡a资源高清| 亚洲综合色自拍一区| 日本道精品一区二区三区 | 成人午夜私人影院| 久久九九国产精品| 国产91精品在线观看| 久久久久高清精品| 国产99久久久国产精品潘金|