马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
RGB=imread('Sunset.jpg');
%读入后便是一个RGB矩阵 width,height原始图象的宽度和高度 [width height]=size(RGB(:,:,1));
yuv=zeros(width,height,3,'uint8');
%建立1个width*height大小的三维空矩阵,全0,每个元素用8bit数据存储,把这个值赋给yuv Y=zeros(width,height,'uint8');
%建立1个width*height大小的空矩阵,把这个值赋给Y yuv=rgb2ycbcr(RGB);
%调用内部函数rgb2ycbcr,初步处理,转化RGB的值为YcbCr颜色空间,并把数据存储在yuv里面 Y=yuv(:,:,1);
%把yuv第1个矩阵值,赋给亮度Y空间 U=zeros(width/2,height/2,'uint8');
%建立1个(width/2)*(height/2)大小的空矩阵,把这个值赋给色度U V=zeros(width/2,height/2,'uint8');
%建立1个(width/2)*(height/2)大小的空矩阵,把这个值赋给色度V U(:,=yuv(1:2width-1),1:2height-1),2);%从第一个字节开始隔2取1
由于每个像素均保留了U分量 %V(:,=yuv(1:2width-1),1:2:(height-1),3);%从第一个字节开始隔2取1
由于每个像素均保留了V分量 V(:,=yuv(2:2:width,1:2:(height-1),3);%从第一个字节开始隔2取1
由于每个像素均保留了V分量 YY=zeros(width,height,'uint8');
%建立1个width*height大小的空矩阵,把这个值赋给YY UU=zeros(width,height,'uint8');
%建立1个width*height大小的空矩阵,把这个值赋给UU VV=zeros(width,height,'uint8');%建立1个width*height大小的空矩阵,把这个值赋给VV frame=1 YY(:,:)=Y(:,:,frame);
%读取亮度Y某个特定的区域值给YY frame是选择那个区域,这里我们取
UU(1:2:width-1,1:2:height-1)=U(:,:,frame); UU(1:2:width-1,2:2:height)=U(:,:,frame); UU(2:2:width,1:2:height-1)=U(:,:,frame); UU(2:2:width,2:2:height)=U(:,:,frame);%并非每个像素均保留了U分量,故还要插值,这里直接用邻近的赋值了,最后恢复到width*height个%同上 VV(1:2:width-1,1:2:height-1)=V(:,:,frame); VV(1:2:width-1,2:2:height)=V(:,:,frame); VV(2:2:width,1:2:height-1)=V(:,:,frame); VV(2:2:width,2:2:height)=V(:,:,frame); %YY,UU,VV转置并合并成三维数组
YUV=cat(3,YY,UU,VV); RGB=ycbcr2rgb(YUV);
%逆转换,YUV→RGB
imshow(RGB)
%显示转换后的图片
%RGB=imread( 'test.bmp '); %YUV=rgb2ycbcr(RGB); %转成YUVRGB= ycbcr2rgb(YUV);%转成RGB%RGB(:,:,1)为R分量矩阵%RGB(:,:,2)为G分量矩阵%RGB(:,:,3)为B分量矩阵%YUV(:,:,1)为Y分量矩阵%YUV(:,:,2)为U分量矩阵%YUV(:,:,3)为V分量矩阵%公式 Y =
0.2990*R + 0.5780*G + 0.1140*B + 0%公式 U =
0.5000*R - 0.4187*G - 0.0813*B + 128%公式 V = -0.1687*R - 0.3313*G + 0.5000*B + 128
|