Advertisement

RGB 与 (RGB转 YCbCr再转为 RGB)的图像

阅读量:

该图像无法区分其原始RGB版本与其经(转换至YCbCr色域后)还原回原色域的过程。通过分析其矩阵逆运算的存在性可以看出该过程不可逆。以下是MATLAB代码:

复制代码
   clc,clear;

    
 Source=imread('1.jpg');%读入原始RGB图像
    
  
    
 figure(1);
    
 subplot(1,2,1);
    
 imshow(Source):title('original image');%显示图像
    
 [r c d]=size(Source);%计算图像大小
    
 %------计算红色分量并显示分解图------%
    
 R(:,:,1)=Source(:,:,1);
    
 R(:,:,2)=zeros(r,c);
    
 R(:,:,3)=zeros(r,c);
    
 R=uint8(R);
    
 whos;
    
 figure(2);
    
 subplot(1,3,1);
    
 imshow(R)
    
 title('Red Component');
    
 %-------计算绿色分量并显示分解图-------%
    
 G(:,:,2)=Source(:,:,2);
    
 G(:,:,1)=zeros(r,c);
    
 G(:,:,3)=zeros(r,c);
    
 G=uint8(G);
    
 figure(2);
    
 subplot(1,3,2);
    
 imshow(G)
    
 title('Green Component');
    
 %--------计算蓝色分量并显示分解图-------%
    
 B(:,:,3)=Source(:,:,3);
    
 B(:,:,1)=zeros(r,c);
    
 B(:,:,2)=zeros(r,c);
    
 B=uint8(B);
    
 figure(2);
    
 subplot(1,3,3)
    
 imshow(B)
    
 title('Blue Component');
    
 %------------合成-------------%
    
 Comp(:,:,1)=R(:,:,1);
    
 Comp(:,:,2)=G(:,:,2);
    
 Comp(:,:,3)=B(:,:,3);
    
 figure(5);
    
 subplot(1,2,2);
    
 imshow(Comp):title('composition image');
    
 Y=0.213*R+0.715*G+0.072*B;
    
 Cb=0.511*B-0.117*R-0.394*G+128;
    
 Cr=0.511*R-0.464*G-0.047*B+128;
    
 %red=Y+1.402*(Cr-128);
    
 %green=Y-0.34414*(Cb-128)-0.71414*(Cr-128);
    
 %blue=Y+1.772*(Cb-128);
    
 red = 1.164*(Y-16)+1.793*(Cr-128);
    
 green = 1.164*(Y-16)-0.534*(Cr-128)-0.213*(Cb-128);
    
 blue =1.164*(Y-16)+2.115*(Cb-128);
    
 Comp2(:,:,1)=red(:,:,1);
    
 Comp2(:,:,2)=green(:,:,2);
    
 Comp2(:,:,3)=blue(:,:,3);
    
 Comp5(:,:,1)=Y(:,:,1);
    
 Comp5(:,:,2)=Cb(:,:,2);
    
 Comp5(:,:,3)=Cr(:,:,3);
    
 figure(5);imshow(Comp5);title('显示11YCBcr');
    
 figure(1);subplot(1,2,2);imshow(Comp2);title('RGB转换为YCrCb后又转换为RGB的图像');
    
 RD=R(:,:,1)-red(:,:,1);
    
 GD=G(:,:,2)-green(:,:,2);
    
 BD=B(:,:,3)-blue(:,:,3);
    
 figure(4);subplot(1,3,1);imshow(RD);title('红色分量差异');
    
 subplot(1,3,2);imshow(GD);title('绿色分量差异');
    
 subplot(1,3,3);imshow(BD);title('蓝色分量差异');
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~