文档库 最新最全的文档下载
当前位置:文档库 › matlab实现RGB与YCBCR色空间的相互转换并实现图像压缩

matlab实现RGB与YCBCR色空间的相互转换并实现图像压缩

matlab实现RGB与YCBCR色空间的相互转换并实现图像压缩
matlab实现RGB与YCBCR色空间的相互转换并实现图像压缩

%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)

相关文档