具体的基本原理参考下面的网址。
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);