RGB想YCbCr空间的变换

具体的基本原理参考下面的网址。

http://ee.52ic.net/Article/ShowArticle.asp?ArticleID=61

方法一:

filePath = '1.jpg';

I = imread(filePath);  %读取JPEG彩色图像

%可以直接调用rgb2ycbcr函数进行空间变换

YCBCR = rgb2ycbcr(I);

 

方法二:

filePath = '1.jpg';

I = imread(filePath);  %读取JPEG彩色图像

[m, n, dim]=size(I);

%图像的RGB %matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。

%所以要先将图像转为double格式的才能运算,imshow必须是uint8等格式的才能显示

img=im2double(I);        %双精度存储,亮度值范围是[0,1];

R=img(:,:,1);

G=img(:,:,2);

B=img(:,:,3);

%RGB2YCbCr

Y=zeros(m,n);   

Cb=zeros(m,n);   

Cr=zeros(m,n);  

YCbCr_1=zeros(m,n,3);

matrix=[0.299 0.587 0.114; 0.5 -0.4187 -0.0813; -0.1687 -0.3313 0.5];

for i=1:m  

   for j=1:n        

    tmp=matrix*[R(i,j) G(i,j) B(i,j)]';        

    Y(i,j)=tmp(1);        

    Cb(i,j)=tmp(2)+128;        

    Cr(i,j)=tmp(3)+128;   

  end

end

YCbCr_1(:,:,1) = Y;

YCbCr_1(:,:,2) = Cb;

YCbCr_1(:,:,3) = Cr;

YCbCr_11 = im2uint8(YCbCr_1); %无符号整型存储,亮度值范围[0,255]

imshow(YCbCr_11);

你可能感兴趣的:(bc)