|
编写RGB到YUV颜色空间的函数程序如下:
- function im1 = rgb2yuv(im)
- % 转化矩阵
- T = [0.299,0.587,0.114;
- -0.147,-0.289,0.436;
- 0.615,-0.515,-0.100]; % 矩阵系数
- Ta = [0;0;0];
- 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;
- U = Ta(2,1) + T(2,1).* R + T(2,2).*G + T(2,3).*B;
- V = Ta(3,1) + T(3,1).* R + T(3,2).*G + T(3,3).*B;
- im1(:,:,1) = Y;
- im1(:,:,2) = U;
- im1(:,:,3) = V;
- im1 = im2uint8(im1); % 类型转换
- 调用该函数,程序如下:
- %% RGB --> YUV
- 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 = rgb2yuv(im); % RGB转化为YUV
- subplot(122),imshow(im1,[]);title('YUV')
复制代码
编写YUV到RGB颜色空间的函数程序如下:
- function im1 = yuv2rgb(im)
- % 转化矩阵
- T = [0.299,0.587,0.114;
- -0.147,-0.289,0.436;
- 0.615,-0.515,-0.100]; % 矩阵系数
- Ta = [0;0;0];
- TT = inv(T); % 求逆矩阵
- Tb = TT*Ta;
- Y = im(:,:,1); % Y
- U = im(:,:,2); % U
- V = im(:,:,3); % V
- Y = im2double(Y); % 转化为double类型
- U = im2double(U); % 转化为double类型
- V = im2double(V); % 转化为double类型
- R = -Tb(1,1) + TT(1,1).* Y + TT(1,2).*U + TT(1,3).*V;
- G = -Tb(2,1) + TT(2,1).* Y + TT(2,2).*U + TT(2,3).*V;
- B = -Tb(3,1) + TT(3,1).* Y + TT(3,2).*U + TT(3,3).*V;
- 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); % 类型转换
- 调用该函数,程序如下:
- %% YUV --> RGB
- clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
- warning off % 消除警告
- feature jit off % 加速代码运行
- im = imread('coloredChips.png');
- im1 = rgb2yuv(im); % RGB转化为YUV
- figure('color',[1,1,1])
- subplot(121),imshow(im1,[]);title('YUV')
- im2 = yuv2rgb(im1);
- subplot(122),imshow(im2,[]);title('RGB')
复制代码
|
|