jpegdecode.asv
上传用户: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. order=[1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 ...
  12.        41 34 28 20 13 6 7 14 21 28 35 42 49 57 50 ...
  13.        43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 ...
  14.        45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64];
  15.    rev=order;
  16.    for k=1:length(order)
  17.        rev(k)=find(order==k);
  18.    end
  19.    m=double(y.quality)/100*m;
  20.    xb=double(y.numblocks);
  21.    sz=double(y.size);
  22.    xn=sz(1);
  23.    xm=sz(2);
  24.    x=huffdecode(y.huffman,y.info);
  25.    x=double(x)-128;
  26.    eob=max(x(:));
  27.    z=zeros(64,xb);
  28.    k=1;
  29.    for j=1:xb
  30.        for i=1:64
  31.            if x(k)==eob
  32.                k=k+1; break;
  33.            else z(i,j)=x(k);
  34.                k=k+1;
  35.            end
  36.        end
  37.    end
  38.    z=z(rev,:);
  39.    x=col2im(z,[8 8],[xm xn],'distinct');
  40.    x=blkproc(x,[8 8],'x.*P1',m);
  41.    t=dctmtx(8);  
  42.    x=blkproc(x,[8 8],'P1*x*P2',t',t);
  43.    x=uint8(x+128);