gusucode.com > 基于matlab的JPEG彩色图像编码解码源码程序 > 基于matlab的JPEG彩色图像编码解码源码程序/code/decode.m

    function I=decode(FileCode)
cursor=1;
row=bin2dec(FileCode(cursor:cursor+15));%行数
cursor=cursor+16;
column=bin2dec(FileCode(cursor:cursor+15));%列数
cursor=cursor+16;
YLength=bin2dec(FileCode(cursor:cursor+31));%灰度部分位数
cursor=cursor+32;
CbCrLength=bin2dec(FileCode(cursor:cursor+31));%色度部分位数
cursor=cursor+32;

%读取颜色矩阵
BrightnessQuantizationTable=[...
    16  11  10  16  24  40  51  61
    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 100 103  99];%亮度量化表
ChromaQuantizationTable=[...
    17, 18, 24, 47, 99, 99, 99, 99;
    18, 21, 26, 66, 99, 99, 99, 99;
    24, 26, 56, 99, 99, 99, 99, 99;
    47, 66, 99 ,99, 99, 99, 99, 99;
    99, 99, 99, 99, 99, 99, 99, 99;
    99, 99, 99, 99, 99, 99, 99, 99;
    99, 99, 99, 99, 99, 99, 99, 99;
    99, 99, 99, 99, 99, 99, 99, 99];%色差量化表
Y=JPEGDecode(FileCode(cursor:cursor+YLength-1),BrightnessQuantizationTable);
cursor=cursor+YLength;
CbCr=JPEGDecode(FileCode(cursor:cursor+CbCrLength-1),ChromaQuantizationTable);
[rowY,columnY]=size(Y);%图像的大小
Cb(:,:)=CbCr(1:rowY/2,:);
Cr(:,:)=CbCr(rowY/2+1:rowY,:);

%对4:2:0的采样结果进行插值,恢复原图形
YCbCr(:,:,1)=Y;
for i=1:rowY/2
    for j=1:columnY/2
        YCbCr(2*i-1,2*j-1,2)=Cb(i,j);
        YCbCr(2*i-1,2*j,2)=Cb(i,j);
        YCbCr(2*i,2*j-1,2)=Cb(i,j);
        YCbCr(2*i,2*j,2)=Cb(i,j);
        
        YCbCr(2*i-1,2*j-1,3)=Cr(i,j);
        YCbCr(2*i-1,2*j,3)=Cr(i,j);
        YCbCr(2*i,2*j-1,3)=Cr(i,j);
        YCbCr(2*i,2*j,3)=Cr(i,j);
    end
end
I=ycbcr2rgb(YCbCr);%换回真彩色空间
I(row+1:rowY,:,:)=[];%去掉扩展的行
I(:,column+1:columnY,:)=[];%去掉扩展的列
end