|
编写RGB到YCbCr颜色空间的函数程序如下:
- function im1 = rgb2ycbcr(im)
- % 转化矩阵
- T = [65.481,128.553,24.966;
- -37.797,-74.203,112.0;
- 112.0,-93.786,-18.214]; % 矩阵系数
- Ta = [16;128;128];
- R = im(:,:,1); % R
- G = im(:,:,2); % G
- B = im(:,:,3); % B
- R = im2double(R); % 转化为double类型
- G = im2double(G); % 转化为double类型
- B = im2double(B); % 转化为double类型
- Y = Ta(1,1) + T(1,1).* R + T(1,2).*G + T(1,3).*B;
- Cb = Ta(2,1) + T(2,1).* R + T(2,2).*G + T(2,3).*B;
- Cr = Ta(3,1) + T(3,1).* R + T(3,2).*G + T(3,3).*B;
- im1(:,:,1) = Y;
- im1(:,:,2) = Cb;
- im1(:,:,3) = Cr;
- im1 = uint8(im1); % 类型转换
- 调用该函数,程序如下:
- clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
- warning off % 消除警告
- feature jit off % 加速代码运行
- im = imread('coloredChips.png');
- figure('color',[1,1,1])
- subplot(121),imshow(im,[]);title('RGB')
- im1 = rgb2ycbcr(im); % RGB转化为YCbCr
- subplot(122),imshow(im1,[]);title('YCbCr')
复制代码
编写YCbCr到RGB颜色空间的函数程序如下:
- function im1 = ycbcr2rgb(im)
- % 转化矩阵
- T = [65.481,128.553,24.966;
- -37.797,-74.203,112.0;
- 112.0,-93.786,-18.214]; % 矩阵系数
- Ta = [16;128;128];
- TT = inv(T); % 求逆矩阵
- Tb = TT*Ta;
- Y = im(:,:,1); % Y
- Cb = im(:,:,2); % Cb
- Cr = im(:,:,3); % Cr
- Y = im2double(Y); % 转化为double类型
- Cb = im2double(Cb); % 转化为double类型
- Cr = im2double(Cr); % 转化为double类型
- R = -Tb(1,1) + TT(1,1).* Y + TT(1,2).*Cb + TT(1,3).*Cr;
- G = -Tb(2,1) + TT(2,1).* Y + TT(2,2).*Cb + TT(2,3).*Cr;
- B = -Tb(3,1) + TT(3,1).* Y + TT(3,2).*Cb + TT(3,3).*Cr;
- R = mat2gray(R); % 灰度值 转化为 0 - 1之间
- G = mat2gray(G); % 灰度值 转化为 0 - 1之间
- B = mat2gray(B); % 灰度值 转化为 0 - 1之间
- im1(:,:,1) = R;
- im1(:,:,2) = G;
- im1(:,:,3) = B;
- im1 = im2uint8(im1); % 类型转换
- 调用该函数,程序如下:
- %% YCbCr --> RGB
- clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
- warning off % 消除警告
- feature jit off % 加速代码运行
- im = imread('coloredChips.png');
- im1 = rgb2ycbcr(im); % RGB转化为YCbCr
- figure('color',[1,1,1])
- subplot(121),imshow(im1,[]);title('YCbCr')
- im2 = ycbcr2rgb(im1);
- subplot(122),imshow(im2,[]);title('RGB')
复制代码
|
|