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

    function FileCode=encode(I,quantizationFactor)
YCBCR = rgb2ycbcr(I);
[row,column,~]=size(YCBCR);
%对图像进行扩展,使像素矩阵的长宽均是16的倍数
row2=ceil(row/16)*16;
if mod(row,16)~=0
    for i=row:row2
        YCBCR(i,:,:)=YCBCR(row,:,:);
    end
end
column2=ceil(column/16)*16;
if mod(column,16)~=0
    for j=column:column2
        YCBCR(:,j,:)=YCBCR(:,column,:);
    end
end

%对Y,Cb,Cr分量进行4:2:0采样
Y=YCBCR(:,:,1);
Cb=zeros(row2/2,column2/2);
Cr=zeros(row2/2,column2/2);
for i=1:row2/2
    for j=1:column2/2
        Cb(i,j)=(double(YCBCR(i*2-1,j*2-1,2))+double(YCBCR(i*2,j*2-1,2))+double(YCBCR(i*2-1,j*2,2))+double(YCBCR(i*2,j*2,2)))/4;
        Cr(i,j)=(double(YCBCR(i*2-1,j*2-1,3))+double(YCBCR(i*2,j*2-1,3))+double(YCBCR(i*2-1,j*2,3))+double(YCBCR(i*2,j*2,3)))/4;
    end
end

%分别对三种颜色分量进行编码
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];%色差量化表
YCode=JPEGEncode(Y,quantizationFactor,BrightnessQuantizationTable);
CbCrCode=JPEGEncode([Cb;Cr],quantizationFactor,ChromaQuantizationTable);

%文件二进制码生成
FileCode=[];%文件位串
FileCode=[FileCode dec2bin(row,16) dec2bin(column,16)];%原始图像行数与列数
FileCode=[FileCode dec2bin(length(YCode),32) dec2bin(length(CbCrCode),32)];%灰度,色度部分位数
FileCode=[FileCode YCode CbCrCode];%写入颜色二进制码
end