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