Halcom 发表于 2016-10-30 21:49:55

图像YCbCr与RGB空间相互转换与MATLAB实现

编写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 = ;

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',)
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 = ;

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',)
subplot(121),imshow(im1,[]);title('YCbCr')
im2 = ycbcr2rgb(im1);
subplot(122),imshow(im2,[]);title('RGB')

页: [1]
查看完整版本: 图像YCbCr与RGB空间相互转换与MATLAB实现