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