常见色彩模型的相互转换(基于MATLAB)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-2014学年第二学期图像通信课程设计报告设计题目:图像的各种颜色空间转换
摘要
所谓三基色原理,是指自然界常见的各种颜色光都可由红、绿、蓝三种色光按照不同比例相配而成。同样,绝大多数颜色也可以分解成红、绿、蓝三种色光。这就是色度学中的最基本的原理。
彩色模型的用途是在某些标准下用通常课接受的方式简化彩色规范。常常涉及到用几种不同的彩色空间表示图形和图像的颜色,以应对不同的场合和应用。因此,在数字图像的生成、存储、处理及显示时,对应不同的彩色空间,需要作不同的处理和转换。现在主要的彩色模型有RGB模型、CMY模型、YUV模型、YIQ模型、YcbCr模型、HSI模型等。本设计主要使用MATLAB编程的方法,实现RGB与其余四种模型之间的互化。即使用不同的色彩模型表示同一图形或图像。通过转换实现色彩模型的变换之后,可以让同一幅图像以各种模式在全球范围内流通,所以本设计具有一定的实际意义。一般的图像原始都为RGB—加色混合色彩模型,它与剩下的几个色彩模型之间存在着函数对应关系,通过矩阵运算改变模型的参数就可以实现不同色彩模型之间的相互转换。例如CMY—减色混合色彩模型,就是利用青色、深红色、黄色这三种彩色按照一定比例来产生想要的彩色,CMY是RGB
三基色的补色,它与RGB存在如下关系:[C
M
Y
]=[
1
1
1
]-[
R
G
B
],使用MATLAB编程时,
读入三个通道的数值,按照对应关系进行矩阵变换就可以转换成CMY色彩模型。其他色彩模型转换原理与此相似。
关键词:MATLAB,RGB、YUV、YIQ、YCbCr、HSI、色彩模型
一、设计任务、目的和要求
任务:实现RGB模型、CMY模型、YUV模型、YIQ模型、YcbCr模型、HSI模型这几种不同色彩模型之间的相互转换
要求:最终结果用图像显示
二、总体方案设计
系统运行环境:WINDOWS 7操作系统
编程软件平台:MATLAB2012b
编码算法原理:将原图的三基色数值读入,根据不同色彩模型之间的相互关系,通过矩阵运算改变不同的亮度和色度等信息来实现色彩模型的转换,然后将变换后的图像导出
流程图:
三、设计实现
1、RGB模型和CMY模型的互化变换公式:
[C
M
Y
]=[
1
1
1
]-[
R
G
B
]
clc;clear;close;
X=imread('1.jpg');%读取原始图形
Image = im2double(X); %归一化处理
subplot(131),imshow(Image),title('原图');
%读取图像的RGB分量
r = Image(:, :, 1);
g = Image(:, :, 2);
b = Image(:, :, 3);
%进行RGB到CMY的变换
C=1-r;
M=1-g;
Y=1-b;
CMY = cat(3, C, M, Y);
subplot(132),imshow(CMY),title('RGB转CMY'); %进行CMY到RGB的反变换
r1=1-C;
g1=1-M;
b1=1-Y;
rgb1 = cat(3, r1, g1, b1);
subplot(133),imshow(rgb1),title('CMY转RGB'); %数值分析反变换后和原图的差别
x=rgb1-Image;
disp(x);
2、RGB模型和YUV色彩模型的互化
变换公式:
[Y
U
V
]=
100
.0
515
.0
615
.0
436
.0
289
.0
147
.0
114
.0
587
.0
299
.0
-
-
-
-[
R
G
B
]
clear all;
close all;
clc;%清除内存空间信息,以便程序运行
img=imread('1.jpg'); %读取原始图形
img=im2double(img);%将图像映射到[0,1]区间;
[m,n,dim]=size(img);%获得原图像长、宽、维数的数据
subplot(131),imshow(img),title('原图');
%%图像的RGB
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
%%RGB2YUV
Y=zeros(m,n); %亮度
I=zeros(m,n); %彩度
V=zeros(m,n); %浓度
%定义乘法矩阵
matrix=[0.299 0.587 0.114;
-0.147 -0.298 0.436;
0.615 -0.515 -0.100];
%用for循环实现图像中每一个点的矩阵变换,即实现模型变换 for i=1:m
for j=1:n
tmp=matrix*[R(i,j) G(i,j) B(i,j)]';
Y(i,j)=tmp(1);
U(i,j)=tmp(2);
V(i,j)=tmp(3);
end
end
%使Y、U、V分量全部在[0,255]区间内
Y(Y > 255) = 255;
Y(Y < 0) = 0;
UU > 255) = 255;
U (U < 0) = 0;
V(V > 255) = 255;
V (V < 0) = 0;
YUV = cat(3, Y, U, V);
subplot(132),imshow(YUV),title('YUV');
%%YUV2RGB
matrix=inv(matrix);%使用inv函数,求反变换矩阵
for i=1:m
for j=1:n