jpegdecode.m
上传用户:mgf822
上传日期:2022-06-06
资源大小:51k
文件大小:1k
源码类别:

压缩解压

开发平台:

Matlab

  1. function x=jpegdecode(y)
  2. error(nargchk(1,1,nargin));
  3. m=[16 11 10 16 24 40 51 61
  4.     12 12 14 19 26 58 60 55
  5.     14 13 16 24 40 57 69 56 
  6.     14 17 22 29 51 87 80 62
  7.     18 22 37 56 68 109 103 77
  8.     24 35 55 64 81 104 113 92
  9.     49 64 78 87 103 121 120 101 
  10.     72 92 95 98 112 100 103 99];
  11. ttt=ones(8,8)*10;
  12. m=ttt;
  13. order=[1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 ...
  14.        41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 ...
  15.        43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 ...
  16.        45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64];
  17.    rev=order;
  18.    for k=1:length(order)
  19.        rev(k)=find(order==k);
  20.    end
  21.    m=double(y.quality)/100*m;
  22.    xb=double(y.numblocks);
  23.    sz=double(y.size);
  24.    xn=sz(1);
  25.    xm=sz(2);
  26.    x=huffdecode(y.huffman,y.info);
  27.    x=double(x)-128;
  28.    eob=max(x(:));
  29.    z=zeros(64,xb);
  30.    k=1;
  31.    for j=1:xb
  32.        for i=1:64
  33.            if x(k)==eob
  34.                k=k+1; break;
  35.            else z(i,j)=x(k);
  36.                k=k+1;
  37.            end
  38.        end
  39.    end
  40.    z=z(rev,:);
  41.    x=col2im(z,[8 8],[xn xm],'distinct');
  42.    x=blkproc(x,[8 8],'x.*P1',m);
  43.    t=dctmtx(8);  
  44.    x=blkproc(x,[8 8],'P1*x*P2',t',t);
  45.    x=uint8(x+128);