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

📄 jpegdecode.m

📁 常用图像压缩编码码matlab实现。包括:DM编码、变换编码(FFT和DCT)、算术编码、行程编码、Huffman编码、线性预测编码和一个近似的JPEG编码过程。非常适合入门用户实践。
💻 M
字号:
function x = jpegdecode(y)
%jpegdecode函数,jpegencode的解码程序
error(nargchk(1, 1, nargin));      %检查输入参数
m = [16 11 10 16 24 40 51 61       %JPEG量化步长矩阵
     12 12 14 19 26 58 60 55
     14 13 16 24 40 57 69 56
     14 17 22 29 51 87 80 62
     18 22 37 56 68 109 103 77
     24 35 55 64 81 104 113 92
     49 64 78 87 103 121 120 101
     72 92 95 98 112 110 103 99];
 order = [1 9 2 3 10 17 25 18 11 4 5 12 19 26 33 ...        %变换系数排列次序
       41 34 27 20 13 6 7 14 21 28 35 42 49 57 50 ...
       43 36 29 22 15 8 16 23 30 37 44 51 58 59 52 ...
       45 38 31 24 32 39 46 53 60 61 54 47 40 48 55 62 63 56 64];
rev = order;          %计算逆序
for k = 1:length(order)
    rev(k) = find(order == k);
end
% ff = max(rev(:)+1;
m = double(y.quality)/100*m;
xb = double(y.numblocks);          %得到图像块数
sz = double(y.size);
xn = sz(1);
xm = sz(2);
x = huffdecode(y.huffman, y.info);    %huffman1解码
x = double(x) - 128;
eob = max(x(:));
z = zeros(64, xb);
k = 1;
for j = 1: xb
    for i = 1: 64
        if x(k) == eob
            k = k + 1;
            break;
        else
            z(i, j) = x(k);
            k = k + 1;
        end
    end
end
z = z(rev, :);               %恢复次序
x = col2im(z, [8, 8], [xm, xn], 'distinct');       %重新排列成图像
x = blkproc(x, [8, 8], 'x.*P1', m);                %逆量化
t = dctmtx(8);
x = blkproc(x, [8, 8], 'P1*x*P2', t', t);          %DCT逆变换
x = uint8(x + 128);                                %进行位移

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -