%RGB空间与YCbCr空间的互换
%实现图像压缩
clear
close all;
I=imread('avatar.bmp');
I=im2double(I);
%RGB转换到YCbCr
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
Y=16+(0.256789*R+0.504129*G+0.097906*B);
Cb=128+(-0.148223*R-0.290992*G+0.439215*B);
Cr=128+(0.439215*R-0.367789*G-0.071426*B);
rebuilt_Cb=1:300;
rebuilt_Cr=1:300;
%图像压缩与解压
for i=1:2:299
for j=1:2:299
press_Cb=(Cb(i,j)+Cb(i+1,j)+Cb(i,j+1)+Cb(i+1,j+1))/4;
press_Cr=(Cr(i,j)+Cr(i+1,j)+Cr(i,j+1)+Cr(i+1,j+1))/4;
for k=i:(i+1)
for l=j:(j+1)
rebuilt_Cb(i,j)=press_Cb;
rebuilt_Cb(i+1,j)=press_Cb;
rebuilt_Cb(i,j+1)=press_Cb;
rebuilt_Cb(i+1,j+1)=press_Cb;
rebuilt_Cr(i,j)=press_Cr;
rebuilt_Cr(i+1,j)=press_Cr;
rebuilt_Cr(i,j+1)=press_Cr;
rebuilt_Cr(i+1,j+1)=press_Cr;
end
end
end
end
%YCbCr转换到RGB
rebuilt_img(:,:,1)=1.164383*(Y-16)+1.596027*(rebuilt_Cr-128);
rebuilt_img(:,:,2)=1.164383*(Y-16)-0.391762*(rebuilt_Cb-128)-0.812969*(rebuilt_Cr-128); rebuilt_img(:,:,3)=1.164383*(Y-16)+2.017230*(rebuilt_Cb-128);
%显示图像
figure(1);
subplot(1,2,1);imshow(I);title('原图像');
subplot(1,2,2);imshow(rebuilt_img);title('解压后图像');
%压缩损失值
e=abs(rebuilt_img-I)*255;
e=sum(e(:))/(300*300)